簡體   English   中英

如何使用html5音頻元素在Android上播放實時AAC流

[英]How to play live AAC stream on Android with html5 audio element

我試圖在頁面中嵌入html5音頻標簽,以允許播放來自Icecast服務器的實時AAC +流。

根據媒體格式開發人員指南 ,Android支持在MPEG-4容器內或ADTS中播放幾種AAC 樣式

我已經在MPEG-4容器中成功播放了AAC編碼的音頻文件,因此:

<audio controls="controls">
  <source src="http://www.example.com/audio/program1.mp4" type="audio/mp4"/>
</audio>

但是,我無法播放帶有音頻標簽的任何AAC實時流(據我了解,它是Icecast使用ADTS輸出的)。 我嘗試設置不同的類型(例如,播放器說可以“播放”的“音頻/ aac”)以及流URL的不同文件擴展名。 什么都沒有。 順便說一句,播放器將初始化為好像一切正​​常,然后在您按下播放按鈕時沒有任何反應(播放按鈕變為暫停圖標除外)。

我能夠播放實時AAC流的唯一方法是使用指向.sdp清單的URL,該清單包含指向該流的RTSP版本的鏈接。 然后,瀏覽器將流傳遞給本機音頻播放器或另一個音頻應用程序,該應用程序會在短暫的緩沖時間后播放該流。 這不是我們的選擇,因為我們想對流使用簡單的Icecast服務器。

是否沒有辦法通過HTTP在Android上播放實時AAC流? 似乎iOS支持它,但不支持Android。

由於缺乏相反的回答,我不得不得出一個結論,即原始問題的答案是:“不,不可能使用HTML5音頻標簽播放來自Icecast服務器的實時AAC +流”。

我正在發布答案,以分享我最終所做的事情。

我的初衷是簡單地使用MP3而不是AAC設置第二個Icecast流。 這將起作用,但是您必須願意接受Android音頻播放器在MP3流中引入的緩沖延遲。 不幸的是,Android以64 kbbs的速度使您等待40秒鍾以上才能開始播放MP3流。 不可否認,對於MP3而言,64 kpbs的質量不是很好,但是即使以128 kbps的速度進行緩沖,也要花費20秒以上的時間,足以使聽眾得出結論:流已關閉。 因此,MP3不是我們的選擇。

我最終的解決方案是要求CDN添加一個Wowza應用程序,該應用程序從AAC + Icecast流中提取並使用HLS對其進行多路復用。

現在,我的音頻標簽如下所示:

<audio controls="controls">
  <source src="http://www.example.com/wowza/stream.m3u8"/>
  <source src="http://www.example.com/audio/aac"/>
</audio>

請注意,我必須先列出HLS源,因為否則,Android設備實際上將選擇Icecast流並嘗試播放它,但它不能(您認為它會知道的足夠多)不這樣做。

因此,最終,Android確實會無延遲地播放實時AAC +流,只要它是通過HLS而不是直接從Icecast傳遞的即可。 我必須說,我對Android感到非常失望,因為它既不支持直接Icecast AAC +,又缺乏對實時MP3流的處理,特別是因為競賽(iOS)可以處理您扔給它的所有內容而不會眨眼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM