IjkPlayer的基本使用

1.作为一个小白,花费千辛万苦终于知道Ijk如何使用,这里分享给跟我一样小白的人.我们直接进入正题(这里导入的是官方编译的依赖).

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类型,默认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);
}
//设置播放源
((IjkMediaPlayer)mediaPlayer).setDataSource(((BreezeeModel) msg.obj).getUrl(),((BreezeeModel) msg.obj).getMapHeadData());
//设置循环播放
mediaPlayer.setLooping(((BreezeeModel) msg.obj).isLooping());
//设置播放速度(速度不为1时)
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);//在监听中把得到的Surface丢给刚才初始化的播放器(下面把这个方法贴出来)
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设置显示用的Surface
mediaPlayer.setSurface(holder);
}
if(mediaPlayerinstanceofIjkExoMediaPlayer) {

//总时长>30
if(mediaPlayer!=null&&mediaPlayer.getDuration() >30
//当前播放位置<总时长
&&mediaPlayer.getCurrentPosition()
mediaPlayer.seekTo(mediaPlayer.getCurrentPosition() -20);
}
}
}
}

IjkPlayer基本播放功能的使用就是酱更多别的功能可以到的github下载
github.com/WML245138231/BreezeePlayer
如果觉得功能封装比较鸡肋或者太简单可以参考老司机车站站长:猫小郭的github
github.com/CarGuo/GSYVideoPlayer

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 180,118评论 25 708
  • 过去学习过如何扒代码,但是不明白为什么要去扒代码,后来工作之后也是慢慢的理解了;还有就是学习别人写好的第三方框架,...
    mkb2阅读 20,428评论 7 12
  • 《欢乐颂》里有一段剧情,曲筱绡暗地里给邱莹莹帮忙,却说着言不由衷的话。赵医生说她,人家都扮演好人,你却扮演坏人。 ...
    芦苇海走失阅读 318评论 0 0
  • 在快速的骑车逛完了台湾最美的环日月潭骑行道后,我开始乘船游览。日月潭总共分为3片小岛。 岛上其实很多元化的,卖小吃...
    信长工阅读 318评论 0 0
  • 南山一棵树,我一直觉得它是一个充满诗情画意的名字,每每提及这个地名都觉得很美,像是遇见江南水乡:古色砖瓦、垂柳小桥...
    夏薇之秋阅读 1,869评论 5 1

友情链接更多精彩内容