我正在尝试将 2 个视频合成为一个(也是音频)并另存为文件。比如说,在最终视频的左半部分显示一个源视频,在右侧显示另一个源。任何编码都可以。不是 DirectShow。
我怀疑 IMFVideoMixerControl 可能与此有关,但不幸的是,我对 MF 太陌生,无法确定为实现这一目标而采取的正确步骤。如果您能给我一些指导或网络上有任何示例,请告诉我。谢谢您的帮助。
我正在尝试将 2 个视频合成为一个(也是音频)并另存为文件。比如说,在最终视频的左半部分显示一个源视频,在右侧显示另一个源。任何编码都可以。不是 DirectShow。
我怀疑 IMFVideoMixerControl 可能与此有关,但不幸的是,我对 MF 太陌生,无法确定为实现这一目标而采取的正确步骤。如果您能给我一些指导或网络上有任何示例,请告诉我。谢谢您的帮助。
IMFVideoMixerControl
用于渲染视频。您在查看 SourceReader 时走在正确的轨道上。
这是我要做的:
IMFSourceReader
为每个视频源创建一个。IMFSinkWriter
并配置它的帧宽度等于源阅读器帧宽度的总和。
IMFSourceReader::GetCurrentMediaType
获取源媒体类型。MFGetAttributeSize
与 GUID一起使用MF_MT_FRAME_SIZE
可获取每种源类型的框架尺寸。MFCreateMediaType
并用于IMFMediaType::CopyAllItems
将属性从源复制到接收器媒体类型。MFSetAttributeSize
与 GUID一起使用MF_MT_FRAME_SIZE
来设置接收器类型的增加的框架尺寸。IMFSinkWriter::AddStream
创建与源类型相同的视频流,宽度属性除外IMFSample
,附加一个IMFMediaBuffer
增加框架宽度的新的。MFCopyImage
将每个源缓冲区复制到分配的媒体缓冲区的对应端。IMFSinkWriter::WriteSample
将您IMFSample
的内容写入文件接收器。请参阅此示例了解一些基本的 SourceReader/SinkWriter 处理,尽管此示例使用视频捕获源而不是文件。您可以使用 SourceReaderMFCreateSourceReaderFromURL
而不是MFCreateSourceReaderFromMediaSource
.
编辑:我意识到你也问过音频。我的回答仅涉及合成视频流。