Загрузка видео без звука с отдельным звуком в тег видео HTML5

Мне нужно загрузить видео с отключенным звуком и аудиофайл в один и тот же тег видео html5. Я пытался найти это, но нашел только тексты об аудиотеге, а это не то, что я ищу.

Мне нужно что-то вроде этого:

<video controls="controls" poster="poster.jpg" width="640" height="360">
  <source src="08_gestao_documental_autoridades_brasileiras_SEM_AUDIO.mp4" type="video/mp4">
  <source src="autoridades_brasileiras.mp3" type="audio/mp3">
 </video>

person Webill    schedule 31.08.2015    source источник


Ответы (1)


source работает не так. Элементы source на самом деле являются альтернативой: если браузер не поддерживает один, он перейдет к следующему, пока не достигнет поддерживаемого и воспроизводимого, тогда будет воспроизводиться только этот (а остальные будут игнорироваться< /эм>).

У вас не может быть двух источников (видео и аудио), воспроизводимых одновременно под одним и тем же тегом video/audio. Как вы нашли в Интернете, если вы хотите иметь два элемента мультимедиа (приглушенное видео и звук), вам понадобятся два тега мультимедиа.

Затем, по крайней мере теоретически (и если я правильно понял), вы можете использовать mediagroup для управления и синхронизации элементов audio и video, чтобы они передавались вместе; но mediagroup плохо поддерживается... или, по крайней мере, я не смог заставить его работать, но вы можете изучить его, потому что, как я уже сказал, я мог неправильно понять, как это работает :-S


Одним из альтернативных решений было бы поместить audio внутри video (в качестве резервного кода), а затем синхронизировать их с помощью JavaScript. Что-то вроде этого:

<video id="myvideo" controls muted>
    <source src="path/to/video.mp4" type="video/mp4" />
    <audio id="myaudio" controls>
        <source src="path/to/audio.mp3" type="audio/mpeg"/>
    </audio>
</video>

<script>
var myvideo = document.getElementById("myvideo");
var myaudio = document.getElementById("myaudio");
myvideo.onplay  = function() { myaudio.play();  }
myvideo.onpause = function() { myaudio.pause(); }
</script>

Вы можете посмотреть пример на этом JSFiddle.

person Alvaro Montoro    schedule 01.09.2015
comment
Отличный подход, но нужно немного подправить. Если на видеодорожке нет звука, элементы управления звуком будут недоступны в пользовательском интерфейсе и, следовательно, пользователь не сможет ими управлять. Мой подход заключался в том, чтобы отключить элементы управления видео и поместить звук чуть ниже него, а также контролировать ход воспроизведения видео с помощью элементов управления звуком. все работает нормально, за исключением того, что полноэкранный значок недоступен ... спасибо за публикацию этого, поскольку я боролся с несколькими источниками под тегом видео в течение 2 дней, не зная, что они обрабатываются по одному в качестве резерва ... - person Moonwalker; 27.02.2016
comment
Есть ли недостатки в использовании этого метода для синхронизации аудио и видео? Я искал способ сделать это, и ваш ответ - благословение. - person vbNewbie; 22.02.2018
comment
Я думаю, что тег «аудио» не обязательно должен быть внутри тега «видео». Помещение одного внутрь другого не обязательно приводит к их синхронизации. На практике, если состояние сети неудовлетворительное или файлы слишком большие, нет гарантии, что они будут синхронизированы. Даже полсекунды асинхронности будут весьма заметны. Чтобы избежать этой ситуации, вам придется написать больше javascript, чтобы постоянно проверять ход двух элементов и настраивать время их воспроизведения, чтобы принудительно синхронизировать. - person danioyuan; 28.07.2018
comment
Вышеупомянутый подход хорошо работает в Chrome, но не в Safari (на компьютере и на мобильном устройстве). Я обнаружил, что Apple весьма ограничивает одновременное воспроизведение нескольких медиафайлов. Единственный способ, которым я смог добиться этого в Safari, — это видео без звуковой дорожки и с установленным на нем флагом отключения звука. - person Mikel; 12.04.2020
comment
@Eschaton Приведенный выше код отлично работает для меня в Safari на рабочем столе (12.1.1), но, как вы упомянули, в нем есть видео с отключенным флагом. Сообщите мне, какую версию Safari вы используете, чтобы я мог провести тесты. - person Alvaro Montoro; 12.04.2020
comment
Видео YouTube 1080p отделено от их аудио, интересно, как они обслуживают их оба одновременно. - person Anthony; 22.08.2020
comment
@AlvaroMontoro, рассмотрите возможность добавления простого метода поиска в код примера myvideo.onseeking = function() { myaudio.currentTime = myvideo.currentTime; } - person Siva Manasan; 20.12.2020