古人已用三冬足,年少今开万卷余。这篇文章主要讲述直播技术总结ijkplayer的编译到Android平台并测试解码库相关的知识,希望能为你提供帮助。
转载请把头部出处链接和尾部二维码一起转载,
本文出自逆流的鱼yuiop:
http://blog.csdn.net/hejjunlin/article/details/55670380
前言:
ijkplayer,
是b站工程师开源的播放器框架,
基于FFmpeg及MediaCodec,
内部实现软解及硬解的功能,
对于没有自研底层播放器的公司,
用它确实是比较合适了。关于介绍可以直接看:
https://github.com/Bilibili/ijkplayer,
今天主要是对ijkplayer进行编译在android平台上运行。
首先看下效果图:
gif图如下:
文章图片
编译过程: 在mac上进行编译这个库
先clone一份源码到本地:
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.7.7.1 #最新分支
文章图片
文章图片
编译ffmpeg
./init-android.sh# 初始化ijkplayer中和android相关,
如果是在ios,
这是就是./init-ios.shcd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all #编译ffmpeg
文章图片
囧, 发现pro上没有配置ndk环境。
【直播技术总结ijkplayer的编译到Android平台并测试解码库】
文章图片
下载ndk, 还好在《手把手图文并茂教你用Android Studio编译FFmpeg库并移植》中, 我把ndk-10e存到云盘中。
- 供参考下载地址见本文最下面, 也可自行下载。
- 用命令 ./android-ndk-r10e-mac-x86_64.bin,就可进行进行解压, 如下图:
文章图片
不过并没有这么顺利, 在解压过程中出现Permission denied。
这时要改下权限, 执行命令 chmod a+ x ./android-ndk-r10e-mac-x86_64.bin
文章图片
配置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
文章图片
- 保存文件, 关闭.bash_profile
- 更新刚配置的环境变量
- 输入source .bash_profile,让刚长配置生效
- 找到ndk-10e中sample目录, cd hello-jni中, 执扫命令ndk-build。就会出现如下所示:
文章图片
重新回到编译ffmpeg的过程:
依旧执行: ./compile-ffmpeg.sh all, 得到如下所示
文章图片
本文出自逆流的鱼yuiop: http://blog.csdn.net/hejjunlin/article/details/55670380
编译结束时如下:
文章图片
最终, 在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();
}
});
第一时间获得博客更新提醒, 以及更多android干货, 源码分析, 欢迎关注我的微信公众号, 扫一扫下方二维码或者长按识别二维码, 即可关注。
文章图片
如果你觉得好, 随手点赞, 也是对笔者的肯定, 也可以分享此公众号给你更多的人, 原创不易
推荐阅读
- React Native在Android平台运行gif的解决方法
- PHP SplDoublyLinkedList offsetUnset()函数用法示例
- 文件管理器的作用是什么()
- find_elements_by_link_text()驱动程序方法– Selenium Python
- GOCC18(2020年Google在线编码挑战赛-新毕业生(印度))
- 算法题(查找多数元素|S3(位魔术))
- 8051和AVR之间有哪些区别()
- Python从给定列表中删除重复的子列表
- 8051和PIC之间有什么区别()