2011-10-24 59 views
14

我正在用HTML5爲我的網站製作視頻。理想情況下,我只有一個靜音視頻文件,以及與視頻同步的五種不同語言的不同語言音軌。HTML5視頻的多個音軌

然後,我會有一個按鈕,允許用戶在音軌之間切換,即使視頻正在播放;並且正確的音頻軌道將會復活(沒有視頻暫停或重新開始或任何其他事情;就像DVD音軌選擇一樣)。

我可以在Flash中簡單地做到這一點,但我不想。必須有一種方法可以在純HTML5或HTML5 + jQuery中執行此操作。我想你會播放0音量的所有音頻文件,並且只會增加活動音軌的音量......但我不知道如何做到這一點,更不用說在用戶暫停或倒帶時處理它了視頻...

在此先感謝!

回答

3

如果您願意讓所有五個曲目下載,爲什麼不將它們複合到視頻中?視頻不限於單個音軌(甚至AVI可以做多個音軌)。然後,應該爲您處理同步。您只需根據需要啓用/禁用音軌。

+1

然後,我將如何去控制JavaScript? :) –

+2

@EmphramStavanger:http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#media-elements給出一個'audioTracks'元素,然後你可以使用'.enable ()'和'.disable()'。自己沒有測試過。 – derobert

+0

太棒了,我會檢查一下! –

8

音頻和視頻之間的同步比簡單地同時啓動音頻和視頻要複雜得多。聲卡的播放速度略有不同。 (對我來說什麼是44.1 kHz,實際上可能是44.095 kHz。)

通常,視頻是與音頻流同步的,但播放器是處理這個問題的。通過加載多個對象進行播放,可以有效地將它們拉出同步。

這是工作的唯一方法是如果你能找到一種方法來控制來自視頻播放器的不同音頻流。我不知道這是否可能。

相反,我建議你用不同的流多次編碼視頻。您可以使用FFMPEG進行此操作,甚至可以根據您的工作流程自動執行此過程。在流之間切換成爲一個問題,但大多數視頻播放器足夠強大,可以在給定比特率的情況下猜測文件中的字節偏移量。

如果您只需要兩種語言,只需調整左右立體聲音頻通道之間的平衡即可。

+0

什麼是很難瀏覽器在一個單一的動態多路複用流之前播放它就像ffmpeg呢? – themihai

+0

@themihai當你有一個帶有視頻軌道和多個音頻軌道的視頻文件時,它們都被同步到一個公共參考點。當你有多個文件全部分開時,它們不是。你不能只排列8個音頻對象,告訴他們播放,並期望他們同時播放,因爲他們都有自己的解碼,緩衝等。,假設瀏覽器甚至會嘗試同時播放它們。在現實中,你稱之爲遊戲,而瀏覽器在感覺時會做它的事情(在合理的時間內看起來很快)。 – Brad

+0

@themihai通過FFmpeg,你可以將所有這些軌跡,複合到同一個文件,並給他們共同的參考點。作爲此處提出的替代方案,Web Audio API可用於以精確採樣的方式安排播放。也就是說,所有的音頻首先被解碼爲PCM採樣,然後可以同時開始。此時,時鐘參考是輸出設備。 – Brad

3

它適用於Web Audio API。

我的程序的一部分偵聽視頻元素事件,並停止或重新啓動使用Web音頻API創建的音軌。這使我能夠打開和關閉完美同步的任何曲目。

有一些缺點。

除Edge外,Internet Explore中沒有Web Audio API支持。

該技術只適用於緩衝音頻,這是限制。大文件存在一些問題:https://bugs.chromium.org/p/chromium/issues/detail?id=71704

+0

仍然 - 感謝提供'mediagroup'的提示。它現在有比你寫作時更好的支持;) – SimonSimCity

+0

我很高興能有任何幫助。也很高興看到這些規格被帶入生活:) – Nek

+0

mediagroup已被棄用/ unshipped(至少通過鉻) – themihai