非标准分辨率下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
相关产品推荐
相关产品推荐

