android集成EasyPlayer播放器播放實時流媒體視屏
最近公司項目需要實現一個rtsp實時流媒體視頻的播放,在移動端嘗試了多個第三方能播放rtsp流實時視頻的軟件後發現EasyPlayer的實時性較好,畫面、聲音也都還可以。所以,今天記錄一下自己的成果。第一次寫。。
EasyPlayer是由EasyDarwin開源團隊開發和維護的一個流媒體播放器項目,目前有RTSP版和Pro版兩個版本,RTSP支持Windows(支持多窗口、包含ActiveX,npAPI Web插件)、Android平臺,iOS平臺,視頻支持H.264,H.265,MPEG4,MJPEG,音頻支持G711A,G711U,G726,AAC,支持RTSP over TCP/UDP,支持硬解碼,是一套極佳的RTSP流播放組件。
easyPlayer集成步驟
1.先下載官方的dome https://github.com/EasyDarwin/EasyPlayer_Android
2.下載後導入到android studio中(一般會有問題,①是你的gradle版本和他的不一樣,②可能他關聯的包,庫你的環境裏沒有。。。還有些其他的)
3.可以看到他關聯了一個庫(rtspclient)
4.在自己的項目中關聯rtspclient(主要查看下rtspclient的gradle和自己項目的gradle,這裏可能會出現一些問題)
開始代碼中的集成了
1。佈局文件中添加一個TexTureView控件,並在activity中實現其回調。
<TextureView
android:id="@+id/ttV"
android:layout_width="match_parent"
android:layout_height="match_parent" />
mTtv.setOpaque(false);//設置是否透明
mTtv = findViewById(R.id.ttV);
mTtv.setSurfaceTextureListener(MainActivity.this);
在Mainactivity中實現相應的接口
2.在TexTureView的回掉函數onSurfaceTextureAvailable中執行視屏的顯示。
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
startRending(surface);
}
if (url.toLowerCase().startsWith("rtmp://")){
Toast.makeText(this, "地址出錯", Toast.LENGTH_SHORT).show();
}else{
/*
*本Key爲3個月臨時授權License,如需商業使用或者更改applicationId,請郵件至[email protected]申請此產品的授權。
*/
mEasyRTSPClient = new EasyRTSPClient(MainActivity.this, "79393674363536526D3430417A41645A7076677A532B6473615768686279356A6232307562586C686348427361574E6864476C76626A4B45567778576F50394C34456468646D6C754A6B4A68596D397A595541794D4445325257467A65555268636E6470626C526C5957316C59584E35", surface, mResultReceiver);
boolean autoRecord = PreferenceManager.getDefaultSharedPreferences(MainActivity.this).getBoolean("auto_record", false);
File f = new File(MyApplication.sMoviePath);
f.mkdirs();
try {
mEasyRTSPClient.start(url, 1, RTSPClient.EASY_SDK_VIDEO_FRAME_FLAG | RTSPClient.EASY_SDK_AUDIO_FRAME_FLAG, "", "", autoRecord ? new File(f, new SimpleDateFormat("yy-MM-dd HH:mm:ss").format(new Date()) + ".mp4").getPath() : null);
}catch (Exception e){
e.printStackTrace();
Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
return;
}
//這裏我是把dome裏的拷過來了,這裏主要是EasyRTSPClient這個類,可以去看看他的源碼。看他的構造函數的參數
//2--需要一個授權的id,上面介紹了獲取的辦法
//3--顯示視頻的控件
//4--自己可以百度去看看 http://blog.csdn.net/liuyingcan/article/details/50673317
視頻停止
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
stopRending();
return true;
}
//視頻停止顯示
private void stopRending() {
if (mEasyRTSPClient != null) {
mEasyRTSPClient.stop();
mEasyRTSPClient = null;
}
}