首先祝大家兒童節(jié)快樂!

代碼已經(jīng)上傳到github上,喜歡的star和fork下謝謝。
直播
直播(LIVE) 的視頻源是主播實時推送的。因此,主播停止推送后,播放端的畫面也會隨即停止,而且由于是實時直播,所以播放器在播直播 URL 的時候是沒有進度條的。
對接攻略
①添加 View
同推流一樣需要TXCloudVideoView,在xml文件中添加:
<com.tencent.rtmp.ui.TXCloudVideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true" />
②創(chuàng)建 Player
騰訊視頻提供了TXLivePlayer 負責實現(xiàn)直播播放功能,并使用 setPlayerView()方法將它與我們剛剛添加到界面上的 TXCloudVideoView控件進行關聯(lián)。
//mPlayerView 即 step1 中添加的界面 view
TXCloudVideoView mView = (TXCloudVideoView) view.findViewById(R.id.video_view);
//創(chuàng)建 player 對象
TXLivePlayer mLivePlayer = new TXLivePlayer(getActivity());
//關鍵 player 對象與界面 view
mLivePlayer.setPlayerView(mView);
③啟動播放
String flvUrl = "http://2157.liveplay.myqcloud.com/live/2157_xxxx.flv";
mLivePlayer.startPlay(flvUrl, TXLivePlayer.PLAY_TYPE_LIVE_FLV); //推薦 FLV
⑤暫停播放
對于直播播放而言,并沒有真正意義上的暫停,所謂的直播暫停,只是畫面凍結(jié)和關閉聲音,而云端的視頻源還在不斷地更新著,所以當您調(diào)用 resume 的時候,會從最新的時間點開始播放,這跟點播是有很大不同的(點播播放器的暫停和繼續(xù)與播放本地視頻文件時的表現(xiàn)相同)。
// 暫停
mLivePlayer.pause();
// 繼續(xù)
mLivePlayer.resume();
⑥結(jié)束播放
結(jié)束播放時 記得銷毀TXCloudVideoView控件 ,尤其是在下次 startPlay() 之前,否則會產(chǎn)生大量的內(nèi)存泄露以及閃屏問題。
同時,在退出播放界面時,記得一定要調(diào)用渲染TXCloudVideoView的onDestroy()函數(shù),否則可能會產(chǎn)生內(nèi)存泄露和 “Receiver not registered” 報警。
@Override
public void onDestroy() {
super.onDestroy();
mLivePlayer.stopPlay(true); // true 代表清除最后一幀畫面
mTxCloudVideoView.onDestroy();
}
⑦彈幕
這里彈幕用的是B站的DanmakuFlameMaster
在xml中引入:
...
<!--彈幕-->
<master.flame.danmaku.ui.widget.DanmakuView
android:id="@+id/danmakuView"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_marginTop="@dimen/heart_anim_bezier_x_rand" />
...
在Activity中引入:
/**
* 初始化彈幕
*/
private void initDanmaKu() {
mDanmakuController = new DanmakuController(mDanmakuView, this);
mDanmakuController.initDanmaKu();
//默認不顯示
mDanmakuView.hide();
//總開關
mSwitchBt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
mDanmakuView.show();
} else {
mDanmakuView.hide();
}
}
});
}
運行效果如下:

⑧酷炫禮物動畫
想必直播中最缺少不了的就是動畫,比如像下面的效果:

這里正好用YY團隊開源了一個動畫框架SVGA,用法如下:
在工程主目錄下build.gradle添加:
allprojects {
repositories {
…
maven {
url ‘https://jitpack.io‘
}
}
}
在modle下build.gralde添加:
implementation 'com.github.yyued:SVGAPlayer-Android:2.0.3'
在xml中添加:
<com.opensource.svgaplayer.SVGAImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitCenter"
app:antiAlias="true" />
Activity中引用:
動態(tài)圖像或文本
SVGAParser parser = new SVGAParser(this);
try {
parser.parse(new URL("https://github.com/yyued/SVGA-Samples/blob/master/kingset.svga?raw=true"), new SVGAParser.ParseCompletion() {
@Override
public void onComplete(SVGAVideoEntity mSVGAVideoEntity) {
SVGADrawable drawable = new SVGADrawable(mSVGAVideoEntity);
mimageView.setImageDrawable(drawable);
mimageView.startAnimation();
}
@Override
public void onError() {
Toast.makeText(LiveActivity.this, "parse error!", Toast.LENGTH_SHORT).show();
}
});
} catch (Exception e) {
System.out.print(true);
}
}
運行下效果如下:

好了到這里,騰訊視頻直播基本完成,代碼已經(jīng)上傳至github上,如果喜歡點個贊和star,謝謝!
動畫感謝
直播App中Android酷炫禮物動畫實現(xiàn)方案
YY-SVGA動畫框架
SVGAPlayer-Android
SVGA-Samples