Android WebView Video播放.mp4视频失败 其他端正常---视频编码问题
Android通过WebView加载网页,网页中有Video标签去播放视频,代码不复杂,设置webview的一些属性之后loadUrl即可。
但是,昨天,我的WebView失效了,网页中的Video标签播放不出来了。
但是iOS和微信端是正常的,一下子血液上涌,我按照正常的逻辑想,一定是我WebView的设置哪里少了。
国内外网站,从百度一下到微软必应到google到*走了一大圈,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使用吧。