Android VideoView 无法播放https网络视频问题

最近项目里遇见一个奇葩问题,由于项目之前的服务器地址是http,然而最近又换成https的,本来从不安全的证书换成安全的证书一切应该ok,但重新打包运行却出现了新问题,(怀疑证书压根就是不安全的)

1 项目主体为,cordova+vue+crosswalk  我负责写原生插件,但自从换成https的服务器地址后 项目莫名的弹出Android VideoView 无法播放https网络视频问题_第1张图片

Ssl?  首先想到的是网络请求忽略不安全的证书问题,但回头想想 这写操作都是前端写的 怎么会在我这弹出这个error 呢  最后想到因为前端的内容都是加载在crosswalk上的 那就从它入手吧 反复度娘 最后在自己封装好的XWalkResourceClient中加了一个

 @Override
    public boolean shouldOverrideUrlLoading(XWalkView view, String url) {
        return parentEngine.client.onNavigationAttempt(url);
    }

 

最后问题完美解决(我认为这不是从源头解决,只是缓兵之计,欢迎大神指教)

2 ssl弹窗问题解决之后 接着又出现了 视频无法播放的的问题, 由于项目是用VideoView 做播放的 度娘了一下 说是videoview 无法播放https的网络视频,论坛上又没有实质性的解决方案,本想着换一个第三方支持https视频播放的框架,但想想既然crosswalk可以在封装好的地方忽略证书,VideoView 也可以,最后在 自己封装好的CustomVideoView中 重写了

@Override
    public void setVideoURI(Uri uri) {
        super.setVideoURI(uri);
        try {
            HttpsURLConnection.setDefaultSSLSocketFactory(SSlUtiles.createSSLSocketFactory());
            HttpsURLConnection.setDefaultHostnameVerifier(new SSlUtiles.TrustAllHostnameVerifier());
        } catch (Exception e) {
            e.printStackTrace();
        }
    } 

 方法 ,视频无法播放问题完美解决  其中SSlUtiles类为一个默认信任所有的证书的工具类 最后贴出 希望能用到的朋友共勉

public class SSlUtiles {
	/**
	 * 默认信任所有的证书
	 *
	 * xts
	 */
	public static SSLSocketFactory createSSLSocketFactory() {

		SSLSocketFactory sSLSocketFactory = null;

		try {
			SSLContext sc = SSLContext.getInstance("TLS");
			sc.init(null, new TrustManager[] { (TrustManager) new TrustAllManager() }, new SecureRandom());
			sSLSocketFactory = sc.getSocketFactory();
		} catch (Exception e) {
		}

		return sSLSocketFactory;
	}

	public static class TrustAllManager implements X509TrustManager {
		@Override
		public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
		}

		@Override
		public void checkServerTrusted(X509Certificate[] chain, String authType)

				throws CertificateException {
		}

		@Override
		public X509Certificate[] getAcceptedIssuers() {
			return new X509Certificate[0];
		}
	}

	public static class TrustAllHostnameVerifier implements HostnameVerifier {
		public boolean verify(String hostname, SSLSession session) {
			return true;
		}
	}
}

  欢迎指教

你可能感兴趣的:(BUG)