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

非标准分辨率下MFCreateSinkWriterFromURL调用失败,MFCreateMPEG4MediaSink正常

创建IMFSinkWriter的两种方式及帧尺寸兼容性问题

创建IMFSinkWriter有两种实现方式:

一、使用MFCreateMPEG4MediaSink

winrt::com_ptr<IMFByteStream> outputStream;
winrt::check_hresult(MFCreateFile(MF_ACCESSMODE_READWRITE, MF_OPENMODE_DELETE_IF_EXIST, MF_FILEFLAGS_NONE, L"D:\Documents\test.mp4", outputStream.put()));
winrt::com_ptr<IMFMediaSink> mp4StreamSink;
winrt::check_hresult(MFCreateMPEG4MediaSink(outputStream.get(), m_videoOut.get(), NULL, mp4StreamSink.put()));
winrt::com_ptr<IMFSinkWriter> sinkWriter;
winrt::check_hresult(MFCreateSinkWriterFromMediaSink(mp4StreamSink.get(), m_containter_attributes.get(), sinkWriter.put()));
sinkWriter->SetInputMediaType(0, m_videoIn.get(), nullptr);

二、使用MFCreateSinkWriterFromURL

winrt::com_ptr<IMFSinkWriter> pSinkWriterVideo;
winrt::check_hresult(MFCreateSinkWriterFromURL(L"D:\Documents\test2.mp4", NULL, m_containter_attributes.get(), pSinkWriterVideo.put()));
winrt::check_hresult(pSinkWriterVideo->AddStream(m_videoOut.get(), &m_videoStreamIndex));
// 当尺寸非标准时出错
winrt::check_hresult(pSinkWriterVideo->SetInputMediaType(m_videoStreamIndex, m_videoIn.get(), nullptr /*编码器属性*/));

兼容性问题

当MF_MT_FRAME_SIZE设为{1920, 1080}时,两种方式均可正常运行;但将其设为{1922, 1089}这类非标准尺寸时,仅MFCreateSinkWriterFromURL方式会在调用IMFSinkWriter::SetInputMediaType时执行失败。

内容的提问来源于stack exchange,提问作者Tom Huntington

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:42:33