我必须使用所提到的工具组合,所以相当于“不要那样做”的建议没有帮助( - :
我找不到可靠的方法来确定加载到WMP控件中的视频的帧速率。是否有一些已知的方法来获得这个值?这是一个基本的信息,我无法相信我不会错过任何东西。
理论上我可以实例IWMPMedia3
并将其设置为[player].currentmedia
然后请求.GetAttributeByType("framerate", "", 0)
,但显然有一些状态是播放器/媒体必须在其中才能使用,我无法确定该状态何时存在。
在IDE中,当我尝试获取属性时,它始终以Invalid procedure call or argument
失败。我打开调试窗口并测试是否实例化了正确的对象 - 它们是。然后我可以继续,我有正确的帧率。显然,这在生产中是行不通的。 ( - :
这不仅仅是等待诀窍 - 我必须实际调试对象上的Nothing以使其继续进行测试。
答案 0 :(得分:2)
在将源视频设置为控件后,似乎没有立即初始化帧速率项。我试着等待并调用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)