2012-03-26 24 views
6

Mam wideo HTML5, które próbuję skonfigurować wywołania zwrotne w określonych odstępach czasu podczas odtwarzania. Wideo rozpoczyna odtwarzanie od javascript z video.play(). W tej chwili mój kod nasłuchuje zdarzenia 'loadedmetadata', a następnie analizuje czas trwania i ustawia te wywołania zwrotne. Działa dobrze na mobilnym safari, ale nie na Androida (2.3.4 i 2.3.7).Wideo wideo na Androidzie nie ładuje się, dopóki wideo.play()

Na Androidzie, 'loadedmetadata' wydaje się być emitowany, zanim czas faktycznie jest dostępny. Aby to przetestować, logowałem czas trwania na każdym etapie procesu ładowania w moim kodzie, aby zobaczyć, gdzie faktycznie można go odczytać. Do video.play() i po jednym zdarzeniu 'timeupdate' właściwość video.duration ma wartość 6000, niezależnie od używanego wideo. Testowałem to z plikiem mp4 i plikiem 3gp. Po spełnieniu tych warunków dostępny jest faktyczny czas trwania.

Znalazłem ten inny post z podobnymi problemami [1]. Najwyżej głosowaną odpowiedzią, która nie została zaakceptowana, jest sposób, w jaki ją początkowo skonfigurowałem i działa ona dobrze w systemie iOS. Przyjęta odpowiedź również nie działa i sugeruje, że jest to problem związany z webkitem. Loguję właściwość video.readyState i widzę, że jest to '4' przed rozpoczęciem odtwarzania wideo, ale czas trwania jest nadal niedostępny, dopóki nie rozpocznie się odtwarzanie, oraz pierwsze zdarzenie 'timeupdate'.

Nasze obecne obejście polega na sprawdzaniu wartości video.duration i ustawianiu wywołań zwrotnych zdarzeń po video.duration !== 6000. To jest dość brzydkie i chciałbym dojść do sedna, żeby ten hack nie powrócił do gryzienia. Dyskusja tutaj [2] wydawała się sugerować, że problem może dotyczyć kodowania. Oznacza to, że nie jest poprawnie zakodowany, Android nie odczytuje poprawnie metadanych, dopóki plik nie zostanie załadowany, lub może w ogóle i oblicza czas trwania w inny sposób.

Czy jest coś, co mogę zrobić, aby uczynić to czystszym, czy na razie utknąłem z hackerem?

[1] Problem retrieving HTML5 video duration

[2] http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/

+2

Użyłem 'v.addEventListener ('durationchange', repos, false);' listener do śledzenia zmiany, ale tak ... wygląda na to, że jest to problem z WebView/Video na wielu wersjach Androida – Offbeatmammal

+1

Urządzenie mobilne ma swoje własne ograniczenia, więc nie ładuje wszystkiego, co robi przeglądarka na komputerze, w przeglądarce Android, wideo nie jest wywoływane, dopóki nie zagrasz, ponieważ to pozwoli zaoszczędzić przepustowość i zmniejszyć zużycie pamięci/bufora. Myślę, że możesz zrobić domyślnie gra, a następnie używa skryptu, który zatrzyma wideo po 1-2 sekundach ... które powinny służyć twojemu celowi. – MarmiK

Odpowiedz

0

Id użyć setTimeout który wywołuje funkcję, by sprawdzić, czy czas jest dostępny rekurencyjnie.

W ten sposób funkcja może natychmiast uzyskać dostęp do informacji, wyświetlić itp. Czas trwania.

Powiązane problemy