我正在尝试将2个视频合成为一个(音频也是如此)并保存为文件。比如,在最终视频的左半部分显示源视频,在右边显示ohter源。任何编码都没问题。不是DirectShow。
我怀疑IMFVideoMixerControl可能与此有关,但遗憾的是我对MF来说太新了,无法确定正确的步骤以实现这一目标。如果您可以给我一些指导或网上有任何示例,请告诉我。谢谢你的帮助。
答案 0 :(得分:4)
IMFVideoMixerControl
用于呈现视频。你正在寻找SourceReader。
这就是我要做的事情:
IMFSourceReader
。IMFSinkWriter
并将其配置为框架宽度等于源阅读器框架宽度的总和。
IMFSourceReader::GetCurrentMediaType
获取源媒体类型。MFGetAttributeSize
的{{1}}获取每种来源类型的框架尺寸。MF_MT_FRAME_SIZE
为SinkWriter创建媒体类型,并使用MFCreateMediaType
将源中的属性复制到接收媒体类型。IMFMediaType::CopyAllItems
的{{1}}来设置接收器类型增加的帧尺寸。MFSetAttributeSize
创建与源类型相同的视频流,但宽度属性MF_MT_FRAME_SIZE
,附加一个新的IMFSinkWriter::AddStream
,其帧宽增加。IMFSample
将每个源缓冲区复制到分配的媒体缓冲区的相应端。IMFMediaBuffer
将MFCopyImage
写入文件接收器。有关基本的SourceReader / SinkWriter处理,请参阅this sample,尽管此示例使用视频捕获源而不是文件。您可以使用IMFSinkWriter::WriteSample
而不是IMFSample
创建文件SourceReader。
编辑:我意识到你也问过音频。我的回答只涉及合成视频流。