Eri*_*ika 6 video android webview android-webview html5-video
我有一个应用程序,它在WebView中显示带有视频元素的HTML5页面.我花了一段时间才弄清楚如何让视频正常工作,但最后我成功地在三星Galaxy Tab(Android 3.1)上播放嵌入在WebView中的视频.我使用以下代码作为视频标记:
<video controls poster="img/poster.jpg" height="240" width="360">
<source src="video/BigBuck.m4v">
<source src="video/BigBuck.theora.ogv" type="video/ogg">
<source src="video/BigBuck.webm" type="video/webm">
HTML5 video not supported.
</video>
Run Code Online (Sandbox Code Playgroud)
视频元素有多个源,现在我试图在视频开始播放之前捕获所选的视频源(和格式).当我单击播放按钮时,我看到视频文件的HTTP请求到达存储视频文件的Web服务器,但我没有成功拦截应用程序端的此请求.
我查看了几种方法来查看视频文件的请求是否通过了,但我没有看到它通过其中任何一个.
shouldOverrideUrlLoading(WebView view, String url)我的WebViewClient唯一初始HTML5页面请求通过.shouldInterceptRequest (WebView view, String url)我看来,WebViewClient我只看到传递初始HTML5页面请求和视频海报图像的请求,但不是视频文件.onShowCustomView(View view, CustomViewCallback callback)在我WebChromeClient当我点击全屏控制按钮的HTML5网页视频时,已在播放,但不是当我点击播放按钮时才会调用.(这个方法的目的是什么?)有没有人建议我可以捕获视频文件的请求的另一种方法,或者任何人都可以解释当我点击视频元素上的播放按钮时实际发生了什么?
我使用 javascript 方法解决了这个问题。加载 HTML 页面时,loadedmetadata会在加载视频元数据时触发一个事件。从那时起,您可以从currentSrc视频元素的属性中获取选定的视频源,并通过JavascriptInterface给 Android 本机代码。
以下是 HTML5 视频元素的代码。“Android”是JavascriptInterface “Android”是可以在 javascript 中访问的
<video poster="image/poster.jpg" height="240" width="360" onloadedmetadata="Android.interceptPlay(this.currentSrc);">\n <source src="video/BigBuck.m4v">\n <source src="video/BigBuck.webm" type="video/webm">\n <source src="video/BigBuck.theora.ogv" type="video/ogg">\n HTML5 video not supported.\n</video>\nRun Code Online (Sandbox Code Playgroud)\n\nJavascriptInterface的代码
\n\nprivate class JavaScriptInterface {\n Context mContext;\n\n /* Instantiate the interface and set the context */\n JavaScriptInterface(Context c) {\n mContext = c;\n }\n\n public void interceptPlay(String source) {\n // do something\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n最后在 Activity 创建时将 JavascriptInterface 添加到 WebView
\n\nmWebView.addJavascriptInterface(new JavaScriptInterface(this), "Android");\nRun Code Online (Sandbox Code Playgroud)\n\nloadedmetadata通过将onloadedmetadata属性添加到 HTML5 视频元素而不是通过在页面加载时注册事件侦听器来捕获事件很重要,addEventListener("loadedmetadata",...)因为在快速网络上,事件loadedmetadata可能会在注册侦听器之前被触发(请参阅http ://dev.opera.com/articles/view/consistency-event-firing-with-html5-video)
| 归档时间: |
|
| 查看次数: |
5264 次 |
| 最近记录: |