Android實(shí)現(xiàn)視頻播放--騰訊瀏覽服務(wù)(TBS)功能
TBS視頻播放
TBS視頻播放器可以支持市面上幾乎所有的視頻格式,包括mp4, flv, avi, 3gp, webm, ts, ogv, m3u8, asf, wmv, rm, rmvb, mov, mkv等18種視頻格式。同時(shí)支持硬件解碼,使得內(nèi)存占用,穩(wěn)定性相較于系統(tǒng)播放器都更優(yōu)。
接入TBS
1.導(dǎo)入jar文件和so文件
官網(wǎng)SDK下載地址:https://x5.tencent.com/tbs/sdk.html,示例中有jar文件和so文件,具體導(dǎo)入方式我上一篇文章有詳細(xì)介紹(Android應(yīng)用內(nèi)展示office文件–騰訊瀏覽服務(wù)(TBS))
2.初始化Application
自定義一個(gè)Application類,對(duì)X5內(nèi)核進(jìn)行初始化
public class MyAppliction extends Application { @Override public void onCreate() { super.onCreate(); //回調(diào)接口初始化完成接口回調(diào) QbSdk.PreInitCallback pcb=new QbSdk.PreInitCallback() { @Override public void onCoreInitFinished() { } @Override public void onViewInitFinished(boolean b) { //x5內(nèi)核初始化完成的回調(diào),為true表示x5內(nèi)核加載成功,否則表示x5內(nèi)核加載失敗,會(huì)自動(dòng)切換到系統(tǒng)內(nèi)核。 Log.e("myApplication", " x5內(nèi)核加載成功?" + b); } }; //x5內(nèi)核預(yù)加載,異步初始化x5 webview所需環(huán)境 QbSdk.initX5Environment(getApplicationContext(), pcb); } }
在AndroidManifest.xml進(jìn)行聲明
<application android:name="com.example.xch.tbsvideoplay.MyAppliction"
3.使用
直接在清單文件AndroidManifest.xml中配置SDK中的視頻播放Activity
<activity android:name="com.tencent.smtt.sdk.VideoActivity" android:alwaysRetainTaskState="true" android:configChanges="orientation|screenSize|keyboardHidden" android:exported="false" android:launchMode="singleTask"> <intent-filter> <action android:name="com.tencent.smtt.tbs.video.PLAY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
在代碼中直接調(diào)用TbsVideo.openVideo()播放
/** * 直接調(diào)用播放視頻 * @param videoUrl 視頻地址 */ private void startPlay(String videoUrl){ //判斷當(dāng)前是否可用 if(TbsVideo.canUseTbsPlayer(getApplicationContext())){ //播放視頻 TbsVideo.openVideo(getApplicationContext(), videoUrl); } }
4.添加權(quán)限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 硬件加速對(duì)X5視頻播放有利,建議開啟 --> <uses-permission android:name="android.permission.GET_TASKS" />
效果圖
優(yōu)化
先看一下優(yōu)化之后的效果
自定義TBS的WebView,充分發(fā)揮X5內(nèi)核的作用
1.自定義webview
需繼承TBS的webview,包一定不能導(dǎo)錯(cuò):com.tencent.smtt.sdk.WebView
public class X5WebView extends WebView { private WebViewClient client = new WebViewClient() { /** * 防止加載網(wǎng)頁(yè)時(shí)調(diào)起系統(tǒng)瀏覽器 */ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }; @SuppressLint("SetJavaScriptEnabled") public X5WebView(Context arg0, AttributeSet arg1) { super(arg0, arg1); this.setWebViewClient(client); initWebViewSettings(); this.getView().setClickable(true); } /** * 初始化webview設(shè)置 */ private void initWebViewSettings() { WebSettings webSetting = this.getSettings(); ... } /** * 這里可以為自定義webview繪制背景或文字 * @param canvas * @param child * @param drawingTime * @return */ @Override protected boolean drawChild(Canvas canvas, View child, long drawingTime) { boolean ret = super.drawChild(canvas, child, drawingTime); canvas.save(); ... return ret; } public X5WebView(Context arg0) { super(arg0); setBackgroundColor(85621); } }
2.布局中使用自定義WebView
<com.example.xch.tbsvideoplay.tools.X5WebView android:id="@+id/x5_webview" android:layout_width="match_parent" android:layout_height="200dp" android:scrollbars="none" />
3.使用自定義WebView播放視頻
/** * 使用自定義webview播放視頻 * @param vedioUrl 視頻地址 */ private void startPlay(String vedioUrl) { x5webView.loadUrl(vedioUrl); getWindow().setFormat(PixelFormat.TRANSLUCENT); x5webView.getView().setOverScrollMode(View.OVER_SCROLL_ALWAYS); x5webView.setWebChromeClient(new WebChromeClient()); }
4.支持橫豎屏切換
在AndroidManifest.xml中給當(dāng)前Activity配置configChanges屬性
<activity android:name="com.example.xch.tbsvideoplay.VideoPlayActivity" android:configChanges="orientation|screenSize|keyboardHidden"/>
源碼已上傳至GitHub,需要的可以下載: https://github.com/yangxch/TBSVideoPlay
總結(jié)
以上所述是小編給大家介紹的Android實(shí)現(xiàn)視頻播放--騰訊瀏覽服務(wù)(TBS),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- iOS Crash常規(guī)跟蹤方法及Bugly集成運(yùn)用詳細(xì)介紹
- Android 使用騰訊X5瀏覽器上傳圖片的示例
- Android 通過騰訊TBS實(shí)現(xiàn)文件預(yù)覽功能
- Android基于騰訊云實(shí)時(shí)音視頻仿微信視頻通話最小化懸浮
- Android集成騰訊X5實(shí)現(xiàn)文檔瀏覽功能
- Android自定義View仿騰訊TIM下拉刷新View
- Android在項(xiàng)目中接入騰訊TBS瀏覽器WebView的教程與注意的地方
- Android開發(fā)騰訊驗(yàn)證碼遇到的坑
- 騰訊、百度、華為、搜狗和滴滴Android面試題匯總
- Android如何快速集成騰訊Bugly
相關(guān)文章
Android編程實(shí)現(xiàn)圖標(biāo)拖動(dòng)效果的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)圖標(biāo)拖動(dòng)效果的方法,涉及Android事件響應(yīng)及圖標(biāo)變換的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11Android下保存簡(jiǎn)單網(wǎng)頁(yè)到本地(包括簡(jiǎn)單圖片鏈接轉(zhuǎn)換)實(shí)現(xiàn)代碼
這篇文章主要介紹了Android下保存簡(jiǎn)單網(wǎng)頁(yè)到本地(包括簡(jiǎn)單圖片鏈接轉(zhuǎn)換)實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-02-02深入理解Android中的Handler異步通信機(jī)制
這篇文章主要介紹了Android中的Handler異步通信機(jī)制,文中舉了兩個(gè)例子介紹了Handler里面實(shí)用的API中的方法,需要的朋友可以參考下2016-03-03Android 7.0 運(yùn)行時(shí)權(quán)限彈窗問題的解決
這篇文章主要介紹了Android 7.0 運(yùn)行時(shí)權(quán)限彈窗問題的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Android簡(jiǎn)單封裝一個(gè)MVP基類流程詳解
MVP是從經(jīng)典的模式MVC演變而來,它們的基本思想有相通的地方:Controller/Presenter負(fù)責(zé)邏輯的處理,Model提供數(shù)據(jù),View負(fù)責(zé)顯示。下面這篇文章主要給大家介紹了關(guān)于Android從實(shí)現(xiàn)到封裝MVP的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧2023-03-03Android Studio 利用Splash制作APP啟動(dòng)界面的方法
這篇文章主要介紹了Android Studio 利用Splash制作APP啟動(dòng)界面,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05