Можете ли вы автоматически воспроизводить HTML5-видео на iPad?

113

Атрибут <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+).

Показать ещё 3 комментария
Теги:
cocoa-touch

6 ответов

146
Лучший ответ

Обновление 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()">
  • 1
    Хммм 3 месяца создания онлайн будильника для iPhone Safari на ветер! Мы (sleep.fm) придумали способ держать телефон в активном состоянии, пока приложение открыто, но теперь с iOS 6.1 звук будильника не воспроизводится. В iOS 6.0 все работало нормально. Есть ли работа вокруг?
  • 1
    ой, подождите, мы снова запустили наш мобильный веб-будильник (sleep.fm) для iPhone Safari, так что есть обходные пути из-за отсутствия поддержки автозапуска html5.
Показать ещё 14 комментариев
16

Я хочу начать с того, что говорю, что понимаю, что этот вопрос старый и уже имеет принятый ответ; но, как неудачный интернет-пользователь, который использовал этот вопрос в качестве средства, чтобы закончить только, чтобы быть доказанным неправильно вскоре (но не раньше, чем я немного расстроил моего клиента), я хочу добавить свои мысли и предложения.

Хотя @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, прежде чем он будет полностью экранирован, поэтому вам понадобится механизм для изменения размера видео по щелчку перед воспроизведением, иначе вы получите аудио и видео.

  • 2
    Было бы лучше использовать $dummyVideo.get(0) вместо скобок, поэтому jQuery может изящно завершиться ошибкой, если ваш выбор пуст.
12

Просто установите

webView.mediaPlaybackRequiresUserAction = NO;

Автовоспроизведение работает для меня на iOS.

  • 27
    Это не работает для веб-сайта, это работает только для сайтов, где вы завернули их с помощью собственного приложения.
  • 2
    @izuriel Вы имеете в виду, что это не работает в браузере.
Показать ещё 5 комментариев
8

Как и в 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/

  • 4
    Атрибут autoplay работает только на ПК, а не на мобильном. Я пробовал много раз.
7

В этой ссылке Safari HTML5 вы можете прочитать

Чтобы предотвратить нежелательные загрузки через сотовые сети у пользователей расход, встроенные носители не могут воспроизводиться автоматически в Safari on iOS - пользователь всегда запускает воспроизведение. Контроллер автоматически поставляются на iPhone или iPod touch после воспроизведения в начале, но для iPad вы должны либо установить атрибут управления, либо предоставить контроллер с использованием JavaScript.

  • 36
    «кроме файлов GIF, которые могут иметь несколько МБ и использовать пропускную способность, даже не подозревая об этом»
  • 0
    @Simon_Weaver x12 раз для большей части времени, чтобы быть точным.
1

Сначала отключите видео, чтобы обеспечить автовоспроизведение в 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>
  • 1
    Вы уверены, что это работает? Не для меня
  • 0
    Можно ли сделать то же самое для фреймов Youtube?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню