Odtwarzanie wideo HTML5 na pełnym ekranie w przeglądarce internetowej Android

Szukałem już kilka dni, jak wyświetlić wideo HTML5 w trybie pełnoekranowym na Android WebView.

Udało mi się odtworzyć filmy HTML5 na moim widoku internetowym. Problemy pojawiają się podczas wyświetlania wideo w trybie pełnoekranowym.

Jak się zorientowałem, android ma dwa sposoby obsługi tagu <video>:

W wersjach dla Androida <= 2.3.3, uruchamiana jest metoda onShowCustomView, a ja mogę mieć instancję VideoView i ustawiać detektory, gdy wideo się kończy, ustawiać kontrolery itp. Tak dobrze.

Na ICS (i prawdopodobnie 3,0 i powyżej)wygląda na to, że <wideo> jest obsługiwane w inny sposób. Gdy odtwarzany jest film HTML5, onShowCustomView nie jest wywoływany w trybie normalnym - wygląda na to, że wewnątrz WebView działa wewnętrzna firma, która odtwarza wideo, a wszystkie elementy sterujące zdefiniowane w tagu <video> są wyświetlane - I nie ma do niego dostępu w żaden sposób. Właściwie, jeśli wideo jest odtwarzane w trybie normalnym, jest to OK, ponieważ kontrolki są i działają.

To doprowadziło mnie do wielkiego problemu: podczas wyświetlania wideo w trybie pełnoekranowym wywoływany jest onShowCustomView - ale w ICS parametr „view” nie jest instancją VideoView.

Udało mi się dowiedzieć, że instancja jest VideoSurfaceView, prywatną klasą wewnętrzną klasy HTML5VideoFullScreen. Jedynym sposobem uzyskania dostępu do tej klasy wewnętrznej jest refleksja.

Po spojrzeniu na GrepCode dla tej klasy dowiedziałem się, że w przeciwieństwie do VideoView, HTML5VideoFullScreen $ VideoSurfaceView nie przechowuje instancji MediaPlayer, której mogę słuchać z jej wydarzeń lub uzyskać dostęp do jej kontrolek. Jedyne, co mogę zrobić, to zabrać ten VideoSurfaceView w takim stanie, w jakim jest, i umieścić go w układzie pełnoekranowym bez kontrolowania go.

Konkluzja - Podczas wyświetlania wideo w trybie pełnoekranowym nie wiem, kiedy wideo się kończy, jego elementy sterujące nie są wyświetlane - jest to dość smutne. Nie mogę uruchomić spustu na pełnym ekranie.

Próbowałem kilku nieudanych obejść:

Refleksja: Próbowałem dotrzeć do instancji HTML5VideoFullScreen, która zawiera członka MediaPlayer, z wewnętrznej klasy VideoSurfaceView. Nie udało mi się go zdobyć, nie jestem pewien, czy jest to możliwe (ViewSurfaceView nie posiada instancji właściciela).

Zarejestruj się w przypadku zdarzeń wideo za pomocą Javascript (na przykład), i obsłuż to, czego potrzebuję z powrotem w JAVA poprzez JavascriptInterface: Odkryłem, że to rozwiązanie nie jest wiarygodne, ponieważ podczas tego napotkałam inny problem: tag <video> może być zagnieżdżony w Źródło iframe nie jest moje i nie mogę pobrać jego zawartości (getElementById lub getElementsByTagName [i] są puste) - co oznacza, że ​​nie mogę dotrzeć do elementu <video> wewnątrz ramki iframe.

Nadal szukam rozwiązania, bardzo niewiele napisano o tym problemie. Czy komuś udało się to rozwiązać? Pomoc będzie bardzo mile widziane!

VideoView klasa:Tutaj (ma MediaPlayer)

HTML5VideoFullScreen $ VideoSurfaceView klasa:Tutaj (nie ma MediaPlayera)

questionAnswers(7)

yourAnswerToTheQuestion