Атрибут <video>
tags autoplay="autoplay"
отлично работает в Safari.
При тестировании на iPad видео необходимо активировать вручную.
Я думал, что это проблема с загрузкой, поэтому я запустил цикл проверки состояния носителя:
videoPlay: function(){
var me = this;
console.log('STATE: ' + $("#periscopevideo").get(0).readyState);
if ($("#periscopevideo").get(0).readyState != 4){
setTimeout(function(){me.videoPlay();}, 300);
}
else {
$("#periscopevideo").get(0).play();
}
}
Состояние остается на 0
на iPad. На моем рабочем столе сафари он проходит через 0
, 1
и, наконец, 4
.
На iPad он достигает 4
, если я вручную коснусь стрелки "play".
Кроме того, вызывается $("#periscopevideo").get(0).play()
из щелчка через onClick
.
Существуют ли какие-либо ограничения Apple в отношении автовоспроизведения? (Кстати, я запускаю iOS 5+).
Обновление iOS 10
Запрет на автовоспроизведение снят с iOS 10 - но с некоторыми ограничениями (например, A можно автозапускать, если нет звуковой дорожки).
Чтобы просмотреть полный список этих ограничений, см. официальные документы: https://webkit.org/blog/6784/new-video-policies-for-ios/
iOS 9 и до
Как и в iOS 6.1, , невозможно автоматически воспроизводить видео на iPad.
Мое предположение о том, почему они отключили функцию автоматического воспроизведения?
Ну, как и многие владельцы устройств имеют ограничения на использование данных/пропускную способность на своих устройствах, я думаю, Apple считает, что сам пользователь должен решить, когда они начнут использовать пропускную способность.
После небольшого исследования я нашел следующий отрывок из документации Apple в отношении автоматического воспроизведения на устройствах iOS, чтобы подтвердить мое предположение:
"Apple приняла решение отключить автоматическое воспроизведение видео на устройствах iOS, через script и реализации атрибутов.
В Safari на iOS (для всех устройств, включая iPad), где пользователь может находиться в сотовой сети и заряжаться на единицу данных, предварительно загружать и автоматическое воспроизведение отключено. Данные не загружаются до тех пор, пока пользователь не инициирует его." - Документация по Apple.
Ниже приведено отдельное предупреждение на странице Safari HTML5 о том, почему встроенные медиа не могут воспроизводиться в Safari на iOS:
Предупреждение. Чтобы предотвратить нежелательные загрузки через сотовые сети в расходы пользователей, встроенные медиа не могут воспроизводиться автоматически в Safari на iOS - пользователь всегда запускает воспроизведение. Контроллер автоматически предоставляется на iPhone или iPod touch после воспроизведения в но для iPad вы должны либо установить атрибут управления, либо предоставить контроллер с использованием JavaScript.
То, что это означает (с точки зрения кода), заключается в том, что методы Javascript play()
и load()
неактивны, пока пользователь не начнет воспроизведение, если только метод play()
или load()
не вызван действием пользователя (например, щелчок мероприятие).
В принципе, пользовательская кнопка воспроизведения работает, но
событие onLoad="play()"
отсутствует.
Например, это сыграло бы фильм:
<input type="button" value="Play" onclick="document.myMovie.play()">
В то время как следующее следующее ничего не будет делать в iOS:
<body onload="document.myMovie.play()">
Я хочу начать с того, что говорю, что понимаю, что этот вопрос старый и уже имеет принятый ответ; но, как неудачный интернет-пользователь, который использовал этот вопрос в качестве средства, чтобы закончить только, чтобы быть доказанным неправильно вскоре (но не раньше, чем я немного расстроил моего клиента), я хочу добавить свои мысли и предложения.
Хотя @DSG и @Giona верны, и нет ничего плохого в их ответах, есть творческий механизм, который вы можете использовать, чтобы "обойти", так сказать, это ограничение. Это не говорит о том, что я потворствую обход этой функции, наоборот, но только некоторые механизмы, так что пользователь все еще "чувствует", как будто видео или аудиофайл "автоматически воспроизводится".
Быстрая работа - это скрыть видео-тег где-то на мобильной странице, так как я создал отзывчивый сайт, я делаю это только для небольших экранов. Тег видео (примеры HTML и jQuery):
HTML
<video id="dummyVideo" src="" preload="none" width="1" height="2"></video>
JQuery
var $dummyVideo = $("<video />", {
id: "dummyVideo",
src: "",
preload: "none",
width: "1",
height: "2"
});
С тем, что скрыто на странице, когда пользователь "нажимает", чтобы смотреть фильм (все равно взаимодействие с пользователем, нет возможности обойти это требование) вместо перехода на вторичную страницу просмотра, я загружаю скрытое видео. Это в основном работает, потому что тег мультимедиа на самом деле не используется, но вместо этого продвигается на экземпляр Quicktime, поэтому наличие видимого элемента видео совсем необязательно. В обработчике для "click" (или "коснуться" на мобильном устройстве).
$(".movie-container").on("click", function() {
var url = $(this).data("stream-url");
$dummyVideo.attr("src", url);
$dummyVideo.get(0).load(); // required if src changed after page load
$dummyVideo.get(0).play();
});
И альт. Что касается UX, пользователь нажимает на видео для воспроизведения, а Quicktime открывает видео, которое они выбрали. Это остается в пределах ограничения, что видео можно воспроизводить только через действие пользователя, поэтому я не заставляю данные никому, кто не решает посмотреть видео с этой услугой. Я обнаружил это, пытаясь понять, как именно Youtube снял это со своим мобильным телефоном, что по существу является действительно хорошим дизайном страницы Javascript и причудливым элементом, скрывающимся, как в случае с тегом видео.
tl; dr Вот несколько "обходной путь", чтобы попытаться создать функцию "autoplay" UX на устройствах iOS, не выходя за пределы ограничений Apple, и все еще решают, хотят ли они смотреть видео (или звук, наиболее похожий на, хотя я и не тестировал), не имея одного загруженного без их разрешения.
Кроме того, для человека, который прокомментировал это из sleep.fm, это, к сожалению, не было бы решением ваших проблем, которое воспроизводится на основе времени.
Я надеюсь, что кто-то найдет эту информацию полезной, она спасла бы мне неделю плохой доставки новостей клиенту, который был непреклонен, что у них есть эта функция, и я был рад найти способ доставить его в конце.
ИЗМЕНИТЬ
Дальнейшее обнаружение указывает, что описанное выше решение относится только к устройствам iPhone/iPod. IPad воспроизводит видео в Safari, прежде чем он будет полностью экранирован, поэтому вам понадобится механизм для изменения размера видео по щелчку перед воспроизведением, иначе вы получите аудио и видео.
$dummyVideo.get(0)
вместо скобок, поэтому jQuery может изящно завершиться ошибкой, если ваш выбор пуст.
Просто установите
webView.mediaPlaybackRequiresUserAction = NO;
Автовоспроизведение работает для меня на iOS.
Как и в iOS 10, видео теперь может автовоспроизведение, но только они либо отключены, либо не имеют звуковой дорожки. Ура!
Короче:
<video autoplay>
теперь будут соблюдать атрибут autoplay, для
элементы, которые удовлетворяют следующим условиям:
<video>
элементам будет разрешено автовоспроизведение без жестов пользователя, если исходный носитель не содержит звуковых дорожек.
Элементы <video muted>
также будут разрешены для автовоспроизведения без жестов пользователя.<video>
получает звуковую дорожку или отключается без жестов пользователя, воспроизведение приостанавливается.
Элементы <video autoplay>
начнут воспроизводиться только тогда, когда они видны на экране, например, когда они прокручиваются в окне просмотра, сделаны
видимый через CSS, и вставленный в DOM.
Элементы <video autoplay>
будут приостановлены, если они станут невидимыми, например, прокручиваясь из области просмотра.Подробнее здесь: https://webkit.org/blog/6784/new-video-policies-for-ios/
В этой ссылке Safari HTML5 вы можете прочитать
Чтобы предотвратить нежелательные загрузки через сотовые сети у пользователей расход, встроенные носители не могут воспроизводиться автоматически в Safari on iOS - пользователь всегда запускает воспроизведение. Контроллер автоматически поставляются на iPhone или iPod touch после воспроизведения в начале, но для iPad вы должны либо установить атрибут управления, либо предоставить контроллер с использованием JavaScript.
Сначала отключите видео, чтобы обеспечить автовоспроизведение в ios, затем включите его, если хотите.
<video autoplay loop muted playsinline>
<source src="video.mp4?123" type="video/mp4">
</video>
<script type="text/javascript">
$(function () {
if (!navigator.userAgent.match(/(iPod|iPhone|iPad)/)) {
$("video").prop('muted', false);
}
});
</script>