2015-11-03 58 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接口來避免這種情況。