2010-09-22 14 views
18

Posiadam odtwarzacz wideo HTML5 z niestandardowym paskiem wyszukiwania, który działa doskonale na iPhonie (grając inline) i przeglądarce.Wyszukiwanie filmów w formacie HTML5 na iPadzie

Świetnie gra również na iPadzie, a pasek przewijania jest aktualizowany podczas odtwarzania filmu, ale z jakiegoś powodu nie mogę go wyszukać.

Wszystkie wartości są prawidłowe i próbuję ustawić:

myPlayer.currentTime = XX; 

Niestety, iPad odmawia ustawić atrybut .currentTime.

Z tego co mogę zbierają różnicę między przeglądarką i iPad jest w przeglądarce pojawia się:

myPlayer.networkState = 3 
myPlayer.readyState = 4 

na iPadzie uzyskać:

myPlayer.networkState = 2 
myPlayer.readyState = 3 

Jest to dokładnie ten sam kod, uruchamiający lokalny film MP4.

Każdy pomysł, dlaczego tak się dzieje?

Cheers, Andre

+0

Możesz wysłać kod, który ustawia aktualny czas. Mogę to zrobić bez większych trudności. –

+0

Tutaj: videoPlayerElement.currentTime = x * videoPlayerElement.duration/scrubberBg.width(); ... działa to w przeglądarce (kilka z nich) i na iPadzie, wartość śledzi ok, bu właściwość nie jest ustawiona. Używam 3.2 – Andre

+1

Zauważyłem, że ustawienie 'video.currentTime' na iOS wydaje się być bramkowane za działaniem użytkownika. Wydanie 'alert()' lub zdarzenie dotykowe przed ustawieniem 'currentTime' wydaje się zapewniać poprawną odpowiedź - oczywiście z wyjątkiem interakcji użytkownika, której wymaga. – eug

Odpowiedz

6

miałem wszelkiego rodzaju problemy z JavaScript do kontroli elementów audio i wiele frustracji z właściwością CurrentTime, wraz z ograniczeniami Apple na co stanowi inicjację bezpośredni obsługi zdarzeń.

Nie zdziwiłbym się, gdyby pojawił się jakiś dziwny błąd związany z odtwarzaniem wideo w języku JavaScript JavaScript & na iPadzie (lub "funkcji", która jest nieudokumentowana), co wymaga obejścia. Z mojego doświadczenia wynika, że ​​iPad ma wyjątkowy sposób robienia rzeczy niż to, co jest w oficjalnej dokumentacji.

Należy sprawdzić błąd , buforowane, możliwy do przeszukania i poszukuje właściwości elementu wideo. Patrząc na wartości readyState & networkState, iPad najwyraźniej uważa, że ​​wideo nie zostało całkowicie załadowane - co jest nieparzyste w przypadku zasobu lokalnego.

buforowane i możliwy do przeszukania powinna być równa przedziale czasowym całego filmu. poszukiwanie powinno być PRAWDĄ. To powinno przynajmniej dać ci trochę więcej informacji na temat problemu.

Czy testowałeś to z innymi filmami? To może być pewien problem z kodowaniem wideo, z którym iPad ma problem.

Poza tym - w poprzedniej wersji systemu operacyjnego iPad złamał się błąd, który uniemożliwił ustawienie właściwości currentTime. Czy korzystasz z najnowszej wersji systemu operacyjnego?

+0

Używam wersji 3.2 (ponieważ nie mogę go ograniczyć do najnowszej wersji) i próbowałem innego źródła wideo, z tym samym problemem:/ – Andre

0

Mam ten sam problem - tutaj są właściwości w moim przypadku:

UIWebView - iPad Simulator 
duration=4.861666679382324 
startTime=0 
currentTime=4.861666679382324 
buffered(1)=[0-0] 
seekable(0)= 
seeking=false 
error=null 
readystate=4 
networkstate=3 

Chrome: 
duration=4.9226298332214355 
startTime=0 
currentTime=4.9226298332214355 
buffered(1)=[0-4.9226298332214355] 
seekable(1)=[0-4.9226298332214355] 
seeking=false 
error=null 
readystate=4 
networkstate=1 

więc - nic nie jest uzyskiwanie buforowane i nic nie jest możliwy do przeszukania. Odtwarzam lokalny klip z katalogu zasobów pakietu iPad, za pośrednictwem interfejsu UIWebView.

W moim przypadku wszystko, co potrzebne jest, aby przywrócić górnej części filmu po każdej grze, i udało mi się to osiągnąć poprzez wezwanie do „load()”

5

Ten problem jest związany z wartością użyte w właściwości video.currentTime. W moim konkretnym przypadku naprawiłem problem, zawsze upewniając się, że używam liczb zmiennoprzecinkowych z 1 cyfrą dziesiętną podczas wyszukiwania.

Ustawianie video.currentTime do zera na iOS 3.2 rzeczywiście będzie dążyć wideo na początku, ale wartość ta nie będzie aktualizować potem - timeupdate zdarzenie jest nadal wysyłane normalnie, ale jeśli spróbujesz odczytać currentTime będzie zawsze zwraca tę samą wartość.

Aby rozpocząć poszukiwania do wykorzystania wideo 0.1 zamiast 0, aby dążyć do 12.2345 użytku 12.2.

PS: można użyć (+(12.2345).toFixed(1)) ograniczyć liczbę cyfr dziesiętnych 1.

+0

Mam ten sam problem i próbowałem zaokrąglić zgodnie z powyższym, ale to nie robi " Wydaje się, że działa na IOS 6.1. – mzedeler

1

odpowiedzią Kyle'a jest dobry. Dodam, nie można założyć, że atrybut seekable jest wypełniany po jakimś konkretnym zdarzeniu. Oznacza to, że nie można czekać na takie wydarzenia, jak loadedmetadata, canplay lub dowolne inne i zakładać, że w tym momencie można bezpiecznie ustawić currentTime.

Wygląda na to, że najbezpieczniejszym sposobem na sprawdzenie jest seekable po każdym zdarzeniu związanym z wideo, a jeśli obejmuje on czas, w którym chcesz szukać, ustaw currentTime w tym miejscu. Na iPadzie seekable może nie zostać wypełniony przed wydarzeniem canplaythrough, co jest dość późne.

Więcej informacji na ten temat można znaleźć pod numerem my blog post.

Powiązane problemy