其他分享
首页 > 其他分享> > 直播技术总结(二)ijkplayer的编译到Android平台并测试解码库

直播技术总结(二)ijkplayer的编译到Android平台并测试解码库

作者:互联网



前言:ijkplayer,是b站工程师开源的播放器框架,基于FFmpeg及MediaCodec,内部实现软解及硬解的功能,对于没有自研底层播放器的公司,用它确实是比较合适了。关于介绍可以直接看:https://github.com/Bilibili/ijkplayer,今天主要是对ijkplayer进行编译在Android平台上运行。

首先看下效果图: 
图如下: 

图片

 


编译过程:在mac上进行编译这个库 
先clone一份源码到本地:


图片

图片

编译ffmpeg

./init-android.sh  
# 初始化ijkplayer中和android相关,
如果是在iOS,这是就是./init-ios.sh
cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all #编译ffmpeg

图片

囧,发现pro上没有配置ndk环境。

图片

下载ndk,还好在《手把手图文并茂教你用Android Studio编译FFmpeg库并移植》中,我把ndk-10e存到云盘中。

图片

不过并没有这么顺利, 在解压过程中出现Permission denied。 
这时要改下权限,执行命令 chmod a+x ./android-ndk-r10e-mac-x86_64.bin

图片

配置ndk环境

图片

ndk-build测试

图片

重新回到编译ffmpeg的过程: 
依旧执行:./compile-ffmpeg.sh all,得到如下所示 
图片
编译结束时如下:

图片

最终,在crontrib目录下,会出现编译so所需要的各平台文件,如arm,x86。也可以指定平台,编译。

图片

最后执行如下命令,让ijkplayer和ffmpeg打成so库及demo工程:

cd .../compile-ijk.sh all

图片

执行完毕后,就会出现一个ijkplayer文件夹,为studio工程,里面包含各平台so库。导入android studio,就可以运行demo工程。

图片

导入Android Studio,example工程运行到模拟器上:

图片

点击Sample,进入播放测试

图片

最后我们编译它,不是用来看看demo就完了的。我们可以改c代码,并且按如上方式重新编译成so库,如果要在其他工程中使用的话。xml中引用如下:

<tv.danmaku.ijk.media.example.widget.media.IjkVideoView
            
android:id="@+id/video_view"            
android:layout_width="match_parent"            
android:layout_height="match_parent"            
android:layout_gravity="center"/>


在你的Java代码中加入如下一些初始化条件就可以啦。

videoView = (IjkVideoView) findViewById(R.id.videoview);
        
// init player IjkMediaPlayer.loadLibrariesOnce(null);        
IjkMediaPlayer.
native_profileBegin("libijkplayer.so");

videoView.setVideoURI(Uri.parse(mUrl));

videoView.setOnPreparedListener(
new IMediaPlayer.OnPreparedListener() {      
@Override      
public void onPrepared(IMediaPlayer mp) {          
videoView.start();      
}
});



标签:ndk,ffmpeg,ijkplayer,解码,编译,Android,android,bash
来源: https://blog.51cto.com/u_15127656/2803032