Я собираю дешевое приложение, которое, помимо прочего, "обрамляет" некоторые из наших веб-сайтов ... Довольно просто с WebViewClient
. пока не попал в видео.
Видео выполнено в виде HTML5
элементов, и они отлично работают в Chrome и iPhone, и теперь, когда мы исправили проблемы с кодированием, оно отлично работает Android
в собственном браузере.
Теперь загвоздка: WebView
не нравится. Вообще. Я могу щелкнуть изображение плаката, и ничего не происходит.
Погуглить, я нашел это что близко, но , кажется, на основе «линии» (как в HREF ...) вместо видеоэлемент. (onDownloadListener, похоже, не вызывается для видеоэлементов ...)
Я также вижу ссылки на переопределение onShowCustomView, но, похоже, это не вызывается для видеоэлементов ... и не должноOverrideUrlLoading ..
Я бы предпочел не вдаваться в «вытаскивать xml с сервера, переформатировать его в приложении» ... сохраняя макет истории на сервере, я могу немного лучше контролировать контент, не заставляя людей продолжать обновлять приложение. Так что, если я смогу убедить WebView обрабатывать теги, как собственный браузер, это будет лучше всего.
Я явно упускаю что-то очевидное ... но понятия не имею, что именно.
VideoEnabledWebView
сюда stackoverflow.com/questions/15768837/…Ответы:
Отвечаю в этой теме на случай, если кто-то прочитает и заинтересуется результатом. В WebView можно просмотреть элемент видео (тег video html5), но я должен сказать, что мне пришлось иметь дело с этим в течение нескольких дней. Вот шаги, которые я должен был выполнить до сих пор:
-Найти правильно закодированное видео
-При инициализации WebView установите JavaScript, плагины WebViewClient и WebChromeClient.
-Обработка onShowCustomView в объекте WebChromeClient.
-Обработать события onCompletion и onError для видео, чтобы вернуться в веб-просмотр.
Но теперь я должен сказать, что есть еще один важный вопрос. Я могу сыграть в нее только один раз. Второй раз нажимаю на диспетчер видео (либо плакат, либо какую-то кнопку воспроизведения), он ничего не делает.
Я также хотел бы, чтобы видео воспроизводилось внутри кадра WebView, а не открывало окно Media Player, но для меня это второстепенная проблема.
Я надеюсь, что это кому-то поможет, и я также буду благодарен за любой комментарий или предложение.
Салудос, терриколас.
источник
WebChromeClient
и переопределить соответствующие методы, которые вам нужны. Если вы настаиваете, я могу загрузить остальную часть класса позже, когда вернусь домой.После долгих исследований эта штука заработала. См. Следующий код:
Test.java
HTML% VIDEO.java
custom_screen.xml
video_loading_progress.xml
colors.xml
manifest.xml
Ожидая того, что вы понимаете.
источник
Ответ mdelolmo был невероятно полезным, но, как он сказал, видео воспроизводится только один раз, а затем вы не можете открыть его снова.
Я немного изучил это, и вот что я нашел на тот случай, если какие-либо усталые путешественники WebView, такие как я, наткнутся на этот пост в будущем.
Во-первых, я просмотрел документацию VideoView и MediaPlayer и лучше понял, как они работают. Я настоятельно рекомендую их.
Затем я просмотрел исходный код, чтобы узнать, как это делает браузер Android . Сделайте поиск страницы и посмотрите, как они справляются
onShowCustomView()
. Они хранят ссылкуCustomViewCallback
на пользовательский вид и на него.С учетом всего этого и с учетом ответа mdelolmo, когда вы закончите с видео, все, что вам нужно сделать, это две вещи. Во-первых, на том, на
VideoView
что вы сохранили ссылку, вызовитеstopPlayback()
, который освободитMediaPlayer
для использования позже в другом месте. Вы можете увидеть это в исходном коде VideoView . Во-вторых,CustomViewCallback
вы сохранили ссылку на звонокCustomViewCallback.onCustomViewHidden()
.После выполнения этих двух действий вы можете щелкнуть то же видео или любое другое видео, и оно откроется, как и раньше. Нет необходимости перезапускать весь WebView.
Надеюсь, это поможет.
источник
На самом деле, кажется достаточно просто прикрепить стандартный WebChromeClient к клиентскому представлению, ala
и вам нужно включить аппаратное ускорение!
По крайней мере, если вам не нужно воспроизводить полноэкранное видео, нет необходимости извлекать VideoView из WebView и вставлять его в представление Activity. Он будет воспроизводиться в выделенном прямоугольнике видеоэлемента.
Есть идеи, как перехватить кнопку расширения видео?
источник
Я знаю, что этому потоку несколько месяцев, но я нашел решение для воспроизведения видео внутри WebView, не выполняя его в полноэкранном режиме (но все еще в медиаплеере ...). Пока я не нашел намеков на это в Интернете, так что, возможно, это также интересно для других. Я все еще борюсь с некоторыми проблемами (например, размещаю медиаплеер в правой части экрана, не знаю, почему я делаю это неправильно, но это относительно небольшая проблема, я думаю ...).
В Custom ChromeClient укажите LayoutParams:
Мой метод onShowCustomView выглядит так:
Итак, я надеюсь, что смогу помочь ... Мне тоже пришлось поиграть с кодированием видео, и я видел разные виды использования WebView с видео html5 - в конце концов мой рабочий код был дикой смесью разных частей кода, которые я нашел в Интернет и некоторые вещи, которые мне пришлось разобраться самостоятельно. Это действительно было головной болью.
источник
Этот подход хорошо работает до 2.3. И добавив hardwareaccelerated = true, он работает даже с 3.0 до ICS. Одна проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что при втором запуске приложения медиаплеера происходит сбой, потому что я не остановил воспроизведение и не выпустил медиаплеер. Поскольку объект VideoSurfaceView, который мы получаем в функции onShowCustomView из ОС 3.0, относится к браузеру, а не к объекту VideoView, как в ОС до версии 2.3, как я могу получить к нему доступ, остановить воспроизведение и освободить ресурсы?
источник
AM похож на то, что делает BrowerActivity . для FrameLayout.LayoutParams LayoutParameters = new FrameLayout.LayoutParams (768, 512);
Я думаю мы можем использовать
вместо.
Еще одна проблема, с которой я столкнулся, заключается в том, что если видео воспроизводится, и пользователь нажимает кнопку «Назад», в следующий раз вы переходите к этому действию (singleTop) и не можете воспроизвести видео. чтобы исправить это, я позвонил
в методе onBackPressed действия.
источник
Я знаю, что это очень старый вопрос, но пробовали ли вы использовать
hardwareAccelerated="true"
флаг манифеста для своего приложения или действия?С этим набором, похоже, он работает без какой-либо модификации WebChromeClient (чего я ожидал от DOM-Element).
источник
hardwareAccelerated
запускается с Android 3.0Я использовал html5webview для решения этой проблемы. Загрузите и вставьте его в свой проект, тогда вы можете кодировать точно так же.
Чтобы сделать видео вращаемым, поместите код android: configChanges = "Ориентация" в свою активность, например (Androidmanifest.xml).
и переопределить метод onConfigurationChanged.
источник
Этому вопросу много лет, но, возможно, мой ответ поможет таким людям, как я, которые должны поддерживать старую версию Android. Я пробовал много разных подходов, которые работали на некоторых версиях Android, но не на всех. Лучшее решение, которое я нашел, - использовать Crosswalk Webview, который оптимизирован для поддержки функций HTML5 и работает на Android 4.1 и выше. Его так же просто использовать, как и Android WebView по умолчанию. Вам просто нужно включить библиотеку. Здесь вы можете найти простое руководство по его использованию: https://diego.org/2015/01/07/embedding-crosswalk-in-android-studio/
источник
Что ж, по-видимому, это невозможно без использования JNI для регистрации плагина для получения видео-события. (Лично я избегаю JNI, потому что я действительно не хочу иметь дело с беспорядком, когда в ближайшие несколько месяцев выйдут планшеты Android на базе Atom, потерявшие переносимость Java.)
Единственной реальной альтернативой, по-видимому, является создание новой веб-страницы только для WebView и видео по старинке со ссылкой A HREF, как указано в URL-адресе Codelark выше.
Icky.
источник
На сотовом использовании
hardwareaccelerated=true
иpluginstate.on_demand
вроде работаетисточник
У меня была похожая проблема. В папке с ресурсами моего приложения были файлы HTML и видео.
Таким образом, видео были размещены внутри APK. Поскольку APK на самом деле является ZIP-файлом, WebView не мог читать видеофайлы.
У меня сработало копирование всех HTML- и видео-файлов на SD-карту.
источник