IMFVideoMixerControlビデオのレンダリングに使用されます。SourceReader を見ると、正しい軌道に乗っています。
これが私がすることです:
IMFSourceReaderビデオ ソースごとに1 つ作成します。
- を作成し
IMFSinkWriter、ソース リーダーのフレーム幅の合計に等しいフレーム幅で設定します。
IMFSourceReader::GetCurrentMediaTypeソース メディア タイプを取得するために使用します。
- 各ソース タイプのフレーム ディメンションを取得するには
MFGetAttributeSize、GUID と共に使用します。MF_MT_FRAME_SIZE
- SinkWriter のメディア タイプを作成し、ソースからシンク メディア タイプに属性をコピーするために
MFCreateMediaType使用します。IMFMediaType::CopyAllItems
MFSetAttributeSizeGUID と共に使用しMF_MT_FRAME_SIZEて、シンク タイプの増加したフレーム ディメンションを設定します。
IMFSinkWriter::AddStream幅属性を除き、ソース タイプと同じビデオ ストリームを作成するために使用します。
- ソースごとに IMFSourceReader::ReadSample を呼び出し、ソースごとに 1 つの IMFSample を提供します。
- 新しい を割り当て、フレーム幅を増やし
IMFSampleた新しい を取り付けます。IMFMediaBuffer
MFCopyImage各ソース バッファを、割り当てられたメディア バッファの対応する側にコピーするために使用します。
- ファイル シンクへの
IMFSinkWriter::WriteSample書き込みに使用します。IMFSample
この例では、ファイルの代わりにビデオ キャプチャ ソースを使用していますが、基本的な SourceReader/SinkWriter 処理については、このサンプルを参照してください。MFCreateSourceReaderFromURLの代わりに使用して、ファイル SourceReader を作成できますMFCreateSourceReaderFromMediaSource。
編集:あなたもオーディオについて尋ねたことに気づきました。私の答えは、ビデオ ストリームの合成のみに対応しています。