IjkPlayer是B站开源的项目,很多年了。这次记录一下我再4.4上使用的用的坑。
显示引入支持
// required, enough for most devices.
implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
// required, enough for most devices.
implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
// Other ABIs: optional
implementation 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'
//implementation 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'
//implementation 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'
// ExoPlayer as IMediaPlayer: optional, experimental
implementation 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
上面会有两个地方
- 有两个64的扩展被我注释掉了,因为我的4.4好像不支持64位CPU?不注释掉,Build的时候会爆红,过不去。
- 要在库配置里增加
jcenter()
。就是google()
和mavenCentral()
的那个配置文件。settings.gradle
在layout文件中先写入一个SurfaceView控件
<SurfaceView
android:id="@+id/sv_camera"
android:layout_width="match_parent"
android:layout_height="520dp"/>
就当个普通的View控件来设置就好了,没有什么特别的。 这个控件将会被当做视频播放的容器来使用(也可以理解成视口,搞过Canvas的会很容易理解)。
为SurfaceView设置生命周期方法
svCamera = findViewById(R.id.sv_camera);
svCamera.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(@NonNull SurfaceHolder surfaceHolder) {
// 播放器容器初始化完毕后创建播放器实例
ijkMediaPlayer = new IjkMediaPlayer();
IjkMediaPlayer.native_setLogLevel(IjkMediaPlayer.IJK_LOG_DEBUG);
}
@Override
public void surfaceChanged(@NonNull SurfaceHolder surfaceHolder, int i, int i1, int i2) {
//ijkMediaPlayer.setSurface(svCamera.getHolder().getSurface());
}
@Override
public void surfaceDestroyed(@NonNull SurfaceHolder surfaceHolder) {
// 播放器容器销毁时 释放播放器容器
ijkMediaPlayer.release();
}
});
在要放播放器的Activity的onCreate方法中初始化播放器
// 对于这个播放器实例到底是放到哪里实例化,有什么差别,这个我没去检查有什么区别,都能用。
// 实例化Ijkplayer
IjkMediaPlayer ijkMediaPlayer = new IjkMediaPlayer(<