【问题标题】:Resizer MFT fails to process output during playback of H264-encoded video在播放 H264 编码的视频期间,Resizer MFT 无法处理输出
【发布时间】:2016-05-30 14:43:15
【问题描述】:

我正在实现一个用于播放视频的 Windows 应用程序(某种视频播放器)。我正在使用 MediaFoundation 进行视频播放,它适用于大多数视频,但无法播放某些视频。

我创建了以下 MF 拓扑:MF_TOPOLOGY_SOURCESTREAM_NODE -> MF_TOPOLOGY_TRANSFORM_NODE(Microsoft H264 视频解码器 MFT)-> MF_TOPOLOGY_TRANSFORM_NODE(Resizer MFT)-> MF_TOPOLOGY_TRANSFORM_NODE(颜色转换器 MFT)-> MF_TOPOLOGY_OUTPUT_NODE(SampleGrabberSink)。

当我在我的应用程序中播放某些视频时,会发生以下情况(通过 mftrace 工具从 MF 跟踪中获取):

  1. MF 为 Resizer MFT 创建变换节点、MFTransform 和 MEdiaObject:

    COle32ExportDetours::CoCreateInstance @ Created {1EA1EA14-48F4-4054-AD1A-E8AEE10AC805} Resizer DMO (C:\Windows\SysWOW64\vidreszr.dll) @0561F060 - 跟踪接口:IMFTransform @0561F060,IMediaObject @0561F078

  2. MF设置resizer变换的输入类型和输出类型:

    CMFTransformDetours::SetInputType @0561F060 成功 MT: MF_MT_MAJOR_TYPE=MEDIATYPE_Video; MF_MT_SUBTYPE=MFVideoFormat_YV12; MF_MT_FRAME_SIZE=3092376453526 (720,406); MF_MT_FRAME_RATE=107374182401(25,1); MF_MT_PIXEL_ASPECT_RATIO=1743756722581(406,405); MF_MT_INTERLACE_MODE=7; MF_MT_AVG_BITRATE=639540; MF_MT_DEFAULT_STRIDE=720; MF_MT_ALL_SAMPLES_INDEPENDENT=1; MF_MT_FIXED_SIZE_SAMPLES=1; MF_MT_SAMPLE_SIZE=438480

    CMFTransformDetours::SetOutputType @0561F060 成功 MT: MF_MT_MAJOR_TYPE=MEDIATYPE_Video; MF_MT_SUBTYPE=MFVideoFormat_YV12; MF_MT_FRAME_SIZE=3092376453526 (720,406); MF_MT_FRAME_RATE=42949672960400000 (10000000,400000); MF_MT_GEOMETRIC_APERTURE=00 00 00 00 00 00 00 00 d0 02 00 00 96 01 00 00 ; MF_MT_PIXEL_ASPECT_RATIO=1743756722581(406,405); MF_MT_INTERLACE_MODE=7; MF_MT_DEFAULT_STRIDE=720; MF_MT_ALL_SAMPLES_INDEPENDENT=1; MF_MT_FIXED_SIZE_SAMPLES=1;MF_MT_SAMPLE_SIZE=438480

  3. 用户开始播放视频。

  4. MF 再次设置 resizer 变换的输入类型和输出类型:

    CMFTransformDetours::SetInputType @0561F060 成功 MT: MF_MT_MAJOR_TYPE=MEDIATYPE_Video; MF_MT_SUBTYPE=MFVideoFormat_YV12; MF_MT_FRAME_SIZE=3092376453536 (720,416); MF_MT_FRAME_RATE=107374182401 (25,1); MF_MT_GEOMETRIC_APERTURE=00 00 00 00 00 00 00 00 d0 02 00 00 96 01 00 00 ; MF_MT_MINIMUM_DISPLAY_APERTURE=00 00 00 00 00 00 00 00 d0 02 00 00 96 01 00 00 ; MF_MT_PAN_SCAN_APERTURE=00 00 00 00 00 00 00 00 d0 02 00 00 96 01 00 00 ; MF_MT_PIXEL_ASPECT_RATIO=1743756722581 (406,405); MF_MT_VIDEO_PRIMARIES=2; MF_MT_INTERLACE_MODE=7; MF_MT_VIDEO_NOMINAL_RANGE=2; MF_MT_TRANSFER_FUNCTION=5; MF_MT_YUV_MATRIX=1; MF_MT_AVG_BITRATE=639540; MF_MT_DEFAULT_STRIDE=720; MF_MT_ALL_SAMPLES_INDEPENDENT=1; MF_MT_FIXED_SIZE_SAMPLES=1; MF_MT_SAMPLE_SIZE=449280; MF_MT_COMPRESSED=0; MF_MT_AVG_BIT_ERROR_RATE = 0

    CMFTransformDetours::SetOutputType @0561F060 成功 MT: MF_MT_MAJOR_TYPE=MEDIATYPE_Video; MF_MT_SUBTYPE=MFVideoFormat_YV12; MF_MT_FRAME_SIZE=3092376453526 (720,406); MF_MT_FRAME_RATE=42949672960400000 (10000000,400000); MF_MT_GEOMETRIC_APERTURE=00 00 00 00 00 00 00 00 d0 02 00 00 a0 01 00 00 ; MF_MT_MINIMUM_DISPLAY_APERTURE=00 00 00 00 00 00 00 00 d0 02 00 00 96 01 00 00 ; MF_MT_PAN_SCAN_APERTURE=00 00 00 00 00 00 00 00 d0 02 00 00 96 01 00 00 ; MF_MT_PIXEL_ASPECT_RATIO=1743756722581 (406,405); MF_MT_VIDEO_PRIMARIES=2; MF_MT_INTERLACE_MODE=7; MF_MT_VIDEO_NOMINAL_RANGE=2; MF_MT_TRANSFER_FUNCTION=5; MF_MT_YUV_MATRIX=1; MF_MT_DEFAULT_STRIDE=720; MF_MT_ALL_SAMPLES_INDEPENDENT=1; MF_MT_FIXED_SIZE_SAMPLES=1; MF_MT_SAMPLE_SIZE=438480

  5. Resizer 转换的 MediaObject 无法处理输出:

    CMFTransformDetours::ProcessInput @0561F060 流 ID 0,样本 @056F74C8,时间 80 毫秒,持续时间 40 毫秒,缓冲区 1,大小 449280B,{B4DD4A8C-0BEB-44C4-8B75-B02B913B04F0}=0;MFSampleExtension_Discontinuity_CleanPoint=1;MFSampleExtension_Discontinuity_Point=1 ;MFSampleExtension_Interlaced=0;MFSampleExtension_Token=@00000000 CMediaObjectDetours::ProcessInput @0561F078 MediaBuffer @0567AFE8,标志 0x00000007,时间 80 毫秒,持续时间 40 毫秒,大小 449280B CMediaObjectDetours::ProcessOutput @0561F078 失败 hr=0x80004005 E_FAIL CMFTransformDetours::ProcessOutput @0561F060 失败 hr=0x80004005 E_FAIL

ResizerMFT第二次设置输入输出类型后处理输出失败的原因是什么?与输出类型的属性有关吗?有没有办法获得有关此失败的更多信息?

任何答案将不胜感激。

【问题讨论】:

    标签: video ms-media-foundation


    【解决方案1】:

    我不确定,因为 hr=0x80004005 表示“未指定的错误”,这是一个非常有用的信息...

    看看你的问题,在 Set (in/out) Type 上,MF_MT_INTERLACE_MODE 等于 7:MFVideoInterlace_MixedInterlaceOrProgressive。

    可能在隔行扫描时出现此错误。

    在您的 ProcessInput 中,MF_MT_INTERLACE_MODE 等于 0:MFVideoInterlace_Unknown。或许问题出在这里。

    【讨论】:

      猜你喜欢
      • 2016-07-17
      • 2018-10-15
      • 2020-06-09
      • 2020-02-17
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 2019-04-19
      相关资源
      最近更新 更多