Я получаю сообщение об ошибке ..
Неперехваченное (в обещании) DOMException: play () не удалось, потому что пользователь сначала не взаимодействовал с документом.
..при попытке воспроизвести видео на рабочем столе с помощью Chrome версии 66.
Я нашел объявление, которое автоматически начало воспроизведение на веб-сайте, но с использованием следующего HTML:
<video
title="Advertisement"
webkit-playsinline="true"
playsinline="true"
style="background-color: rgb(0, 0, 0); position: absolute; width: 640px; height: 360px;"
src="http://ds.serving-sys.com/BurstingRes/Site-2500/Type-16/1ff26f6a-aa27-4b30-a264-df2173c79623.mp4"
autoplay=""></video>
Так обходя автовоспроизведение блокировщика Chrome V66 действительно так просто , как добавление webkit-playsinline="true"
, playsinline="true"
и autoplay=""
атрибутов к <video>
элементу? Есть ли у этого какие-то негативные последствия?
Ответы:
Чтобы автозапуск на элементах html 5 работал после обновления chrome 66, вам просто нужно добавить
muted
свойство к элементу видео.Итак, ваш текущий HTML-код видео
Просто нужно
muted="muted"
Я считаю, что обновление Chrome 66 пытается остановить вкладки, создающие случайный шум на вкладках пользователей. Вот почему свойство muted снова заставляет автовоспроизведение.
источник
mute
атрибута или настройкиvolume
атрибута не помогает.src
был недействителен. Я обновил фрагмент,src
поэтому видео воспроизводится автоматически.muted="true"
вместо этогоЛучшее решение, которое я обнаружил, - отключить видео
HTML
источник
chrome://settings/content/sound
источник
--autoplay-policy=no-user-gesture-required
- это программный способ достижения этого параметра.Отвечая на поставленный вопрос ...
Нет, недостаточно иметь эти атрибуты, чтобы иметь возможность автоматически воспроизводить мультимедиа со звуком, вам нужно зарегистрировать пользовательский жест в вашем документе.
Но это ограничение очень слабое: если вы получили этот пользовательский жест в родительском документе, и ваше видео было загружено из iframe, вы могли бы его воспроизвести ...
Возьмем, к примеру, эту скрипку , которая всего лишь
При первой загрузке, и если вы нигде не щелкнете, он не запустится, потому что у нас еще нет зарегистрированных событий.
Но как только вы нажмете кнопку «Выполнить» , родительский документ (jsfiddle.net) действительно получил пользовательский жест, и теперь видео воспроизводится, хотя технически оно загружено в другой документ.
Но следующий фрагмент кода , поскольку он требует, чтобы вы фактически нажали кнопку « Выполнить фрагмент кода», запустится автоматически.
Это означает, что ваше объявление, вероятно, могло быть воспроизведено, потому что вы указали жест пользователя на главной странице.
Теперь обратите внимание, что Safari и Mobile Chrome имеют более строгие правила, чем эти, и потребуют от вас фактически запустить хотя бы один раз
play()
метод программно для элемента<video>
или<audio>
из самого обработчика пользовательских событий.Показать фрагмент кода
А если вам не нужен звук, просто не прикрепляйте его к своему мультимедиа, видео только с видеодорожкой также может автоматически воспроизводиться, что снизит использование полосы пропускания вашим пользователем.
источник
Мне (в проекте Angular) помог этот код:
В HTML вы должны добавить
autoplay muted
В JS / TS
источник
@ViewChild()
вам нужно установить для параметра sttatic значение true:@ViewChild('videoPlayer', {static: true}) videoplayer: ElementRef;
video: HTMLVideoElement;
А затем:this.video = this.videoplayer.nativeElement;
@ngOnInit()
Попробуйте использовать прослушиватель событий mousemove
источник
Расширение элемента DOM, обработка ошибок и постепенная деградация
Ниже я использую функцию прототипа, чтобы обернуть встроенную функцию воспроизведения DOM, получить ее обещание и затем перейти к кнопке воспроизведения, если браузер выдает исключение. Это расширение устраняет недостаток браузера и позволяет подключать его к любой странице, если известно о целевом элементе (элементах).
источник
В моем случае мне пришлось это сделать
источник
Chrome требует взаимодействия с пользователем для автоматического воспроизведения или воспроизведения видео через js (video.play ()). Но взаимодействие может быть любым, в любой момент. Если вы просто нажмете на странице случайным образом, видео запустится автоматически. Я решил тогда, добавив кнопку (только в браузерах Chrome), которая говорит «включить автовоспроизведение видео». Кнопка ничего не делает, но простое нажатие на нее - необходимое взаимодействие с пользователем для любого дальнейшего видео.
источник
Я столкнулся с аналогичной ошибкой при попытке воспроизвести аудиофайл. Сначала он работал, затем он перестал работать, когда я начал использовать
markForCheck
метод ChangeDetector в той же функции для запуска повторного рендеринга при разрешении обещания (у меня была проблема с рендерингом представления).Когда я изменил
markForCheck
кdetectChanges
ней начал работать снова. Я действительно не могу объяснить, что произошло, я просто подумал, чтобы бросить это сюда, возможно, это кому-то поможет.источник
Вы должны были добавить
muted
атрибут внутриvideoElement
вашего кода, как и ожидалось. Посмотрите ниже ..Не забудьте добавить действительную ссылку на видео в качестве источника
источник
У меня возникли проблемы с воспроизведением на телефоне Android. После нескольких попыток я обнаружил, что когда включена экономия данных, автоматического воспроизведения нет:
Если включен режим экономии трафика, автовоспроизведение отсутствует. Если включен режим экономии трафика, автовоспроизведение отключено в настройках мультимедиа.
Источник
источник
Введите Chrome: // flags в адресной строке.
Поиск: Автозапуск
Установите для этого параметра « Жест пользователя не требуется ».
Перезапустите Chrome, и вам не придется менять код
источник