【问题标题】:Media Foundation add audio stream to video fileMedia Foundation 将音频流添加到视频文件
【发布时间】:2018-07-10 16:37:42
【问题描述】:

我能够成功地对仅包含 H.264 编码视频的MP4 文件进行编码(使用 IMFSinkWriter 接口)。现在我想给它添加一个音频流。

每当我尝试使用以下方法为音频创建接收器编写器时:

MFCreateSinkWriterFromURL(filePath, null, null, &pSinkWriter)

它删除了之前的文件,只写入了音频(嗯,根据this link这是预期的)。

所以我的问题是:如何将音频流添加到仅包含视频流的现有文件中?

或者,如果我同时拥有来自音频和视频的原始数据,我如何将它们都编码到一个媒体文件中(我想我必须做一些称为多路复用的事情。如果是这样,有人可以为我提供有用的参考)吗?

【问题讨论】:

    标签: c++ winapi audio video ms-media-foundation


    【解决方案1】:

    当您执行IMFSinkWriter::BeginWriting 时,Sink Writer API 从头开始​​创建一个媒体文件,直到您执行IMFSinkWriter::Finalize 时最终完成。您不会向最终文件添加新的流(好吧,您可以这样做,但它的工作方式不同 - 请参阅下面的最后一段)。

    要创建包含视频和音频的媒体文件,您需要在开始之前添加两个流。两次调用IMFSinkWriter::AddStream,然后是两次IMFSinkWriter::SetInputMediaType,然后您开始编写IMFSinkWriter::BeginWriting,并同时提供视频和音频数据IMFSinkWriter::WriteSample,提供各自的流索引。

    要向现有文件添加新流,您需要创建一个全新的文件。您拥有的选项之一是从您拥有的现有文件中读取已经压缩的数据,并使用IMFSinkWriter::WriteSample 方法将其写入新文件,无需重新压缩。同时可以写入第二个流进行压缩。这样,您可以通过从现有文件中获取视频并添加/编码额外的音轨来创建视频和音频 MP4 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      • 2018-04-02
      相关资源
      最近更新 更多