代码之家  ›  专栏  ›  技术社区  ›  Landstander

Windows Mobile Directshow:指定WMV视频捕获的比特率/质量

  •  0
  • Landstander  · 技术社区  · 14 年前

    我被这个难住了,我真的希望有人能给我指出正确的方向。

    最终,我的目标是模仿微软的视频设置 相机捕捉对话框 从我的C++代码中输出“消息传递”质量模式(64 Kbps)。 目前,我的代码正在输出一个比特率为352kbps的WMV文件。

    this . 该代码的基本思想是使用propertybag将比特率写入DMO的属性。

    更新: 在windows mobile中,我能找到的最接近于比特率的编解码器属性是“gèwszWMVCVBRQuality”。微软的 documentation 这个属性的定义让我非常困惑:它基本上似乎是说一个更高的数字等于一个更高的质量,但它绝对没有解释每个数字的细节。当我试图通过WMV9 DMO的propertybag将这个属性设置为“1”这样的值时,遇到了-2147467259(未知)错误。

    总结一下:在windows移动平台上,指定通过directshow(wmv9)捕获的视频的比特率/质量的基本策略是什么? 我听说过(或想知道)以下方法:

    1. 创建您自己的自定义转码器/编码器来指定它。这似乎没有必要,因为WMV编码器工作得很好-它只是在太高的比特率。
    2. VIDEOINFOHEADER有一个bitrate属性,但是我怀疑在这里指定新的设置不会改变实际的编码过程,因为我认为文件属性在编码之后才会起作用。

    我会公布具体的源代码,但在这一点上,它可能会混淆更多,而不是它的帮助,因为我这么多挣扎在如何做到这一点。在这一点上,我只是想验证一下总体策略。

    谢谢!

    1 回复  |  直到 14 年前
        1
  •  1
  •   Landstander    14 年前

    好的,我在设置propertybag值(方法1)时绕过了这个错误,现在我可以编程地设置视频“质量”,而不会发生意外。

    我把事情搞得乱七八糟。 之后 将WMV9 DMO编码器添加到图形中,但是 之前 正在调用renderstream。使用propertybag和变量对DMO的(同样,我使用的是CLSID\u DMOWrapperFilter)g\u wszWMVCVBRQuality属性进行更改。对于Windows Mobile,这个全局值是在windowsmobile6sdk中定义的 wmcodestrs.h文件 文件。

    基本上,你设定的数字越低,质量就越差。就像医生说的;)

    >: (