从 VB6 中的 WMP (10+) 控件访问视频帧率
Accessing video framerate from WMP (10+) control in VB6
我必须使用提到的工具组合,所以总计 "don't do that" 的建议没有帮助(-:
我找不到可靠的方法来确定加载到 WMP 控件中的视频的帧率。有一些已知的方法来获得这个价值吗?这是一条非常基本的信息,我不敢相信我没有遗漏任何东西。
理论上我可以实例 IWMPMedia3
并将其设置为 [player].currentmedia
然后请求 .GetAttributeByType("framerate", "", 0)
,但显然 player/media 必须处于某种状态可以正常工作,但我无法确定该状态何时存在。
在 IDE 中,当我尝试获取属性时,它总是失败并返回 Invalid procedure call or argument
。我打开调试 window 并测试是否实例化了正确的对象——它们是。然后我可以继续,我有正确的帧率。显然,这在生产中行不通。 (-:
不仅仅是等待才有用——我必须实际调试对象上的 Nothing 测试才能使其继续。
您将源视频设置到控件后,帧率项似乎没有立即初始化。我试着等待并调用 DoEvents,但起初没有找到让它工作的可靠方法。有时会显示一个消息框并等待 30 秒,但并非总是如此。
然后我决定通过代码检查该属性,令我惊讶的是,仅使用 getAttributeCountByType() 检查似乎无需等待一毫秒即可初始化该项目。
在下面的代码中,如果启用了复选框,调用 getAttributeCountByType(),函数总是成功。我尝试使用 AVI、MPEG 和 MP4 文件,它在 Windows 7 上工作。如果未选中该复选框,则它始终无法处理所有类型的视频文件:
WindowsMediaPlayer1.URL = Text1.Text
Dim media As IWMPMedia3
Set media = WindowsMediaPlayer1.currentMedia
If Check1.Value = vbChecked Then
Label1.Caption = "media.getAttributeCountByType " & media.getAttributeCountByType("framerate", "")
End If
MsgBox "Frame Rate = " & media.getItemInfoByType("framerate", "", 0)
我必须使用提到的工具组合,所以总计 "don't do that" 的建议没有帮助(-:
我找不到可靠的方法来确定加载到 WMP 控件中的视频的帧率。有一些已知的方法来获得这个价值吗?这是一条非常基本的信息,我不敢相信我没有遗漏任何东西。
理论上我可以实例 IWMPMedia3
并将其设置为 [player].currentmedia
然后请求 .GetAttributeByType("framerate", "", 0)
,但显然 player/media 必须处于某种状态可以正常工作,但我无法确定该状态何时存在。
在 IDE 中,当我尝试获取属性时,它总是失败并返回 Invalid procedure call or argument
。我打开调试 window 并测试是否实例化了正确的对象——它们是。然后我可以继续,我有正确的帧率。显然,这在生产中行不通。 (-:
不仅仅是等待才有用——我必须实际调试对象上的 Nothing 测试才能使其继续。
您将源视频设置到控件后,帧率项似乎没有立即初始化。我试着等待并调用 DoEvents,但起初没有找到让它工作的可靠方法。有时会显示一个消息框并等待 30 秒,但并非总是如此。
然后我决定通过代码检查该属性,令我惊讶的是,仅使用 getAttributeCountByType() 检查似乎无需等待一毫秒即可初始化该项目。
在下面的代码中,如果启用了复选框,调用 getAttributeCountByType(),函数总是成功。我尝试使用 AVI、MPEG 和 MP4 文件,它在 Windows 7 上工作。如果未选中该复选框,则它始终无法处理所有类型的视频文件:
WindowsMediaPlayer1.URL = Text1.Text
Dim media As IWMPMedia3
Set media = WindowsMediaPlayer1.currentMedia
If Check1.Value = vbChecked Then
Label1.Caption = "media.getAttributeCountByType " & media.getAttributeCountByType("framerate", "")
End If
MsgBox "Frame Rate = " & media.getItemInfoByType("framerate", "", 0)