C++中的Media Foundation API和ID3标记

Media Foundation API and ID3 tag in C++

本文关键字:ID3 标记 API Foundation 中的 Media C++      更新时间:2023-10-16

我正在编写一个实用程序,将未压缩的音频编码为MP3。我正在使用C++和媒体基础API,它在MP3编码方面非常娴熟。但我需要确保ID3标记位于文件的开头。我使用ID3Lib编写ID3标签数据,然后调用MFneneneba API来处理MP3的编码。在这样做的过程中,MP3的编码基本上是从文件的开头开始的,它覆盖了文件中的ID3标记数据。

是否有任何方法可以通过媒体基金会API进行编码,并使其不覆盖现有的ID3数据?

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

一种可能的方法是使用接收器写入程序。

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

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

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

执行代码转换过程。

我没有尝试这个解决方案,所以也许伸卡手会在文件一开始就寻求。如果是这样,您可以尝试实现自己的IMFByteStream接口来避免这种情况。