我正在學習android編程,並一直嘗試MediaPlayer音頻流。 Android guide很明顯,你只需要指定URL,但是我很難確定該URL應該實際上應該包含在代碼中以傳送各種廣播電臺。 (我不想在互聯網上播放mp3文件,但實際上使用「真正的」流媒體)。
我在下面描述的是迄今爲止我發現的,我已經確定它工作正常,但這一切似乎都相當糟糕,我的問題是:有沒有更好的方法來確定要使用哪些URL?
首先我遇到了一篇關於Basics of streaming protocols的優秀文章。 其次,我看着shoutcast,並嘗試選擇它使用的URL。對於我看過的電臺(例如www.rockradio1.com),它正在啓動一個.pls文件(根據維基百科的播放列表文件),VLC解釋並開始播放流媒體音樂。 但是,將.pls文件提供給我的android程序不起作用。 我再擡頭的.PLS文件中找到類似:Android MediaPlayer音頻流 - 使用哪個URL?
[playlist]
numberofentries=5
File1=http://91.121.7.49:8000
Title1=(#1 - 177/400) RockRadio1.Com - Classic Hard Rock and Heavy Metal Mix, 24/7 Live Requests/www.rockradio1.com
Length1=-1
File2=http://91.121.195.222:8000
Title2=(#2 - 186/400) RockRadio1.Com - Classic Hard Rock and Heavy Metal Mix, 24/7 Live Requests/www.rockradio1.com
Length2=-1
File3=http://91.121.75.155:8000
Title3=(#3 - 190/400) RockRadio1.Com - Classic Hard Rock and Heavy Metal Mix, 24/7 Live Requests/www.rockradio1.com
Length3=-1
File4=http://77.74.192.50:8000
Title4=(#4 - 70/100) RockRadio1.Com - Classic Hard Rock and Heavy Metal Mix, 24/7 Live Requests/www.rockradio1.com
Length4=-1
File5=http://176.31.235.147:8000
Title5=(#5 - 351/500) RockRadio1.Com - Classic Hard Rock and Heavy Metal Mix, 24/7 Live Requests/www.rockradio1.com
Length5=-1
Version=2
當我給那些URL之一到Android程序,它的工作確定。 還東張西望我碰到一個播放列表文件附帶
File1=http://rockradio1-3.mixstream.net
的rockradio1網站和堵塞該URL的工作確定了。 但是,這些網址似乎都有點瑕疵,而且我猜測有可能是一種更復雜的方式,即正確的流媒體客戶端操作。就我個人而言,我只是將其用作學習練習,而不是試圖開發任何商業軟件,但我會對如何更好地確定要使用的URL感興趣。
所以你建議使用類似http://yp.shoutcast.com/sbin/tunein-station.pls?id=558051這樣形式的shoutcast URL來獲取PLS文件,然後解析它並將其中的網址提供給Android MediaPlayer。是的,這聽起來不錯。感謝您的鏈接;我會放棄這一點。我認爲這些ID是相當靜態的。 –
非常。只要您將流式URL選擇基於當前在shoutcast網站上的當前流行網址選項(或您要從中提取數據的位置),那麼您就不應該遇到任何問題。對非公開對象(因此可能會改變)的硬編碼URL可能是一個問題。你的意思是什麼?您可以展開鏈接SO問題中給出的解析器方法,以提取標題和其他元數據。這實際上只是一個逐行移動文件並讀取第一個字符以查看該行代表的內容的問題。 – LeoR
關於ID,我的意思是,當你看着shoutcast網站時,所有的電臺都有一個http://yp.shoutcast.com/sbin/tunein-station.pls?id=558051形式的URL,其中每個電臺的id不同。 (他們提供的工具提示是不同的 - 你必須複製鏈接位置來獲取實際的URL)。如果歌曲標題發生變化,將很好,但由於它必須位於流媒體協議中,所以MediaPlayer必須顯示(如果我將其呈現在視圖中),或者MediaPlayer.OnInfoListener中可能傳遞了某些內容。需要更多調查! –