我正在尝试将2个视频复合到一个(音频)中,并保存为文件。说,在最终视频的左半部分和右侧的OHTER源显示一个源视频。任何编码都可以。不使用DirectShow。
我怀疑imfvideomixercontrol可能与此有关,但不幸的是,我对MF的新手太陌生了,无法逐渐采取正确的步骤,无法实现这一目标。如果您可以给我一些指导或网络上的任何示例,请告诉我。谢谢您的帮助。
IMFVideoMixerControl
用于渲染视频。您在正确的轨道上,看着Sourcereader。
这是我要做的:
- 为每个视频源创建一个
IMFSourceReader
。 - 创建一个
IMFSinkWriter
并用框架宽度等于源读取器框架宽度的总和。- 使用
IMFSourceReader::GetCurrentMediaType
获取源媒体类型。 - 使用
MFGetAttributeSize
与GUIDMF_MT_FRAME_SIZE
使用每种源类型的框架尺寸。 - 使用
MFCreateMediaType
为sindwriter创建媒体类型,并使用IMFMediaType::CopyAllItems
将属性从源复制属性转换为接收器媒体类型。 - 使用guid
MF_MT_FRAME_SIZE
使用MFSetAttributeSize
来设置水槽类型的增加框架尺寸。 - 使用
IMFSinkWriter::AddStream
创建与源类型相同的视频流,除了宽度属性
- 使用
- 呼叫imfsourcereader :: readsample的每个源,为您提供一个imfsample。
- 分配一个新的
IMFSample
,附加了增加框架宽度的新IMFMediaBuffer
。 - 使用
MFCopyImage
将每个源缓冲区复制到分配的媒体缓冲区的相应侧。 - 使用
IMFSinkWriter::WriteSample
将IMFSample
写入文件接收器。
以获取一些基本的Soutcereader/sinkWriter处理,尽管此示例使用视频捕获源而不是文件。您可以使用MFCreateSourceReaderFromURL
而不是MFCreateSourceReaderFromMediaSource
。
编辑:我也意识到您也问了有关音频的信息。我的答案只解决了组合视频流的内容。