媒体基金会的视频组成



我正在尝试将2个视频复合到一个(音频)中,并保存为文件。说,在最终视频的左半部分和右侧的OHTER源显示一个源视频。任何编码都可以。不使用DirectShow。

我怀疑imfvideomixercontrol可能与此有关,但不幸的是,我对MF的新手太陌生了,无法逐渐采取正确的步骤,无法实现这一目标。如果您可以给我一些指导或网络上的任何示例,请告诉我。谢谢您的帮助。

IMFVideoMixerControl用于渲染视频。您在正确的轨道上,看着Sourcereader。

这是我要做的:

  1. 为每个视频源创建一个IMFSourceReader
  2. 创建一个IMFSinkWriter并用框架宽度等于源读取器框架宽度的总和。
    1. 使用IMFSourceReader::GetCurrentMediaType获取源媒体类型。
    2. 使用MFGetAttributeSize与GUID MF_MT_FRAME_SIZE使用每种源类型的框架尺寸。
    3. 使用MFCreateMediaType为sindwriter创建媒体类型,并使用IMFMediaType::CopyAllItems将属性从源复制属性转换为接收器媒体类型。
    4. 使用guid MF_MT_FRAME_SIZE使用MFSetAttributeSize来设置水槽类型的增加框架尺寸。
    5. 使用IMFSinkWriter::AddStream创建与源类型相同的视频流,除了宽度属性
  3. 呼叫imfsourcereader :: readsample的每个源,为您提供一个imfsample。
  4. 分配一个新的IMFSample,附加了增加框架宽度的新IMFMediaBuffer
  5. 使用MFCopyImage将每个源缓冲区复制到分配的媒体缓冲区的相应侧。
  6. 使用IMFSinkWriter::WriteSampleIMFSample写入文件接收器。

以获取一些基本的Soutcereader/sinkWriter处理,尽管此示例使用视频捕获源而不是文件。您可以使用MFCreateSourceReaderFromURL而不是MFCreateSourceReaderFromMediaSource

编辑:我也意识到您也问了有关音频的信息。我的答案只解决了组合视频流的内容。

最新更新