Воспроизведение видео HTML5 на весь экран в Android WebView

Ну, я уже несколько дней искал, как отобразить HTML5-видео в полноэкранном режиме на Android WebView.

Мне удалось воспроизвести видео HTML5 на моем веб-сайте. Проблемы возникают при отображении видео в полноэкранном режиме.

Как я понял, у android есть два способа обработки тега <video>:

На версиях для Android <= 2.3.3, метод onShowCustomView запущен, и я могу получить экземпляр VideoView и установить слушателей, когда видео завершится, установить контроллеры и т. д. Пока все хорошо.

На ICS (и, вероятно, 3.0 и выше)Похоже, что <video> обрабатывается по-другому. Когда воспроизводится видео HTML5, onShowCustomView не вызывается в обычном режиме - похоже, что внутри WebView есть бизнес, который воспроизводит видео, и отображаются все элементы управления, определенные в теге <video> - I не может получить к нему доступ в любом случае. На самом деле, если видео воспроизводится в обычном режиме, это нормально, потому что элементы управления есть и работают.

Это привело меня к большой проблеме: при отображении видео в полноэкранном режиме вызывается onShowCustomView, но в ICS параметр «view» не является экземпляром VideoView.

Мне удалось выяснить, что это экземпляр VideoSurfaceView, частного внутреннего класса класса HTML5VideoFullScreen. Единственный способ получить доступ к этому внутреннему классу - через отражение.

Посмотрев на GrepCode для этого класса, я узнал, что в отличие от VideoView, HTML5VideoFullScreen $ VideoSurfaceView не содержит экземпляр MediaPlayer, который я могу прослушивать его события или получать доступ к его элементам управления. Единственное, что я могу сделать, это взять VideoSurfaceView как есть и поместить его в полноэкранный макет, не управляя им.

Итог - при отображении видео в полноэкранном режиме я не знаю, когда видео заканчивается, его элементы управления не отображаются - это довольно печально. Я не могу получить триггер для закрытия полноэкранного режима.

Я попытался несколько неудачных обходных путей:

Отражение: я попытался связаться с экземпляром HTML5VideoFullScreen, который содержит член MediaPlayer, из внутреннего класса VideoSurfaceView. Мне не удалось получить его, я не уверен, что это возможно (ViewSurfaceView не содержит экземпляр своего владельца).

Зарегистрируйтесь для видео-событий с помощью Javascript (например, onended) и обработайте то, что мне нужно, обратно в JAVA через JavascriptInterface: я обнаружил, что это решение ненадежно, потому что при этом я столкнулся с другой проблемой: тег <video> может быть вложенным в. Источник iframe не мой, и я не могу получить его содержимое (getElementById или getElementsByTagName [i] имеют значение null) - это означает, что я не могу добраться до элемента <video> внутри iframe.

Я все еще ищу решение, очень мало написано об этой проблеме. Кому-нибудь удалось это решить? Помощь будет высоко ценится!

VideoView класс:Вот (имеет MediaPlayer)

HTML5VideoFullScreen $ VideoSurfaceView класс:Вот (не имеет MediaPlayer)

Ответы на вопрос(7)

Ваш ответ на вопрос