Ну, я уже несколько дней искал, как отображать видео HTML5 в полноэкранном режиме на веб-обозревателе Android.
Мне удалось воспроизвести видео в формате HTML5 на моем веб-просмотре. Проблемы возникают при отображении видео в полноэкранном режиме.
Как я понял, андроид имеет два способа обработки < видео > :
-
В версиях android = lt; = 2.3.3 запускается метод onShowCustomView, и у меня может быть экземпляр VideoView и установка слушателей при завершении видео, установка контроллеров и т.д. очень хорошо.
-
В ICS (и, вероятно, 3.0 и выше), он выглядит как < видео > обрабатывается по-разному. Когда воспроизводится видео HTML5, onShowCustomView не вызывается в обычном режиме - похоже, что внутри WebView, который воспроизводит видео, есть внутренний бизнес, и все элементы управления, определенные в <video> - я никак не могу получить к нему доступ. На самом деле, если видео воспроизводится в нормальном режиме, это нормально, потому что элементы управления есть и работают.
Это привело меня к большой проблеме: при отображении видео в полноэкранном режиме вызывается onShowCustomView, но в ICS параметр "view" не является экземпляром VideoView.
Мне удалось выяснить, что экземпляр принадлежит VideoSurfaceView, частному внутреннему классу класса HTML5VideoFullScreen. Единственный способ, которым мы можем получить доступ к этому внутреннему классу, - это отражение.
Посмотрев на GrepCode для этого класса, я узнал, что в отличие от VideoView, HTML5VideoFullScreen $VideoSurfaceView не содержит экземпляр MediaPlayer, который я могу прослушивать его события или получать доступ к его элементам управления. Единственное, что я могу сделать, это взять этот VideoSurfaceView так, как он есть, и поместить его в полноэкранный макет, не контролируя его.
Нижняя строка. Когда вы показываете видео в полноэкранном режиме, я не знаю, когда заканчивается видео, его элементы управления не отображаются - это довольно грустно. Я не могу получить триггер для закрытия полноэкранного режима.
Я пробовал несколько неудачных обходных решений:
-
Отражение: Я попытался добраться до экземпляра HTML5VideoFullScreen, который содержит член MediaPlayer, из внутреннего класса VideoSurfaceView. Мне не удалось это получить, я не уверен, что это возможно (ViewSurfaceView не имеет своего экземпляра владельца).
-
Зарегистрируйте видео события через Javascript (например, например), и обработайте то, что мне нужно, в JAVA через JavascriptInterface: я нашел, что это решение не является надежным, потому что при этом я столкнулся с другой проблемой: the <video> можно вставить в. Источник iframe не принадлежит мне, и я не могу получить его содержимое (getElementById или getElementsByTagName [i] являются нулями), что означает, что я не могу добраться до <video> внутри iframe.
Я все еще ищу решение, очень мало написано об этой проблеме. Кто-нибудь сумел это решить? Помощь будет очень признательна!
VideoView класс: Здесь (есть MediaPlayer)
HTML5VideoFullScreen $VideoSurfaceView класс: Здесь (не имеет MediaPlayer)