2016-04-16 83 views
0

我要製作網絡廣播播放器程序,但要做到這一點,我需要知道聲音如何流式傳輸。我在Wikipedia上發現UDP協議可以用於流媒體。我也發現可以使用http,但我不確定這是否正確。如何通過互聯網收音機播放聲音?

傳輸音頻的常用方法/協議是什麼?我在哪裏可以查看互聯網廣播電臺如何傳輸音頻? (http://radio17.pl/sluchaj

+0

你很清楚在發佈之前沒有在這裏搜索,或者你會發現[這個問題](http://stackoverflow.com/q/13624048/62576 ),我通過簡單地查看問題右側(招聘廣告下方)的* Related *問題列表,以及在您輸入問題時顯示給您的可能重複內容。 –

+0

@KenWhite除了標題外,我認爲這裏提出的具體問題與鏈接的內容有很大不同,以保證新帖子。 – Brad

回答

0

我在維基百科發現UDP協議可用於流式傳輸。我也發現可以使用http

是的,的確如此。傳統的電話應用程序使用UDP,因爲它通過避免確保可靠連接的開銷來減少網絡開銷。電話技術要求低延遲和有效使用帶寬,但不要求通過線路發送的每一位數都是準確的。 (如果講話的聲音破碎了一秒鐘,我們仍然可以理解某人說的話是由多個音頻幀分散開來的,對於較長時間的腐敗或輟學,我們仍然可以通過上下文線索進行交流。降低延遲比確保聲音被100%準確再現)。

但是,互聯網無線電式流確實而不是需要非常低的延遲。實際上,在編碼器和最終用戶播放之間延遲20秒或更長時間的情況並不少見,而聽衆沒有注意到。這不是一個雙向對話,所以延遲並不重要。音頻質量呢。

像MP3這樣的常見音樂編解碼器並不容忍流損壞。另外,我們不希望我們的音樂經常退出或出現失靈的文物。在這種情況下,TCP連接是最好的,它確保所有數據包按順序傳送,並且有合理的保證數據損壞不會發生。

HTTP是運行在TCP上的一種非常常見的協議。它足夠通用,使其非常適合於傳輸流數據......就像任何其他單向數據一樣。在90年代後期,Nullsoft的開發人員通過一個名爲SHOUTcast的有點符合HTTP規範的服務器實現了流式傳輸。這與開源替代品Icecast一起非常流行。開發人員發現這比當時的專有替代品更容易處理,比如RealPlayer。我懷疑這是SHOUTcast/Icecast抓得很好的原因之一。現在有很多與HTTP兼容的服務器。

傳輸音頻的常用方法/協議是什麼?

最常見的是HTTP,RTMP和HLS。我們在上面討論了HTTP。

RTMP是一個爲Flash開發的協議,但現在已被許多服務器實現。 RTMP爲流式傳輸提供更多功能,例如自適應比特率。這些功能是以複雜性爲代價的。另外,瀏覽器本身不支持RTMP。要在瀏覽器中播放RTMP流,您需要基於Flash的播放器或MediaSourceExtensions支持,您可以使用JavaScript在RTMP中解複用音頻流。 (這是在許多可以購買的現成的JavaScript播放器中實現的,但與HTTP相比,它限制了瀏覽器的兼容性。)HLS(HTTP Live Streaming)實際上並不是一個網絡協議,但更多的是用於使用HTTP的模式。HLS並不需要特殊的流式HTTP服務器,而是通過記錄塊(例如每次3秒)並通過任何常規方式(例如SFTP)將其上傳到普通的Web服務器來工作。除了這些塊以外,還有一個播放列表文件(標準M3U8格式,在評論中有一些額外的信息)指向最新的塊。玩家只需像其他任何文件一樣下載這些塊,然後將它們端對端播放。 HLS的優點是您可以使用任何HTTP CDN,並且在流式傳輸時會自動記錄流。另外,客戶端可以選擇不同的比特率中間流來適應不斷變化的網絡條件,類似於RTMP的自適應比特率。最大的缺點是開銷。 HTTP請求中有大量浪費的數據。此外,與RTMP一樣,HLS在大多數瀏覽器中都不是本機可玩的,必須使用Flash或MediasourceExtensions進行破解。

我在哪裏可以檢查音頻如何通過網絡電臺進行流式傳輸?

最簡單的方法是啓動一個像Fiddler這樣的工具來攔截瀏覽器和服務器之間的所有請求。您可以使用瀏覽器開發工具,但如果網站使用Flash,則這不一定準確。提琴手將攔截HTTP和HLS請求。

要查看所有請求數據,請使用Wireshark之​​類的工具。這將顯示通過電線發送的所有流量。缺點是解碼HTTPS很困難,所以你可能會錯過一些東西。 (幸運的是,大多數流媒體目前不使用HTTPS。)