2011-10-24 22 views
14

Buduję wideo dla mojej witryny za pomocą HTML5. Idealnie byłoby mieć tylko jeden cichy plik wideo i pięć różnych ścieżek audio w różnych językach, które synchronizują się z wideo.Wiele ścieżek audio dla wideo HTML5

Następnie powinienem mieć przycisk, który pozwala użytkownikom przełączać się między ścieżkami audio, nawet podczas odtwarzania wideo; i poprawiłaby się właściwa ścieżka dźwiękowa (bez wstrzymywania lub rozpoczynania wideo od początku lub czegoś podobnego, podobnie jak wybór ścieżki audio DVD).

Mogę to zrobić po prostu Flash, ale nie chcę. Musi być sposób na to zrobić w czystym HTML5 lub HTML5 + jQuery. Myślę, że zagrałbyś wszystkie pliki audio na poziomie 0 i tylko zwiększysz głośność aktywnego utworu ... ale nie wiem jak to zrobić, nie wspominając o tym, kiedy użytkownik zatrzymuje lub przewija wideo ...

Z góry dziękuję!

Odpowiedz

3

Jeśli chcesz, aby wszystkie pięć utworów zostało pobranych, dlaczego nie po prostu wstawiać je do wideo? Filmy nie są ograniczone do jednej ścieżki audio (nawet AVI może wykonywać wiele ścieżek dźwiękowych). Następnie należy przeprowadzić synchronizację. Wystarczy włączyć/wyłączyć ścieżki audio w razie potrzeby.

+1

W jaki sposób mogę kontrolować to za pomocą JavaScript? :) –

+2

@EmphramStavanger: http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#media-elements daje 'elementu audioTracks', a następnie można użyć' .enable() 'i' .disable() 'na każdej ścieżce. Nie testowałem tego sam. – derobert

+0

Awesome, sprawdzę to! –

8

Synchronizacja audio i wideo jest o wiele bardziej skomplikowana niż po prostu uruchomienie audio i wideo w tym samym czasie. Karty dźwiękowe będą odtwarzane z nieco inną szybkością. (Dla mnie jest to 44.1 kHz, może być 44.095 kHz dla ciebie.)

Często wideo jest zsynchronizowane ze strumieniem audio, ale odtwarzacz to obsługuje. Ładując wiele obiektów do odtwarzania, skutecznie wyciągasz je z synchronizacji.

Jedynym sposobem, w jaki to działa, jest znalezienie sposobu sterowania różnymi strumieniami audio z odtwarzacza wideo. Nie wiem, czy to możliwe.

Zamiast tego proponuję wielokrotne kodowanie wideo przy użyciu różnych strumieni. Możesz użyć FFMPEG do tego, a nawet zautomatyzować proces, w zależności od przepływu pracy. Przełączanie się między strumieniami staje się problemem, ale większość odtwarzaczy wideo jest wystarczająco odporna, aby odgadnąć przesunięcie bajtowe w pliku, gdy podana jest szybkość transmisji bitów.

Jeśli potrzebujesz tylko dwóch języków, możesz po prostu ustawić balans między lewym i prawym kanałem dźwięku stereo.

+0

Co jest tak trudne dla przeglądarek, aby strumieniować strumienie w locie w jednym przed odtwarzaniem, tak jak robi to ffmpeg? – themihai

+0

@themihai Kiedy masz plik wideo ze ścieżką wideo i wieloma ścieżkami audio, wszystkie są zsynchronizowane ze wspólnym punktem odniesienia. Kiedy wiele plików jest rozdzielonych, nie są. Nie możesz po prostu ustawić 8 obiektów dźwiękowych, powiedzieć im, aby grały, i oczekiwać, że będą odtwarzane jednocześnie, ponieważ wszystkie mają własne dekodowanie, buforowanie itp., a to zakłada, że ​​przeglądarka spróbuje nawet odtwarzać je wszystkie jednocześnie. W rzeczywistości wywołujesz grę, a przeglądarka wykonuje swoje zadanie, kiedy ma na to ochotę (w rozsądnym czasie, aby wydawać się natychmiastowa). – Brad

+0

@themihai Z FFmpeg, można wziąć wszystkich tych torów, mux je do tego samego pliku, i dać im to wspólny punkt odniesienia. Jako alternatywę, którą ktoś zaproponował tutaj, interfejs Web Audio API może być użyty do zaplanowania odtwarzania w dokładny sposób. Oznacza to, że cały dźwięk jest dekodowany najpierw do próbek PCM, które można następnie uruchomić w tym samym czasie. W tym momencie odniesienie do zegara jest urządzeniem wyjściowym. – Brad

3

Jest to możliwe dzięki Web Audio API.

Część mojego programu słucha zdarzeń elementów wideo i zatrzymuje lub ponownie uruchamia ścieżki audio utworzone za pomocą interfejsu API Web Audio To daje mi możliwość włączania i wyłączania dowolnych ścieżek w doskonałej synchronizacji.

Istnieje kilka wad.

W przeglądarce Internet Explorer nie ma interfejsu Web Audio API oprócz Edge.

Ta technika działa tylko z buforowanym dźwiękiem i to jest ograniczenie. Występują problemy z dużymi plikami: https://bugs.chromium.org/p/chromium/issues/detail?id=71704

+0

Still - dzięki za podpowiedź dla 'mediagroup'. Teraz ma nieco lepsze wsparcie niż w momencie pisania;) – SimonSimCity

+0

Cieszę się, że mogę pomóc. Również miło zobaczyć te specyfikacje są doprowadzone do życia :) – Nek

+0

Mediagroup została zaniechana/unshipped (przynajmniej chromem) – themihai