Автовідтворення відео HTML5 на iPhone


89

У мене якась дивна проблема. Я намагаюся створити веб-сайт із зацикленим фоновим відео. Код виглядає так:

<video src="video/bg.mp4" style="z-index: -1;object-fit: cover;" poster="video/bg.jpg" autobuffer autoplay loop muted></video>

Це чудово працює в більшості браузерів (IE бореться з цим об’єктом, але я не проти), але на iPhone відео не буде автоматично відтворюватися, а на iPad - так. Я вже читав Нову політику для iOS, і думаю, що відповідаю вимогам (інакше iPad не буде автоматично відтворюватися). Я провів кілька інших тестів:

  • Видалення накладених div-файлів це не виправить
  • Видалення z-index не виправить
  • Wi-Fi або стільниковий не має значення
  • Розмір відеофайлу теж не має значення

Я роблю це неправильно, або iPhone просто не відтворює відео автоматично і завжди вимагає взаємодії? Я піклуюся лише про iOS 10, я знаю, що вимоги до iOS 9 були різними


Ви можете знайти тут якусь допомогу: stackoverflow.com/questions/41360490/ ... Особисто я ще не отримав жодного відео для автоматичного відтворення на iphone, навіть після дотримання всіх цих порад та політики щодо яблук.
— Позначте

На це мені зайняли години. Щоб спробувати заощадити години всіх інших, я підсумував свої висновки у блозі. Сподіваюся, це допоможе. medium.com/@BoltAssaults/…
— BoltCoder

Відповіді:


217

Чи playsinlineдопомагає атрибут?

Ось що я маю:

<video autoplay loop muted playsinline class="video-background ">
  <source src="videos/intro-video3.mp4" type="video/mp4">
</video>

Коментар дивіться playsinlineтут: https://webkit.org/blog/6784/new-video-policies-for-ios/


1
Алілуя! Дякую за це, спробував близько десятка інших рішень безрезультатно.
— tolmark

23
playsinlineпрацював для мене спільно, mutedмаючи на увазі химерність режиму низького енергоспоживання на iPhone
— Кен

1
Це відповідь.
— JCraine

1
playsinlineВрятував день !!!! Спасибі людино. До речі, нові політики браузера вимагають, що якщо ви хочете автоматично запустити відео, запустіть його приглушеним, інакше ви не зможете цього зробити. +1 до @ken Приклад для chrome: [ developers.google.com/web/updates/2017/09/…
— Нуно Прата,

19
Якщо ви використовуєте React, зауважте , що атрибут playsinlineповинен бути записаний в верблюжого: playsInline. Інакше це не спрацює.
— Квентін Д

62

iOs 10+ дозволяють автоматично відтворювати відео вбудовано. але ви повинні вимкнути "Режим низького енергоспоживання" на вашому iPhone.


2
чудова порада, але у мене є питання щодо цього, яке я подав: stackoverflow.com/questions/50400902/…
— Матьє,

7
Я витратив останню годину, намагаючись зрозуміти, чому моє відео не відтворюється автоматично. Дякую за це!
— lior

2
Дякую за це!
— Микита Рогатнєв

4
Варто зазначити, що ми не можемо керувати пристроєм користувача та перемиканням режиму низького енергоспоживання. Єдине, що ми можемо зробити, це запропонувати користувачеві "Вимкнути режим низького енергоспоживання", щоб отримати кращий досвід
— Мухаммад Усама

1
Це теж сталося зі мною і зводило мене з розуму, поки я не знайшов твій пост. Я вже розглядав специфікації Safari 11 та 11.1, якщо вони, можливо, повністю відключили автовідтворення, але це був лише режим низької потужності ... життя розробників може бути важкою. :-)
— haeki

7

Ось маленький хак, щоб подолати всі труднощі, які ви маєте для автоматичного відтворення відео на веб-сайті:

  1. Перевірте, чи відтворюється відео.
  2. Увімкніть відтворення відео на такій події, як клацання або дотик.

Примітка. Деякі браузери не дозволяють відео відтворюватися автоматично, якщо користувач не взаємодіє з пристроєм.

Отже, сценарії для перевірки відтворення відео:

Object.defineProperty(HTMLMediaElement.prototype, 'playing', {
get: function () {
    return !!(this.currentTime > 0 && !this.paused && !this.ended && this.readyState > 2);
}});

А потім ви можете просто відтворити відео, приєднавши до тіла слухачі подій:

$('body').on('click touchstart', function () {
        const videoElement = document.getElementById('home_video');
        if (videoElement.playing) {
            // video is already playing so do nothing
        }
        else {
            // video is not playing
            // so play video now
            videoElement.play();
        }
});

Примітка: autoplayатрибут є дуже простим, який потрібно додати до відео тегу, крім цих сценаріїв.

Ви можете побачити робочий приклад з кодом тут за цим посиланням:

Як автоматично відтворювати відео, коли пристрій перебуває в режимі низького енергоспоживання / режимі економії даних / проблема браузера сафарі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.