背景:由于项目需要在一个定制android设备上播放RTSP流视频,设备自带的浏览器内核不支持RTSP流播放,这就导致我使用webview播放h5网址上的视频的时候,无法正常播放视频。在android手机上都是可以播放的,所以猜测是定制android设备自带的浏览器内核兼容性比较差。通过对比,选择使用腾讯x5内核。
由于设备没有联外网的,所以只能通过离线安装的方式。查看了腾讯浏览服务-SDK下载
官网文档,发现流程写的并不清晰,而且没有提供离线安装包,所以这里做个整理。
1.首先需要项目依赖x5 sdk库,通过sdk提供的api安装
api 'com.tencent.tbs:tbssdk:44286'
2.下载x5安装包,链接如下
https://download.csdn.net/download/wangwenbo1019/88850590
3.将下载好的安装包放到项目的assets目录下
3.将项目目录下的安装包拷贝到sd卡,代码如下:(这里逻辑可以放在启动页或者首页去做)
File internalStorage = this.getFilesDir();String path = internalStorage.getAbsolutePath();copyAssetsToSDCard(this, "tbs", path + "/tbs");
public static void copyAssetsToSDCard(Context context, String sourceFolder, String destinationFolder) {AssetManager assetManager = context.getAssets();String[] files;try {// 获取assets文件夹下的所有文件和子文件夹files = assetManager.list(sourceFolder);} catch (IOException e) {e.printStackTrace();return;}// 创建目标文件夹File destFolder = new File(destinationFolder);if (!destFolder.exists()) {destFolder.mkdirs();}for (String filename : files) {InputStream in = null;OutputStream out = null;try {// 从assets中打开文件in = assetManager.open(sourceFolder + "/" + filename);// 指定输出目标文件File outFile = new File(destinationFolder, filename);out = new FileOutputStream(outFile);// 将文件内容复制到目标文件Log.i("Qbsdk","copy 开始");copyFile(in, out);} catch (IOException e) {e.printStackTrace();} finally {try {if (in != null) {in.close();}if (out != null) {out.close();}} catch (IOException e) {e.printStackTrace();}}}}
private static void copyFile(InputStream in, OutputStream out) throws IOException {try {byte[] buffer = new byte[1024];int read;LogUtil.Companion.i("Qbsdk","copy 进行中...");while ((read = in.read(buffer)) != -1) {out.write(buffer, 0, read);}LogUtil.Companion.i("Qbsdk","copy 文件成功");} catch (Exception e) {e.printStackTrace();LogUtil.Companion.i("Qbsdk","copy 文件失败"+e.getMessage());}}
4.通过调用腾讯sdk api执行安装任务
QbSdk.installLocalTbsCore(this, 46514, path + "/tbs" + "/tbs_core_046514_20230612114949_nolog_fs_obfs_armeabi_release.tbs");
其中46514表示安装包的版本号。
5.添加监听
QbSdk.setTbsListener(new TbsListener() {/*** @param stateCode 用户可处理错误码请参考{@link com.tencent.smtt.sdk.TbsCommonCode}*/@Overridepublic void onDownloadFinish(int stateCode) {LogUtil.Companion.i(TAG, "onDownloadFinished: " + stateCode);}/*** @param stateCode 用户可处理错误码请参考{@link com.tencent.smtt.sdk.TbsCommonCode}*/@Overridepublic void onInstallFinish(int stateCode) {LogUtil.Companion.i(TAG, "安装x5内核完成 重启app: ");}/*** 首次安装应用,会触发内核下载,此时会有内核下载的进度回调。* @param progress 0 - 100*/@Overridepublic void onDownloadProgress(int progress) {LogUtil.Companion.i(TAG, "Core Downloading: " + progress);}});
6.安装成功之后重启app,查看是否可以加载x5内核
Boolean canLoadX5 = QbSdk.canLoadX5(this);LogUtil.Companion.i("QbSdk", "是否可以加载X5内核: " + canLoadX5);
7.加载成功之后在页面直接使用sdk提供的webview就可以使用x5内核加载h5网页了
<com.tencent.smtt.sdk.WebViewandroid:id="@+id/webView"android:layout_width="match_parent"android:layout_height="match_parent"/>