2011-09-29 60 views
2

背景: 我是使用雙緩衝方法進行html shoutcast的流式廣播。我從流中獲取元數據信息使用http://www.smackfu.com/stuff/programming/shoutcast.html如何在從shoutcast流中檢索元數據時獲取新歌曲信息的通知

問題 我有三個問題。
1-我已經使用urlconnection和inputstream來收聽廣播。我不想打開一個新的連接來檢索元數據。但是,當我試圖從同一個輸入流中獲得兩個音頻時,我再也聽不到收音機了。我想這是不可能的,我必須使用兩個獨立的連接?對性能不壞?

2-當應用程序啓動時,我檢索當前歌曲的信息。沒問題。但是,如何在歌曲改變時獲得通知。據說服務器會在歌曲改變時發送信息。但是我開始URL連接,獲取輸入流,檢索元數據並關閉連接。我無法理解我應該如何通知服務器?我應該保持連接打開嗎?

3-和最後一個問題。在Android 2.2之前,AFAIK漸進式流播放是不可能的。這隻適用於http嗎?如果協議是rtsp,我可以在android 2.2之前進行漸進式流式傳輸嗎?任何人都請確認並清楚?

非常感謝,

+1

你能分享你的代碼來檢索南方的元數據嗎? – Nishant

+0

@efeyc您正在使用什麼課程將流中的拆分音頻發送到媒體播放器? – Searock

+0

更好地發佈其他人的代碼以獲得位級別的幫助 – Gattsu

回答

2

你必須記住,從冰冷的-metaint頭字段數。

從流(您發送到音頻解碼器)接收到很多字節後,您必須期望元數據部分,並讀取(也不會將這些數據發送到音頻解碼器)。 然後您再次接收來自流的編碼音頻,並繼續在冰冷metaint字節後定期讀取元數據的過程。

這意味着服務器定期發送元數據(關於藝術家/歌曲標題的信息),並且您的代碼必須將輸入流拆分爲音頻和元數據。

+0

終於我明白了。現在我同時獲得直播和元數據,但是我還有另外一個問題。當我將緩衝的數據傳輸給播放器時,會在幾秒鐘內發生小差距。 – efeyc

+0

奇怪。連接緩慢?確保爲解碼器提供足夠的數據以保持2秒鐘的音頻。如果更少,則更好地停止播放,並向用戶顯示更多的預緩衝信息。 –

+0

更好地發佈代碼片段 – Gattsu

3
  1. 你不應該打開的元數據新的連接。元數據被整合到MP3流中(所有這些都在您發佈的鏈接中描述)。
  2. 如果關閉連接,顯然你不再能夠接收MP3流或元數據。
  3. 參見:Streaming Audio from A URL in Android using MediaPlayer?
+0

但對於Shoutcast流,似乎無法使用「MediaPlayer」檢索元數據,因此需要另一個連接來讀取流並提取此元數據。 – jul