<video>
Tagów autoplay="autoplay"
atrybut działa prawidłowo w Safari.
Podczas testowania na iPadzie wideo należy aktywować ręcznie.
Myślałem, że to problem z ładowaniem, więc uruchomiłem pętlę sprawdzającą stan nośnika:
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();
}
}
Stan pozostaje 0
na iPadzie. Na moim pulpicie safari, to przechodzi 0
, 1
a na końcu 4
. Na iPadzie osiąga tylko 4
wtedy, gdy ręcznie kliknę strzałkę „odtwórz”.
Co więcej, dzwonienie $("#periscopevideo").get(0).play()
za pomocą kliknięcia przez onClick
również działa.
Czy Apple ma jakieś ograniczenia dotyczące autoodtwarzania? (Nawiasem mówiąc, używam iOS 5+).
Odpowiedzi:
Aktualizacja iOS 10
Zakaz autoodtwarzania został zniesiony od iOS 10 - ale z pewnymi ograniczeniami (np. A może być odtwarzane automatycznie, jeśli nie ma ścieżki dźwiękowej).
Aby zobaczyć pełną listę tych ograniczeń, zobacz oficjalne dokumenty: https://webkit.org/blog/6784/new-video-policies-for-ios/
iOS 9 i starsze
Od wersji iOS 6.1 nie można już automatycznie odtwarzać filmów na iPadzie.
Moje przypuszczenie, dlaczego wyłączyli funkcję automatycznego odtwarzania?
Cóż, ponieważ wielu właścicieli urządzeń ma ograniczenia wykorzystania danych / przepustowości na swoich urządzeniach, myślę, że Apple uważał, że użytkownik powinien sam decydować, kiedy inicjuje użycie przepustowości.
Po krótkich poszukiwaniach znalazłem następujący fragment w dokumentacji Apple dotyczący automatycznego odtwarzania na urządzeniach z systemem iOS, aby potwierdzić moje przypuszczenia:
Oto osobne ostrzeżenie zamieszczone na stronie odniesienia Safari HTML5 o tym, dlaczego osadzonych multimediów nie można odtwarzać w Safari na iOS:
Oznacza to (w odniesieniu do kodu), że JavaScript
play()
iload()
metody są nieaktywne do momentu zainicjowania przez użytkownika odtwarzania, chyba że metodaplay()
lubload()
zostanie wywołana przez działanie użytkownika (np. Zdarzenie kliknięcia).Zasadniczo przycisk odtwarzania inicjowany przez użytkownika działa, ale
onLoad="play()"
zdarzenie nie.Na przykład odtworzyłoby to film:
Podczas gdy poniższe nic nie zrobią na iOS:
źródło
Chcę zacząć od stwierdzenia, że zdaję sobie sprawę, że to pytanie jest stare i ma już zaakceptowaną odpowiedź; ale jako nieszczęsny internauta, który użył tego pytania jako środka do zakończenia tylko po to, aby wkrótce potem udowodnić, że się mylę (ale nie zanim trochę zdenerwuję mojego klienta), chcę dodać moje przemyślenia i sugestie.
Chociaż @DSG i @Giona mają rację i nie ma nic złego w ich odpowiedziach, istnieje kreatywny mechanizm, który możesz wykorzystać, aby „ominąć”, że tak powiem, to ograniczenie. Nie oznacza to, że akceptuję obejście tej funkcji, wręcz przeciwnie, ale tylko niektóre mechanizmy, dzięki którym użytkownik nadal „czuje się” tak, jakby plik wideo lub audio „odtwarzał się automatycznie”.
Szybkim obejściem jest ukrycie tagu wideo gdzieś na stronie mobilnej, ponieważ zbudowałem responsywną witrynę, robię to tylko dla mniejszych ekranów. Tag wideo (przykłady HTML i jQuery):
HTML
jQuery
Mając to ukryte na stronie, gdy użytkownik „klika”, aby obejrzeć film (nadal interakcja użytkownika, nie ma sposobu, aby obejść to wymaganie) zamiast przejść do drugiej strony odtwarzania, wczytuję ukryty film. Działa to głównie dlatego, że tag media nie jest tak naprawdę używany, ale zamiast tego jest promowany do instancji Quicktime, więc posiadanie widocznego elementu wideo nie jest wcale konieczne. W programie obsługi dla „kliknięcia” (lub „dotknięcia” na telefonie komórkowym).
I altówkę. Jeśli chodzi o UX, użytkownik klika wideo, aby odtworzyć, a Quicktime otwiera, odtwarzając wybrany przez siebie film. Pozostaje to w ramach ograniczenia, że filmy można odtwarzać tylko w wyniku działania użytkownika, więc nie narzucam danych nikomu, kto nie decyduje się na oglądanie wideo za pomocą tej usługi. Odkryłem to, próbując dowiedzieć się, jak dokładnie YouTube wyciągnął to z ich telefonu komórkowego, który jest w zasadzie naprawdę ładnym budowaniem strony JavaScript i fantazyjnym elementem ukrywającym się, jak w przypadku tagu wideo.
tl; dr Oto swego rodzaju „obejście” polegające na próbie utworzenia funkcji „autoodtwarzania” UX na urządzeniach z systemem iOS bez przekraczania ograniczeń Apple i pozostawiania użytkownikom decyzji, czy chcą oglądać wideo (lub dźwięk najbardziej lubi, chociaż ja nie zostały przetestowane) bez załadowania jednego bez ich zgody.
Również dla osoby, która skomentowała, że pochodzi z sleep.fm, niestety nie byłoby to rozwiązaniem problemów, które polegają na odtwarzaniu dźwięku w oparciu o czas.
Mam nadzieję, że ktoś uzna te informacje za przydatne, zaoszczędziłoby mi to tydzień dostarczania złych wiadomości do klienta, który był nieugięty, że ma tę funkcję i byłem zadowolony, że w końcu znalazłem sposób na jej dostarczenie.
EDYTOWAĆ
Dalsze ustalenia wskazują, że powyższe obejście dotyczy tylko urządzeń iPhone / iPod. IPad odtwarza wideo w Safari, zanim zostanie wyświetlony w trybie pełnego ekranu, więc będziesz potrzebować mechanizmu zmiany rozmiaru wideo po kliknięciu przed odtworzeniem, w przeciwnym razie skończysz z dźwiękiem i bez wideo.
źródło
$dummyVideo.get(0)
zamiast nawiasów, więc jQuery może z wdziękiem zawieść, jeśli twój wybór jest pusty.Po prostu ustaw
webView.mediaPlaybackRequiresUserAction = NO;
Autoodtwarzanie działa dla mnie na iOS.
źródło
Od wersji iOS 10 filmy mogą teraz odtwarzać się automatycznie, ale tylko z nich są wyciszone lub nie mają ścieżki dźwiękowej. Yay!
W skrócie:
<video autoplay>
elementy będą teraz honorować atrybut autoodtwarzania w przypadku elementów, które spełniają następujące warunki:<video>
elementy będą mogły odtwarzać się automatycznie bez gestu użytkownika, jeśli ich nośnik źródłowy nie zawiera ścieżek dźwiękowych.<video muted>
elementy będą również mogły odtwarzać się automatycznie bez gestu użytkownika.<video>
element uzyska ścieżkę dźwiękową lub zostanie wyciszony bez gestu użytkownika, odtwarzanie zostanie wstrzymane.<video autoplay>
elementy zaczną się odtwarzać tylko wtedy, gdy są widoczne na ekranie, na przykład gdy są przewijane do widoku, widoczne przez CSS i wstawiane do DOM.<video autoplay>
elementy zostaną zatrzymane, jeśli staną się niewidoczne, na przykład podczas przewijania z rzutni.Więcej informacji tutaj: https://webkit.org/blog/6784/new-video-policies-for-ios/
źródło
W tym odnośniku HTML5 do Safari możesz przeczytać
źródło
Pozwól najpierw wyciszyć wideo, aby zapewnić automatyczne odtwarzanie w iOS, a następnie wyłącz wyciszenie, jeśli chcesz.
źródło