我正在使用音頻元素從icecast服務器流式傳輸ogg源。音頻元素是否提取冰冷的元數據,並有通過JavaScript訪問它的方法嗎?是否可以從HTML5音頻元素獲取Icecast元數據?
基本上,我想顯示一個正在播放的電臺的「正在播放」信息。我有什麼選擇?
謝謝!
我正在使用音頻元素從icecast服務器流式傳輸ogg源。音頻元素是否提取冰冷的元數據,並有通過JavaScript訪問它的方法嗎?是否可以從HTML5音頻元素獲取Icecast元數據?
基本上,我想顯示一個正在播放的電臺的「正在播放」信息。我有什麼選擇?
謝謝!
不,您的HTML5元素只知道流數據,甚至沒有提取適當的元數據請求。
查看這些信息:
現在,這也不是不可能通過任何手段。你只需要做到服務器端。 (特別看第二個鏈接。)
我還應該指出,在一個成熟的SHOUTcast服務器上(沒有使用Icecast進行測試,但它的值得一試)生成「7.html」,其中包含數據監聽器,最大監聽器,峯值監聽器,立體聲/單聲道,比特率和當前曲目名稱的數量作爲逗號分隔值。就像這樣:
2,1,33,625,2,128,J Mascis - Not Enough
如果你可以獲取http://yourstreamingserver:port/7.html
,那麼你可以很容易得到這個數據。
如果是Ogg容器流(所以Vorbis和Opus),至少Firefox支持對元數據的JavaScript訪問。這是目前唯一的「特定於供應商的」JavaScript API:audio.mozGetMetadata();
另一方面,如果您使用Icecast 2.4.1,則可以通過JSON API獨立訪問元數據。缺乏其他評論中指出的同步適用。雖然通常「足夠接近」。
問題是實時顯示歌曲名稱與音頻流同步,這是不可能從shoutcast服務器讀取(7.html),實時只能讀取嵌入音頻流中的元信息。我會很高興閱讀javascript/html5的元數據 – 2013-07-20 20:14:27
@JoseNobile,不幸的是,你沒有選擇......至少在兼容性方面沒有。您可以使用其中一種瀏覽器實現的編解碼器,並將一些標頭插入到您的流中以支持CORS,然後處理純JS編解碼器的開銷。對大多數人來說這是不可行的。另外請記住,由於SHOUTcast風格元數據的性質,它無論如何都不完全同步。你也可以通過長輪詢AJAX(如Socket.IO)做一些服務器端的事情。 – Brad 2013-07-20 21:14:20
使用AJAX獲取流是不可能的,由於協議,域和端口的限制。 Shoutcast服務器無法將自定義標題添加爲Access-Control-Allow-Origin:*(使用CORS) 我向Google Chrome論壇http://productforums.google.com/forum/#發送了功能請求!類話題/鉻/給-功能反饋和建議/窗/ AJQl3pwgriI – 2013-07-29 00:36:28