Android(安卓)WebView Video播放.mp4视频失败 其他端正常---视频编码问题
Android通过WebView加载网页,网页中有Video标签去播放视频,代码不复杂,设置webview的一些属性之后loadUrl即可。
但是,昨天,我的WebView失效了,网页中的Video标签播放不出来了。
但是iOS和微信端是正常的,一下子血液上涌,我按照正常的逻辑想,一定是我WebView的设置哪里少了。
国内外网站,从百度一下到微软必应到google到stackoverflow走了一大圈,webview设置变成下面这样了:
getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); bindingView.wvHealthGut.getSettings().setJavaScriptEnabled(true); bindingView.wvHealthGut.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); bindingView.wvHealthGut.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); bindingView.wvHealthGut.getSettings().setDomStorageEnabled(true); bindingView.wvHealthGut.resumeTimers(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { bindingView.wvHealthGut.getSettings().setMediaPlaybackRequiresUserGesture(true); } bindingView.wvHealthGut.getSettings().setPluginState(WebSettings.PluginState.ON); bindingView.wvHealthGut.getSettings().setSupportZoom(true); bindingView.wvHealthGut.getSettings().setBuiltInZoomControls(true); bindingView.wvHealthGut.getSettings().setUseWideViewPort(true); // 应用可以有缓存 bindingView.wvHealthGut.getSettings().setAppCacheEnabled(true); bindingView.wvHealthGut.requestFocus(); // 加载进度监听 bindingView.wvHealthGut.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { showContentView(); } super.onProgressChanged(view, newProgress); } @Override public boolean onConsoleMessage(ConsoleMessage consoleMessage) { CookieManager cookieManager = CookieManager.getInstance(); String cookies = cookieManager.getCookie(""); return super.onConsoleMessage(consoleMessage); } @Override public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { AlertDialog.Builder b2 = new AlertDialog.Builder(getActivity()) .setTitle("提示").setMessage(message) .setPositiveButton("ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(); } }); b2.setCancelable(false); b2.create(); b2.show(); return true; } @Override public void onShowCustomView(View view, CustomViewCallback callback) { super.onShowCustomView(view, callback); } @Override public void onHideCustomView() { super.onHideCustomView(); } }); setCookies(); bindingView.wvHealthGut.loadUrl(thisTitle);
设置一大堆,然并卵,而且看这个设置代码头都大。
不过对webview的这一对属性倒是加深了不少印象。
再从Application、activity、到view的硬件加速全部打开
(不要跟老夫讲什么性能,根本不考虑,先调好再说。抄起键盘就是一把梭。梭哈梭哈)
。。。。还是加载失败。
突然我想到,去github找几个大神写的demo试试:
好多星星的大神地址
。。。。。。等好多demo。
(github搜索Android WebView Video就可以出来好多)
下载之后放入我们的链接,也一样播放不出来。
这时候脑子突然清醒,分析猜测:Android不支持这种格式的视频。
但是确实是.mp4格式的视频啊。
我找到了一个视频分析工具,将视频下载下来扔进去,
MdieInfo-----这是格式分析工具,windows的,百度一下你就可以拥有。
格式工厂----这是给视频转码的工具,windwos的,百度一下你就可以拥有。
视频格式扔进去分析结果如图:
Android端支持的视频格式有:mp4/3gp/mov
使用H.264作为视频中视频流的编码格式才是正常。
通过格式工厂转完过后视频:
注:转成Android认识的H264格式。
重新放回服务器,加载就好了,转完之后视频大小变大了50%左右。
说明原来的编码格式不是H264的,现在H265格式也出现了,但是好像使用率还是没有超过H264,稳妥起见还是转成H264使用吧。
更多相关文章
- Android(安卓)动态加载布局
- webview的详解
- Android(安卓)UI布局优化之ViewStub
- Android实训案例(五)——四大组件之一ContentProvider的使用,通讯录
- Android面试题整理-3
- Android配置启动页
- Android动态加载字节码
- Android(安卓)效率开发之图片---Glide 旋转图片处理
- 自己动手做android热更新框架