【问题标题】:Accessing video framerate from WMP (10+) control in VB6从 VB6 中的 WMP (10+) 控件访问视频帧率
【发布时间】:2017-01-11 04:07:11
【问题描述】:

我必须使用提到的工具组合,因此“不要那样做”的建议没有帮助(-:

我找不到可靠的方法来确定加载到 WMP 控件中的视频的帧速率。有没有一些已知的方法来获得这个值?这是一条非常基本的信息,我不敢相信我没有遗漏什么。

理论上我可以实例化 IWMPMedia3 并将其设置为 [player].currentmedia 然后请求 .GetAttributeByType("framerate", "", 0),但显然播放器/媒体必须处于某种状态才能使其正常工作,我无法确定当该状态存在时。

在 IDE 中,当我尝试获取属性时,它总是以Invalid procedure call or argument 失败。我打开调试窗口并测试是否实例化了正确的对象——它们是。然后我可以继续,我有正确的帧率。显然,这在生产中是行不通的。 (-:

这不仅仅是等待,我必须实际调试对象上的 Nothing 测试才能继续进行。

【问题讨论】:

    标签: vb6 wmp


    【解决方案1】:

    在您为控件设置源视频后,帧速率项似乎没有立即初始化。我试图等待并调用 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)
    

    【讨论】:

    • 很棒的信息,谢谢。我永远不会到达那里。顺便说一句,我认为使用 IWMPMedia3 的步骤可能是多余的,因为 .currentmedia 项目似乎默认支持该接口。将进行测试。
    • 这不是很明显,但 .currentmedia 确实支持 IWPMedia3,至少在更新的 WMP 版本中是这样。据我所知,获取帧速率不适用于 .FLV(显然它不会将其存储为元数据),但这是迄今为止唯一的问题。再次感谢!
    • 我的大部分多媒体体验都不是 WMP 的,所以我只是按照您关于 IWMPMedia3 的指导。你对 FLV 的看法是对的,因为我在这里用一个文件进行了测试,但帧率不起作用。还有另一种适用于所有 4 种格式(和其他格式)的解决方案。这是我工作的公司的LEADTOOLS SDK,但我上次没有建议,因为你明确提到了WMP控制。如果您愿意,可以尝试从网站上进行免费评估。如果您必须坚持使用它,它可以与 VB6 一起使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多