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

古人已用三冬足,年少今开万卷余。这篇文章主要讲述直播技术总结ijkplayer的编译到Android平台并测试解码库相关的知识,希望能为你提供帮助。
转载请把头部出处链接和尾部二维码一起转载, 本文出自逆流的鱼yuiop: http://blog.csdn.net/hejjunlin/article/details/55670380
前言: ijkplayer, 是b站工程师开源的播放器框架, 基于FFmpeg及MediaCodec, 内部实现软解及硬解的功能, 对于没有自研底层播放器的公司, 用它确实是比较合适了。关于介绍可以直接看: https://github.com/Bilibili/ijkplayer, 今天主要是对ijkplayer进行编译在android平台上运行。
首先看下效果图:
gif图如下:


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

文章图片


编译过程: 在mac上进行编译这个库
先clone一份源码到本地:
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android cd ijkplayer-android git checkout -B latest k0.7.7.1 #最新分支

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

文章图片

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

文章图片

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

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

文章图片

囧, 发现pro上没有配置ndk环境。
【直播技术总结ijkplayer的编译到Android平台并测试解码库】
直播技术总结ijkplayer的编译到Android平台并测试解码库

文章图片

下载ndk, 还好在《手把手图文并茂教你用Android Studio编译FFmpeg库并移植》中, 我把ndk-10e存到云盘中。
  • 供参考下载地址见本文最下面, 也可自行下载。
  • 用命令 ./android-ndk-r10e-mac-x86_64.bin,就可进行进行解压, 如下图:
直播技术总结ijkplayer的编译到Android平台并测试解码库

文章图片

不过并没有这么顺利, 在解压过程中出现Permission denied。
这时要改下权限, 执行命令 chmod a+ x ./android-ndk-r10e-mac-x86_64.bin
直播技术总结ijkplayer的编译到Android平台并测试解码库

文章图片

配置ndk环境
  • 启动终端Terminal
  • 进入当前用户的home目录
    • 输入cd ~ 或 /Users/YourUserName
  • 创建.bash_profile
  • 输入touch .bash_profile
  • 编辑.bash_profile文件
  • 输入open -e .bash_profile
    因为是为了配置NDK开发环境, 输入Android NDK下目录,前面是android sdk的, 可以不用动它, 最终.bash_profile文件如下:
export PATH= $PATH:/Users/hejunlin/Documents/local/apache-tomcat-7.0.72/binexport PATH= ${PATH}:/Users/hejunlin/Library/Android/sdk/tools export PATH= ${PATH}:/Users/hejunlin/Library/Android/sdk/platform-toolsexport NDK_ROOT= /Users/hejunlin/AndroidStudioProjects/android-ndk-r10e export PATH= $PATH:$NDK_ROOT#for ijkplayer export ANDROID_SDK= ${PATH}:/Users/hejunlin/Library/Android/sdk export ANDROID_NDK= ${PATH}:/Users/hejunlin/AndroidStudioProjects/android-ndk-r10e

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

文章图片

  • 保存文件, 关闭.bash_profile
  • 更新刚配置的环境变量
    • 输入source .bash_profile,让刚长配置生效
ndk-build测试
  • 找到ndk-10e中sample目录, cd hello-jni中, 执扫命令ndk-build。就会出现如下所示:
直播技术总结ijkplayer的编译到Android平台并测试解码库

文章图片

重新回到编译ffmpeg的过程:
依旧执行: ./compile-ffmpeg.sh all, 得到如下所示
直播技术总结ijkplayer的编译到Android平台并测试解码库

文章图片

本文出自逆流的鱼yuiop: http://blog.csdn.net/hejjunlin/article/details/55670380
编译结束时如下:
直播技术总结ijkplayer的编译到Android平台并测试解码库

文章图片

最终, 在crontrib目录下, 会出现编译so所需要的各平台文件, 如arm, x86。也可以指定平台, 编译。
直播技术总结ijkplayer的编译到Android平台并测试解码库

文章图片

最后执行如下命令,让ijkplayer和ffmpeg打成so库及demo工程:
cd .. ./compile-ijk.sh all

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

文章图片

执行完毕后, 就会出现一个ijkplayer文件夹, 为studio工程, 里面包含各平台so库。导入android studio, 就可以运行demo工程。
直播技术总结ijkplayer的编译到Android平台并测试解码库

文章图片

导入Android Studio, example工程运行到模拟器上:
直播技术总结ijkplayer的编译到Android平台并测试解码库

文章图片

点击Sample,进入播放测试
直播技术总结ijkplayer的编译到Android平台并测试解码库

文章图片

最后我们编译它, 不是用来看看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(); } });

第一时间获得博客更新提醒, 以及更多android干货, 源码分析, 欢迎关注我的微信公众号, 扫一扫下方二维码或者长按识别二维码, 即可关注。
直播技术总结ijkplayer的编译到Android平台并测试解码库

文章图片
如果你觉得好, 随手点赞, 也是对笔者的肯定, 也可以分享此公众号给你更多的人, 原创不易

    推荐阅读