You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Media Foundation读取部分H265视频返回错误分辨率的原因咨询

问题分析:Media Foundation Source Reader读取H265视频返回错误分辨率

原因说明

  • H.265(HEVC)编码存在编码分辨率与显示分辨率分离的机制:为了适配编码树单元(CTU,通常为64x64)的对齐要求,原始视频分辨率会被向上对齐到CTU的整数倍,这个对齐后的尺寸是编码层面的帧存储尺寸。
  • 你遇到的2176正是2160向上对齐到64倍数的结果:2160 ÷ 64 = 33.75,向上取整为34,34×64=2176。而GetCurrentMediaType返回的MF_MT_FRAME_SIZE属性对应的是编码分辨率,并非视频实际的显示分辨率。
  • 实际显示的有效分辨率需要从媒体类型的MF_MT_MINIMUM_DISPLAY_APERTURE或MF_MT_PAN_SCAN_APERTURE属性中获取,这两个属性存储了视频需要展示的真实区域。

正确获取实际分辨率的代码示例

CComPtr<IMFSourceReader> r;
CComPtr<IMFMediaType> NativeMT;
MFCreateSourceReaderFromURL(L"file.mp4", 0, &r);
r->GetCurrentMediaType((DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM, &NativeMT);

// 获取编码层面的帧存储尺寸
UINT codedWidth = 0, codedHeight = 0;
MFGetAttributeSize(NativeMT, MF_MT_FRAME_SIZE, &codedWidth, &codedHeight);

// 获取实际显示分辨率
UINT displayWidth = 0, displayHeight = 0;
if (SUCCEEDED(MFGetAttributeSize(NativeMT, MF_MT_MINIMUM_DISPLAY_APERTURE, &displayWidth, &displayHeight))) {
    // 优先取最小显示光圈对应的尺寸,即实际显示分辨率
} else {
    // 无显示光圈属性时,回退到编码分辨率
    displayWidth = codedWidth;
    displayHeight = codedHeight;
}

转码失败的关联提示

转码失败大概率和编码/显示分辨率不匹配有关:Media Foundation转码器默认可能直接基于编码分辨率处理,导致输出异常。解决时需确保转码器的输出媒体类型正确配置显示区域,或强制匹配实际显示分辨率。


内容的提问来源于stack exchange,提问作者Michael Chourdakis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:10:38