博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TencentTbs腾讯浏览服务 x5内核使用
阅读量:4624 次
发布时间:2019-06-09

本文共 8820 字,大约阅读时间需要 29 分钟。

Tencent TBS (下简称TBS)

腾讯浏览服务

What is it?

百度百科解释:

腾讯浏览服务(Tencent Browsing Service,以下简称TBS),由腾讯X5浏览服务升级而来,作为业界首个升级至X5 blink内核,与Android 5.0 版本的Chromium M37一致,解决了Android 多平台兼容性问题。

在我们的手机上如何找到它?微信打开一片公众号的文章,下拉会出现(QQ浏览器X5内核提供技术支持)。QQ/TIM内置浏览器。QQ浏览器,都使用了x5内核。

TIM?如果你还没有用过Tim,可以点击下面的连接进行下载(个人感觉比QQ好用):

Why use it?

  • 让你的app实现基本网页加载(类浏览器功能)
  • 让你的app实现播放视频功能
  • 让你的app实现播放直播流功能

How use it?

  • 第一步:访问TBS官网,下载SDK for Android
  • 第二步:根据集成文档,集成到自己的项目中
  • 第三步:编写自己的代码进行测试。

下载TBS SDK

官网:

这里写图片描述
点击首页的SDK下载,

点击下载完整版,或者点击分享链接:

链接: 密码:sxkg

点击下载SDK接入示例-Android Studio,或者点击分享链接:
链接:链接: 密码:ca11

这里写图片描述

SDK集成

  1. 解压SDK压缩包,复制里面的jar包到自己工程里面的libs(tbs_sdk_thirdapp_v3.5.0.1004_43500_sharewithdownload_withoutGame_obfs_20170801_113025)文件夹中
  2. 添加jar包到构建路径。如下图

    这里写图片描述

  3. 查看官方接入文档:

  4. 添加so文件支持,解压SDK接入示例-Android Studio压缩包,复制jniLibs文件夹,粘贴到自己工程main包下。具体的操作查看:

这里写图片描述

5. 添加权限:在清单文件中添加如下权限

  1. 在项目的Application中初始化x5内核
/**     *初始化X5     */    private void initX5() {        QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() {            @Override            public void onCoreInitFinished() {            }            @Override            public void onViewInitFinished(boolean b) {            }        });    }
  1. 如果想实现视频播放功能可以在清单文件中配置该Activity

