无法在 Android Web 视图中查看视频
Posted
技术标签:
【中文标题】无法在 Android Web 视图中查看视频【英文标题】:Not able to view video in Android Web View 【发布时间】:2014-11-24 01:08:34 【问题描述】:我的网页嵌入了使用 html5 视频标签的视频文件。
我有一个嵌入式 Web 服务器 (NanoHTTPD) 正在运行,它从文件系统为我的文件提供服务。 一切正常,但当我点击播放 HTML5 视频时。 它给出了以下错误并且视频没有播放
09-29 20:38:36.620: D/HTML5VideoInline(11532): HTML5VideoInline created
09-29 20:38:36.625: V/MediaPlayer(11532): setVideoSurfaceTexture
09-29 20:38:36.625: V/MediaPlayer-JNI(11532): reset
09-29 20:38:36.625: V/MediaPlayer(11532): reset
09-29 20:38:36.625: I/MediaPlayer(11532): path is null
09-29 20:38:36.640: D/MediaPlayer(11532): setDataSource IOException happend :
09-29 20:38:36.640: D/MediaPlayer(11532): java.io.FileNotFoundException: No content provider: http://10.207.114.115:8765/SLC/Book3_html/Book3/book/BO/demo.mp4
09-29 20:38:36.640: D/MediaPlayer(11532): at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:713)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:617)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:954)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.webkit.HTML5VideoView.prepareDataCommon(HTML5VideoView.java:326)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.webkit.HTML5VideoView.prepareDataAndDisplayMode(HTML5VideoView.java:363)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.webkit.HTML5VideoInline.prepareDataAndDisplayMode(HTML5VideoInline.java:72)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.webkit.HTML5VideoViewProxy$VideoPlayer.play(HTML5VideoViewProxy.java:289)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.webkit.HTML5VideoViewProxy.handleMessage(HTML5VideoViewProxy.java:465)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.os.Handler.dispatchMessage(Handler.java:99)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.os.Looper.loop(Looper.java:137)
09-29 20:38:36.640: D/MediaPlayer(11532): at android.app.ActivityThread.main(ActivityThread.java:5306)
09-29 20:38:36.640: D/MediaPlayer(11532): at java.lang.reflect.Method.invokeNative(Native Method)
09-29 20:38:36.640: D/MediaPlayer(11532): at java.lang.reflect.Method.invoke(Method.java:511)
09-29 20:38:36.640: D/MediaPlayer(11532): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
09-29 20:38:36.640: D/MediaPlayer(11532): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
09-29 20:38:36.640: D/MediaPlayer(11532): at dalvik.system.NativeStart.main(Native Method)
09-29 20:38:36.640: D/MediaPlayer(11532): Couldn't open file on client side, trying server side
媒体播放器转到内容解析器,该解析器尝试仅加载内容方案的文件。我的 uri 是 http 方案。
我的网页视图很简单。
WebSettings webViewSettings = webView.getSettings();
webViewSettings.setjavascriptEnabled(true);
//webViewSettings.setJavaScriptCanOpenWindowsAutomatically(false);
//webViewSettings.setSupportMultipleWindows(true);
webViewSettings.setPluginState(PluginState.ON);
//webViewSettings.setMediaPlaybackRequiresUserGesture(false);
webViewSettings.setAllowFileAccess(true);
webView.setSoundEffectsEnabled(true);
//webViewSettings.setSupportZoom(true);
//WebView.setWebContentsDebuggingEnabled(true);
webView.setWebViewClient(new CustomWebViewClient());
webView.setWebChromeClient(mWebChromeClient);
干杯, 索拉夫
【问题讨论】:
***.com/a/16179544/6490462 【参考方案1】:您需要使用 loadDataWithBaseURL。
看到这个: https://***.com/a/24592012/850347
不要这样做:
mContentWebView.loadDataWithBaseURL(null, webViewContentString,
"text/html", "UTF-8", null);
改为:
//veryVeryVery important for playing the videos!
mContentWebView.loadDataWithBaseURL(theBaseUrl, webViewConentString,
"text/html", "UTF-8", null);
【讨论】:
【参考方案2】:您似乎在设置 setDataSource() 时遇到了问题,请确保您正在调用
setDataSource(字符串路径)
【讨论】:
以上是关于无法在 Android Web 视图中查看视频的主要内容,如果未能解决你的问题,请参考以下文章
尽管以纵向视图录制,但使用 mediaRecorder 和表面视图录制的 Android 视频无法在横向视图中播放
由于“跨源请求”,YouTube 在 web 视图中播放失败
Android webview 无法渲染通过 iframe 嵌入的 youtube 视频