ijkplayer-android编译与使用说明

经过一番折腾与踩坑,终于在Ubuntu成功编译了ijkplayer源码,并成功在自己的demo调用ijkplayer库实现视频播放。在此对之前的编译及demo调用进行总结。

1、在Ubuntu系统进行ijkplayer编译

Ubuntu版本为18.04LTS。根据官网介绍,在编译之前需要先做一些环境配置准备。

1、首先安装Android SDK和NDK。

sdk下载地址:http://developer.android.com/sdk/index.html 。我这里下载的是android-studio-ide-173.4819257-linux.zip。通过启动Android studio下载sdk。

将android-studio-ide-173.4819257-linux.zip拷贝到你要存放的位置。执行如下命令:

unzip android-studio-ide-173.4819257-linux.zip

cd android-studio/bin

sh studio.sh

之前完上面的命令后,会下载sdk到如下目录:~/Android/sdk

ndk下载地址: https://developer.android.com/ndk/downloads/index.html#download。刚开始下载的版本是android-ndk-r16b-linux-x86_64.zip。但是在编译源码的时候报错了,通过查看官方issue得知最高版本不能高于r14。后来使用android-ndk-r10e-linux-x86_64.zip成功通过编译了。

扫描二维码关注公众号,回复: 5548580 查看本文章

同样将ndk压缩包拷贝到你想要存放的目录下,执行如下命令:

unzip android-ndk-r10e-linux-x86_64.zip

然后配置sdk和ndk路径。打开.vim ~/.bashrc

#set path ofANDROID_SDK and ANDROID_NDK
export ANDROID_SDK=/home/liuz4/Android/Sdk

export ANDROID_NDK=/home/liuz4/WorkDir/Android/android-ndk-r10e
export PATH=$ANDROID_NDK:$PATH

然后执行命令:source ~/.bashrc 。这样sdk和ndk就安装好了。

2、安装git、make、yasm

sudo apt-get update
sudo apt-get install git
sudo apt-get install yasm
sudo apt-get install make

3、编译步骤。具体可以查看官网(https://github.com/Bilibili/ijkplayer)说明。

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.8.8

./init-android.sh

cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

cd ..
./compile-ijk.sh all

这里需要注意的是,上面的ndk解压时,不能用sudo,否则在执行compile-ffmpeg.sh时,会提示ndk版本太低。

2、使用编译成功的ijkplayer库。

上面如果编译成功了,会生成ijkplayer-android/android/ijkplayer。将该目录整个拷贝出来,导入到Android studio。由于我使用的是虚拟机,直接拷贝文件夹会失败。需要先压缩后,拷贝出来再解压缩。

ijkplayer目录实际上就是一个project。直接用Android studio,File->open 导入进行编译,编译成功后,导入手机,选择手机上的视频文件进行播放。到这里即可验证我们成功编译了ijkplayer。

由于官方的demo比较多,如果需要自己创建一个精简demo。可以通过如下步骤创建 一个自己demo。

ijkplayer中包含了如下几个目录。其中,ijkplayer-arm64,ijkplayer-armv5,ijkplayer-armv7a,ijkplayer-x86,ijkplayer-x86_64是不同体系架构的动态链接库。通常我们使用的是ijkplayer-armv7a这个目录的架构。

1、新建工程,将你需要的平台so库拷贝到libs目录下。

2、再将编译后的ijkplayr工程目录下的ijkplayer-java/build/outputs/arr/ijkplayer-java-release.arr也复制到新建工程文件的libs目录下。

3、 修改新建工程app模块下的build.gradle文件

4、程序代码:

public class ijkPlayerSimpleTest extends AppCompatActivity implements SurfaceHolder.Callback{
    private IjkMediaPlayer mPlayer;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ijk_player_simple_test);
        initSurfaceView();
        initPlayer();
    }
    private void initSurfaceView(){
        SurfaceView surfaceView = (SurfaceView)findViewById(R.id.surfaceView);
        surfaceView.getHolder().addCallback(this);
    }
    private void initPlayer(){
        IjkMediaPlayer.loadLibrariesOnce(null);
        IjkMediaPlayer.native_profileBegin("libijkplayer.so");
        mPlayer = new IjkMediaPlayer();
        try {
            String path = Environment.getExternalStorageDirectory().getPath() + "/20180730.mp4";
            mPlayer.setDataSource(path);

        } catch (IOException e) {
            e.printStackTrace();
        }
        mPlayer.prepareAsync();
        mPlayer.start();
    }
    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {
        //将所播放的视频图像输出到指定的SurfaceView组件
        mPlayer.setDisplay(surfaceHolder);
    }

    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {

    }
}

5、布局文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <SurfaceView
        android:id="@+id/surfaceView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</android.support.constraint.ConstraintLayout>

这里直接使用SurfaceView进行播放视频,如果要使用ijkVideoView控件,请参考官方demo进行移植。

更多流媒体资讯,请关注小牛安卓干货铺,将进行不定期推送。

猜你喜欢

转载自blog.csdn.net/liuzhi0724/article/details/81394498