从 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)