簡體   English   中英

以最小的延遲從 Icecast 解碼 HTTP 音頻流

[英]Decoding HTTP Audio Stream from Icecast with minimal latency

我正在使用 Icecast 從內部麥克風流式傳輸實時音頻,並希望聽眾的延遲盡可能小。

一個簡單的解決方案是簡單地訪問http://myhostname:8000/my_mountpoint來獲取流,但<audio>標簽在播放之前會進行內部緩沖並導致相當高的延遲。

當前解決方案:我使用ReadableStreams API進行解碼(使用 Web Audio API 的decodeAudioData )並通過將解碼數據路由到音頻上下文目標(內部揚聲器)來播放數據塊。 這有效並顯着降低了延遲。

問題:這個流 API 雖然是實驗性的,但技術上應該適用於最新的 Chrome、Safari、Opera、FF(在設置特定標志之后)。 但是,我在除 Chrome 和 Opera 之外的所有其他瀏覽器中都遇到了decodeAudioData問題。 我認為 FF 和 Safari 無法解碼部分 MP3 數據,因為當我開始流式傳輸時,我通常會聽到揚聲器的短暫激活。 在 Safari 上,從未調用成功的decodeAudioData回調,FF 只是說EncodingError: The given encoding is not supported.

如果我想讓它至少在 Safari 和 FF 上工作,是否有任何解決方法? Chrome 和 Safari 上的decodeAudioData實現實際上是否不同,以至於一個適用於部分 MP3 而另一個則不適用?

如果您需要亞秒級延遲,請不要使用 Icecast!

如果您需要低於 10 秒的延遲並且不能完全控制整個軟件和網絡鏈,請不要使用 Icecast!

是的,這是一個答案,而不是評論。 Icecast 並非為此類用例而設計。 它旨在以非同步方式通過 HTTP 進行 1 對 n 批量數據廣播。

您所解釋的內容聽起來您確實應該考慮設計為低延遲的東西,例如 web-RTC。

如果您認為您確實應該使用 Icecast,請解釋原因。 因為你的問題不一樣。 我完全贊成更多的 Icecast 使用,畢竟我是它的維護者,但它的應用應該是有意義的。

我正在使用 Icecast 從內部麥克風流式傳輸實時音頻,並希望聽眾的延遲盡可能小。

您的設置存在一些問題會阻止盡可能低的延遲:

  • HTTP Progressive(Icecast 等使用的流媒體類型)在 TCP 上運行,這是一種可靠的傳輸方式。 如果數據包丟失,則在將數據傳送到瀏覽器之前,將其重新傳輸到客戶端時會存在一些延遲時間。 這可確保按順序聽到每一位音頻,但可能會導致延遲。 對於低延遲,通常使用 UDP 數據包,以便可以跳過任何丟失的數據包而不是等待,從而導致故障,但客戶端保持低延遲。

  • MP3 不是一個很好的低延遲編解碼器。 有更好的編解碼器,例如 Opus,它們效率更高,可以生成更小的片段。

  • 如您所見,當通過 HTTP 流式傳輸時,客戶端默認會緩沖更多。

但是,在理想條件下,我使用自定義服務器在 Chrome 中以小於 250 毫秒的延遲通過 HTTP Progressive 進行流式傳輸。 我敢打賭,如果您關閉服務器端緩沖並使用不同的編解碼器,您可以從 Icecast 中獲得類似的性能。

但是,我在除 Chrome 和 Opera 之外的所有其他瀏覽器中都遇到了 decodeAudioData 問題。 我的信念是 FF 和 Safari 無法解碼部分 MP3 數據

是的, decodeAudioData()用於解碼整個文件。 您將很難以樣本准確的方式解碼任意分段的塊。

幸運的是,有一種方法可以做您想做的事... MediaSource 擴展。

https://developer.mozilla.org/en-US/docs/Web/API/Media_Source_Extensions_API

基本上,您可以使用完全相同的 ReadableStream 接口並將數據推送到 SourceBuffer 以最終播放正常的<audio>標簽。 確實適用於來自 Icecast 和類似服務器的普通 MP3 音頻,前提是您已經解決了任何跨域問題。

正如@Brad 提到的,Opus 非常適合低延遲。 我編寫了一個可以與 Streams 一起使用的低延遲 WASM Opus 解碼器,並且我開始了另一個演示,演示如何使用decodeAudioData()播放部分文件:

暫無
暫無

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

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