IjkPlayer的基本使用

1.作為一個(gè)小白,花費(fèi)千辛萬苦終于知道Ijk如何使用,這里分享給跟我一樣小白的人.我們直接進(jìn)入正題(這里導(dǎo)入的是官方編譯的依賴).

compile'tv.danmaku.ijk.media:ijkplayer-java:0.7.5'
compile'tv.danmaku.ijk.media:ijkplayer-armv7a:0.7.5'
compile'tv.danmaku.ijk.media:ijkplayer-armv5:0.7.5'
compile'tv.danmaku.ijk.media:ijkplayer-arm64:0.7.5'
compile'tv.danmaku.ijk.media:ijkplayer-x86:0.7.5'
compile'tv.danmaku.ijk.media:ijkplayer-x86_64:0.7.5'
compile'tv.danmaku.ijk.media:ijkplayer-exo:0.7.5'

2.初始化播放器(并傳入播放地址和頭部信息等)

private AbstractMediaPlayer mediaPlayer;
public final static int IJKPLAYER=0;//IJK
public final static int EXOPLAYER=1;//谷歌EXO
private int videoType=IJKPLAYER;//Player類型,默認(rèn)IJK
private voidiniPLayer(Message msg) {
try{
currentVideoWidth=0;
currentVideoHeight=0;
mediaPlayer.release();
if(videoType==IJKPLAYER) {
initIJKPlayer(msg);
}else if(videoType==EXOPLAYER) {
initEXOPlayer(msg);
}catch(Exception e) {
e.printStackTrace();
}
private voidinitIJKPlayer(Message msg) {
mediaPlayer=newIjkMediaPlayer();
//音頻初始化
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try{
if(USE_MEDIA_CODEC) {
//硬解碼
((IjkMediaPlayer)mediaPlayer).setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"mediacodec",1);
((IjkMediaPlayer)mediaPlayer).setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"mediacodec-auto-rotate",1);
((IjkMediaPlayer)mediaPlayer).setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,"mediacodec-handle-resolution-change",1);
}
//設(shè)置播放源
((IjkMediaPlayer)mediaPlayer).setDataSource(((BreezeeModel) msg.obj).getUrl(),((BreezeeModel) msg.obj).getMapHeadData());
//設(shè)置循環(huán)播放
mediaPlayer.setLooping(((BreezeeModel) msg.obj).isLooping());
//設(shè)置播放速度(速度不為1時(shí))
if(((BreezeeModel) msg.obj).getSpeed() !=1&& ((BreezeeModel) msg.obj).getSpeed() >0) {
((IjkMediaPlayer)mediaPlayer).setSpeed(((BreezeeModel) msg.obj).getSpeed());
}
}catch(IOException e) {
e.printStackTrace();
}
}
private voidinitEXOPlayer(Message msg) {
mediaPlayer=newIjkExoMediaPlayer(context);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try{
mediaPlayer.setDataSource(context,Uri.parse(((BreezeeModel) msg.obj).getUrl()),((BreezeeModel) msg.obj).getMapHeadData());
}catch(IOException e) {
e.printStackTrace();
}
}

3.初始化顯示用控件,這里我沒有用SurfaceView,用的TextureView(具體不同可以去自行搜索一下)

private TextureView textureView;
textureView=newBreezeeTextureView(getContext());
textureView.setSurfaceTextureListener(this);

@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, intwidth, intheight) {
this.surface=new Surface(surface);
BreezeeVideoManager.instance().setDisplay(this.surface);//在監(jiān)聽中把得到的Surface丟給剛才初始化的播放器(下面把這個(gè)方法貼出來)
BreezeeVideoManager.instance().setListener(this);
mediaListener.bringViewsToFront();
}

@Override
public voidonSurfaceTextureSizeChanged(SurfaceTexture surface, intwidth, intheight) {
}

@Override
public booleanonSurfaceTextureDestroyed(SurfaceTexture surface) {
BreezeeVideoManager.instance().setDisplay(null);
surface.release();
return true;
}

@Override
public voidonSurfaceTextureUpdated(SurfaceTexture surface) {
}

4.show Display方法,傳入顯示用控件

Message msg =new Message();
msg.what=HANDLER_SETDISPLAY;
msg.obj= holder;
showDisplay(msg);

private void showDisplay(Message msg) {
if(msg.obj==null&&mediaPlayer!=null) {
mediaPlayer.setSurface(null);
}else{
Surface holder = (Surface) msg.obj;
if(mediaPlayer!=null&& holder.isValid()) {
//Player設(shè)置顯示用的Surface
mediaPlayer.setSurface(holder);
}
if(mediaPlayerinstanceofIjkExoMediaPlayer) {

//總時(shí)長>30
if(mediaPlayer!=null&&mediaPlayer.getDuration() >30
//當(dāng)前播放位置<總時(shí)長
&&mediaPlayer.getCurrentPosition()
mediaPlayer.seekTo(mediaPlayer.getCurrentPosition() -20);
}
}
}
}

IjkPlayer基本播放功能的使用就是醬更多別的功能可以到的github下載
github.com/WML245138231/BreezeePlayer
如果覺得功能封裝比較雞肋或者太簡單可以參考老司機(jī)車站站長:貓小郭的github
github.com/CarGuo/GSYVideoPlayer

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,036評論 25 709
  • 過去學(xué)習(xí)過如何扒代碼,但是不明白為什么要去扒代碼,后來工作之后也是慢慢的理解了;還有就是學(xué)習(xí)別人寫好的第三方框架,...
    mkb2閱讀 20,388評論 7 12
  • 《歡樂頌》里有一段劇情,曲筱綃暗地里給邱瑩瑩幫忙,卻說著言不由衷的話。趙醫(yī)生說她,人家都扮演好人,你卻扮演壞人。 ...
    蘆葦海走失閱讀 308評論 0 0
  • 在快速的騎車逛完了臺灣最美的環(huán)日月潭騎行道后,我開始乘船游覽。日月潭總共分為3片小島。 島上其實(shí)很多元化的,賣小吃...
    信長工閱讀 303評論 0 0
  • 南山一棵樹,我一直覺得它是一個(gè)充滿詩情畫意的名字,每每提及這個(gè)地名都覺得很美,像是遇見江南水鄉(xiāng):古色磚瓦、垂柳小橋...
    夏薇之秋閱讀 1,852評論 5 1

友情鏈接更多精彩內(nèi)容