2015-11-03 60 views
1

我正在编写一个将未压缩音频编码为MP3的实用程序。我正在使用C++和媒体基础API,它在编码到MP3时非常光滑。但我需要确保ID3标签位于文件的开头。我使用ID3Lib编写ID3标签数据,然后调用MF API处理MP3编码。这样做时,对MP3的编码基本上从文件的开头开始,并覆盖文件中的ID3标签数据。C++中的媒体基础API和ID3标签

有没有什么办法通过媒体基础API进行编码,并让它不覆盖现有的ID3数据?

如果没有,是否有任何方法使用MF API编写ID3数据?我可以找到描述获取元数据的文章,但在编写元数据时几乎没有。

回答

0

一种可能的方法是使用接收器作家。

致电MFCreateFile打开您的id3标记文件。 您接收到一个指向IMFByteStream接口的指针。

在IMFByteStream接口上调用Seek或SetCurrentPosition以在文件末尾(在ID3标签数据之后)查找。

调用MFCreateSinkWriterFromURL并传递IMFByteStream的指针,使用NULL作为输出url。

做转码过程。

我没有试过这个解决方案,所以也许这个汇编器会在文件的起始处寻找。如果是这样,你可以尝试实现你自己的IMFByteStream接口来避免这种情况。