none
directshow中IMediadet->GetBitmapBits有的视频文件获取不到视频图像数据怎么办? RRS feed

  • 问题

  •          一般的视频文件可以获取到视频图像数据,有些mp4格式文件获取不到,用播放器播放可以正常播放。

             pDet->GetBitmapBits(index,0,buf,wid,hei)

            


    2018年7月10日 6:23

全部回复

  • Hi,

    感谢在MSDN论坛发帖。

    >>一般的视频文件可以获取到视频图像数据,有些mp4格式文件获取不到,用播放器播放可以正常播放。
    pDet->GetBitmapBits(index,0,buf,wid,hei)

    请问出错误的时候返回值是什么?

    从你的代码来看,你将pBufferSize参数设置为NULL。这样做可以确定所需缓冲区的大小, 大小在pBufferSize指向的变量中返回。 然后创建缓冲区并再次调用该方法,将pBuffer设置为缓冲区的地址。才可以获取信息。

    关于更多代码示例,可以参考下面的文档。

    https://docs.microsoft.com/zh-cn/windows/desktop/DirectShow/imediadet-getbitmapbits

    希望对你有所帮助。

    Best Regards,

    Baron Bi


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年7月10日 9:06
  • 第二个参数pBufferSize为空,第三个参数是缓冲区的地址,不是空,执行是正确的没有错误,但是返回的数据为0全黑。
    2018年7月11日 1:25
  • >>第二个参数pBufferSize为空,第三个参数是缓冲区的地址,不是空,执行是正确的没有错误,但是返回的数据为0全黑。

    请参考我之前的回复,当你的pBufferSize参数设置为空时,你实际是在获取所需要的缓冲区的大小,而不是在获取图片数据。pBufferSize将返回正确的buffer大小。这时候,你需要第二次调用该函数,将pBufferSize设置为刚才获取的buffer大小,重新获取图片数据。

    Best Regards,

    Baron Bi


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年7月12日 5:41
  • 应该不是index的问题,因为一般视频文件都是对的,只有mp4文件不行,而且我index是一直有不停的往上加的。
    2018年7月12日 9:28