Mam jakiś dziwny problem. Próbuję stworzyć witrynę internetową z zapętlonym wideo w tle. Kod wygląda następująco:
<video src="video/bg.mp4" style="z-index: -1;object-fit: cover;" poster="video/bg.jpg" autobuffer autoplay loop muted></video>
Działa to doskonale w większości przeglądarek (IE boryka się z tym dopasowaniem do obiektu, ale nie mam nic przeciwko), ale na iPhonie wideo nie odtwarza się automatycznie, ale na iPadzie tak. Przeczytałem już Nowe zasady dla iOS i myślę, że spełniam wymagania (w przeciwnym razie iPad nie będzie automatycznie odtwarzał). Zrobiłem kilka innych testów:
- Usunięcie nakładających się elementów div tego nie naprawi
- Usunięcie indeksu z nie naprawi tego
- Wifi czy komórkowe nie mają znaczenia
- Rozmiar plików wideo też nie ma znaczenia
Czy robię to źle, czy też iPhone po prostu nie odtwarza automatycznie filmów i zawsze wymaga interakcji? Zależy mi tylko na iOS 10, wiem, że wymagania były inne na iOS 9
Odpowiedzi:
Czy
playsinline
atrybut pomaga?Oto co mam:
<video autoplay loop muted playsinline class="video-background "> <source src="videos/intro-video3.mp4" type="video/mp4"> </video>
Zobacz komentarz
playsinline
tutaj: https://webkit.org/blog/6784/new-video-policies-for-ios/źródło
playsinline
zadziałało dla mnie w połączeniu zmuted
pamiętaniem o dziwactwie trybu niskiego zużycia energii na iPhonieplaysinline
Uratowany dzień !!!! Dzięki stary. Przy okazji, nowe zasady dotyczące przeglądarek wymagają, aby jeśli chcesz automatycznie uruchomić wideo, uruchom je wyciszone lub nie będziesz w stanie tego zrobić. +1 do @ken Przykład dla chrome: [ developers.google.com/web/updates/2017/09/…playsinline
musi być napisana w CamelCase:playsInline
. W przeciwnym razie to nie zadziała.iOS 10+ pozwala na automatyczne odtwarzanie wideo w tekście. ale musisz wyłączyć „Tryb niskiego zużycia energii” na swoim iPhonie.
źródło
Oto mały hack, który pozwala przezwyciężyć wszystkie problemy związane z autoodtwarzaniem wideo w witrynie:
Uwaga: niektóre przeglądarki nie zezwalają na automatyczne odtwarzanie filmów, chyba że użytkownik wejdzie w interakcję z urządzeniem.
Tak więc skrypty sprawdzające, czy wideo jest odtwarzane, to:
Object.defineProperty(HTMLMediaElement.prototype, 'playing', { get: function () { return !!(this.currentTime > 0 && !this.paused && !this.ended && this.readyState > 2); }});
Następnie możesz po prostu automatycznie odtworzyć wideo, dołączając słuchaczy wydarzeń do treści:
$('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(); } });
Uwaga:
autoplay
atrybut jest bardzo podstawowy, który należy dodać do tagu wideo już innego niż te skrypty.Możesz zobaczyć działający przykład z kodem tutaj pod tym linkiem:
Jak automatycznie odtwarzać wideo, gdy urządzenie jest w trybie niskiego zużycia energii / trybie oszczędzania danych / problem z przeglądarką Safari
źródło