2014-10-28 102 views
1

我有一個在服務器上運行的icecast安裝程序。將連接到它的客戶端是網頁中的標籤,可以通過HTML5或Flash。我目前使用audio.js來實現這一點(特別是閃回回退)。icecast audio.js無緩衝播放

問題是,音頻正在同時播放,但與圖像流分開播放。 (這是一個10幀/秒的jpeg流。)我需要音頻儘可能與圖像匹配。不幸的是,音頻有時會在開始播放之前延遲7秒。

一些信息:

  • 圖像流不能被延遲,以匹配音頻。音頻必須加速以匹配圖像。
  • icecast服務器配置將<burst-on-connect>設置爲0以最小化等待時間。
  • 通過VLC播放時基本上沒有滯後(可能幾百ms,這是可以接受的)。

換句話說,當查看圖像並通過vlc播放音頻時,所有內容都已充分對齊。不幸的是,使用VLC不是最終選擇。由於VLC沒有滯後,這告訴我,網絡瀏覽器(Chrome,Firefox,IE)在播放音頻之前緩衝音頻。

問題:如何防止網絡瀏覽器緩衝音頻?我希望它在有任何可用的情況下立即播放。我目前使用audio.js,但其他類似的技術是可以接受的。

其他信息:我已將audio.js設置爲自動播放並預加載=無。

感謝您的幫助!

回答

3

緩衝區是總是需要。網絡是分組交換。數據大塊,而不是連續。事實上,有許多的緩衝區:

  • 捕獲緩衝液(聲卡)
  • 編解碼器緩存(編解碼器在時間上採樣的一大塊工作)
  • 網絡緩衝服務器
  • 服務器側的緩衝液(典型地非常大,超過10秒)
  • 網絡緩衝區客戶
  • 客戶端緩衝液(一般爲2-3秒)
  • 客戶端的編解碼器緩衝器
  • 客戶端的音頻設備緩衝

每個緩衝區增加了延遲,因爲你已經注意到了。您真正控制的唯一緩衝區是服務器端緩衝區,該緩衝區由<burst-on-connect>設置配置。通過將此緩衝區的大小設置爲更大的大小,您可以非常快速地填充所有下游緩衝區,從而實現非常快速的播放開始。您已將其設置爲零,這意味着下游緩衝區只能填充與編碼器中的數據一樣快的速度。

客戶端,你完全不能控制緩衝,你也不應該。客戶可以自由選擇任何方式實施編解碼器。一些編解碼器可以立即開始流式傳輸,而其他編解碼器則不能。有些設備必須重新採樣音頻以適合播放內容,而其他設備則不需要。

它聽起來像你真正想要做的是同步視頻流和音頻流。爲此,您應該只是開始流式傳輸視頻流。視頻用於保持音頻和視頻同步。 Icecast甚至支持幾種格式的流式視頻。

+0

我們自己也得出了同樣的結論,目前正在研究基於ffmpeg的解決方案。感謝您的回答! – 2014-10-28 20:02:10