【Android】记录一次调用IjkPlayer

本文记录了在Android 4.4设备上使用IjkPlayer时遇到的问题及解决过程,包括引入支持、设置SurfaceView、初始化播放器、播放和停止操作。在4.4系统中,由于不支持64位CPU,需要注释掉相关扩展。通过不断试错,最终成功实现视频播放,并建议将实现封装为工具类或自定义控件以提高复用性。
摘要由CSDN通过智能技术生成

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'

上面会有两个地方

  1. 有两个64的扩展被我注释掉了,因为我的4.4好像不支持64位CPU?不注释掉,Build的时候会爆红,过不去。
  2. 要在库配置里增加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(<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值