我使用Matt Gallagher's AudioStreamer通過HTTP播放MP3。我需要知道歌曲的長度和ID3標籤。使用AudioStreamer獲取MP3 ID3元數據和歌曲時長
是否有可能在AudioStreamer中實現這一點,以及如何實現?
我使用Matt Gallagher's AudioStreamer通過HTTP播放MP3。我需要知道歌曲的長度和ID3標籤。使用AudioStreamer獲取MP3 ID3元數據和歌曲時長
是否有可能在AudioStreamer中實現這一點,以及如何實現?
從他Docs:
範圍有限
有一點需要澄清 之前,我繼續:這個 類用於音頻流。 通過流式傳輸,我不只是指「通過HTTP傳輸的 音頻文件」。相反,我的意思是一個連續的HTTP 源,沒有結束,無限期地繼續 (如廣播電臺, 不是一首歌)。
這似乎意味着獲得持續時間可能會很艱難。
這裏是如何得到ID3v2標籤:
獲取元數據
元數據的最簡單的來源是HTTP標頭。 裏面的 handleReadFromStream:事件類型: 方法,使用CFReadStreamCopyProperty 到 kCFStreamPropertyHTTPResponseHeader 酒店需要從CFReadStreamRef複製, 那麼你可以使用 CFHTTPMessageCopyAllHeaderFields到 複製頭字段出 響應。對於許多流式音頻服務器,流名稱是 這些字段之一。元數據的相當困難的來源是ID3標籤。 ID3v1總是在 的文件末尾(因此在流式傳輸時 無用)。 ID3v2的位置是 ,因此可能更容易訪問 。
我從來沒有讀過ID3標籤,但我 懷疑,如果緩存第一 幾百千字節的文件 的地方它加載的,打開緩存 與AudioFileOpenWithCallbacks和 然後讀取kAudioFilePropertyID3Tag 與AudioFileGetProperty您可能是 能夠讀取ID3數據(如果它存在 )。就像我說的那樣:我已經 從來沒有這樣做過,所以我不知道 肯定會起作用。
MP3流被分成「幀」,它們是單個數據單元。有些數據流會每隔幾幀添加一個ID3元數據塊,您可以在理論上掃描並讀取這些數據塊。
這裏瞭解更多信息:http://jicyshout.sourceforge.net/oreilly-article/java-streaming-mp3-pt2/java-streaming-mp3-pt2.html