编写代码进行测试。

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btnOpenUrl; private Button btnOpenMp4; private Button btnOpenM3u8; private Button btnOpenRtmp; private FrameLayout mFl_web_view_layout; private WebView mWebView; /** * 打开的Url */ private String openUrl = "http://www.wintp.top"; /** * m3u8视频的地址 */ private String m3u8Url = "http://www.flashls.org/playlists/test_001/stream_1000k_48k_640x360.m3u8"; /** * m3u8视频的地址 */ private String mp4Url = "http://v.cctv.com/flash/mp4video6/TMS/2011/01/05/cf752b1c12ce452b3040cab2f90bc265_h264818000nero_aac32-1.mp4"; /** * rtmp视频的地址 香港卫视:rtmp://live.hkstv.hk.lxdns.com/live/hks */ private String rtmp8Url = "rtmp://live.hkstv.hk.lxdns.com/live/hks"; @Override public void onClick(View v) { if (v == btnOpenUrl) { //加载URL initWebView(); } else if (v == btnOpenMp4) { startVideo(mp4Url); } else if (v == btnOpenM3u8) { startVideo(m3u8Url); } else if (v == btnOpenRtmp) { startVideo(rtmp8Url); } } /** * 播放视频 * * @param url */ public void startVideo(String url) { //判断当前Tbs播放器是否已经可以使用。 //public static boolean canUseTbsPlayer(Context context) //直接调用播放接口,传入视频流的url //public static void openVideo(Context context, String videoUrl) //extraData对象是根据定制需要传入约定的信息,没有需要可以传如null //public static void openVideo(Context context, String videoUrl, Bundle extraData) if ((TbsVideo.canUseTbsPlayer(this))) { //可以播放视频 TbsVideo.openVideo(this, url); } else { Toast.makeText(this, "视频播放器没有准备好", Toast.LENGTH_SHORT).show(); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //x5 设置键盘 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); initView(); } /** * 初始化View */ private void initView() { btnOpenUrl = findViewById(R.id.btn_open_url); btnOpenMp4 = findViewById(R.id.btn_open_mp4); btnOpenM3u8 = findViewById(R.id.btn_open_m3u8); btnOpenRtmp = findViewById(R.id.btn_open_rtmp); mFl_web_view_layout = findViewById(R.id.fl_web_view_layout); btnOpenUrl.setOnClickListener(this); btnOpenMp4.setOnClickListener(this); btnOpenM3u8.setOnClickListener(this); btnOpenRtmp.setOnClickListener(this); } /** * 初始化WebView */ private void initWebView() { //采用new WebView的方式进行动态的添加WebView //WebView 的包一定要注意不要导入错了 //com.tencent.smtt.sdk.WebView; mWebView = new WebView(this); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); mWebView.setLayoutParams(layoutParams); mWebView.loadUrl(openUrl); WebSettings settings = mWebView.getSettings(); mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView webView, String url) { webView.loadUrl(url); return true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { //设定加载开始的操作 } @Override public void onPageFinished(WebView view, String url) { //设定加载结束的操作 } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { switch (errorCode) { } } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
//处理https请 //handler.proceed(); //表示等待证书响应 // handler.cancel(); //表示挂起连接,为默认方式 // handler.handleMessage(null); //可做其他处理 } }); mWebView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress < 100) { String progress = newProgress + "%"; } else { // to do something... } } @Override public void onReceivedTitle(WebView view, String title) { } }); settings.setJavaScriptEnabled(true); settings.setUseWideViewPort(true); //将图片调整到适合webview的大小 //设置加载图片 settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); settings.setDefaultTextEncodingName("utf-8");// 避免中文乱码 mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); settings.setNeedInitialFocus(false); settings.setSupportZoom(true); settings.setLoadWithOverviewMode(true);//适应屏幕 settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); settings.setLoadsImagesAutomatically(true);//自动加载图片 settings.setCacheMode(WebSettings.LOAD_DEFAULT | WebSettings.LOAD_CACHE_ELSE_NETWORK); //将WebView添加到底部布局 mFl_web_view_layout.removeAllViews(); mFl_web_view_layout.addView(mWebView); } @Override public void onBackPressed() { //监听返回键,判断webview是否能够后退,如果能后退,则执行后退功能如不能后退,则关闭该页面 if (mWebView.canGoBack()) { mWebView.goBack(); } else { finish(); } } @Override protected void onResume() { super.onResume(); if (mWebView != null) { mWebView.onResume(); } } @Override protected void onPause() { super.onPause(); if (mWebView != null) { mWebView.onPause(); } } @Override protected void onDestroy() { //在Activity销毁的时候同时销毁WebView //如没有此操作,可能会出现,当你在网页上播放一个视频的时候,直接按home键退出应用,视频仍在播放 if (mWebView != null) { mWebView.destroy(); mFl_web_view_layout.removeView(mWebView); mWebView = null; } super.onDestroy(); } }

activity_main.xml

MyApp.java

package top.wintp.mytbsdemo;    import android.app.Activity;    import android.app.Application;    import android.os.Bundle;    import com.tencent.smtt.sdk.QbSdk;    /**     * 作者:  pyfysf     * 

* qq: 337081267 *

* CSDN: http://blog.csdn.net/pyfysf *

* 个人博客: http://wintp.top *

* 时间: 2018/01/2018/1/22 15:42 *

* 邮箱: pyfysf@163.com */ public class MyApp extends Application {

@Override public void onCreate() { super.onCreate(); initX5(); } /** * 初始化X5 */ private void initX5() { QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() { @Override public void onCoreInitFinished() { } @Override public void onViewInitFinished(boolean b) { } }); } }

该项目的github地址:

注意:

视频功能:TBS 支持mp4,rmvb,flv,avi等26种视频格式。

本文只举:mp4,m3u8,rtmp三个格式。

转载于:https://www.cnblogs.com/upuptop/p/11154361.html

你可能感兴趣的文章
详细了解 int? 类型
查看>>
字符串匹配 ?kmp : hash
查看>>
mongod.service: control process exited, code=exited status=1
查看>>
c# 发送邮件、附件 分类: C# 2014-12-...
查看>>
对360来说,江湖上再无“搜狗”这个传说
查看>>
composer
查看>>
OpenCV特征点检测——ORB特征
查看>>
mysql的csv数据导入与导出
查看>>
leetcode笔记:Pascal&#39;s Triangle
查看>>
ASP.NET性能优化之构建自定义文件缓存
查看>>
Shell——windows上写完放入linux的时候需要注意的问题
查看>>
65条常用的正则表达式
查看>>
Vscode断点调试PHP
查看>>
做前端要做的6大事
查看>>
LeetCode 813. Largest Sum of Averages
查看>>
vSphere、Hyper-V与XenServer 你选哪个?
查看>>
java.lang.UnsupportedClassVersionError
查看>>
实现接口必须要加注解@Override吗
查看>>
apicloud UISearchBar 使用方法
查看>>
【spring+websocket的使用】
查看>>