前言
近段时间项目开发中需要视频播放器,于是开始搜索相关资料了解到ijkplayer是一个很不错的开源的轻量级视频播放器,
支持播放本地网络视频,也支持流媒体播放。是Bilibili基于ffmpeg开发的,支持Android&iOS。
虽然Vitamio也很强大,但只是面对个人开放,就pass好了,接下来就直接进入主题。
准备环境
Ubuntu 18.04.1
至于怎么在虚拟机中安装Ubuntu就不说了,百度有一堆教程[手动捂脸]
1.下载SDK、jdk、ndk 并配置环境
jdk 1.8.0_191
ndk r14b
用vim 打开profile文件配置环境变量vim /etc/profile
如下:
1 | #java |
保存文件并退出然后执行下面的命令让配置生效source /etc/profile
测试环境是否已经配置好,执行如下命令
1 | java -version |
1 | ndk-build -v |
1 | android |
如果git 和yasm没有安装的话需要执行下面的命令进行安装
1 | apt-get install git |
2.下载ijkplayer源码
1 | git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android |
3.初始化android并开始编译ijkplayer-Android
1 | cd ijkplayer-android |
初始化过程会耗费不少时间,需要从网上拉取代码
此外如果视频播放需要支持Https协议,需要执行如下命令./init-android-openssl.sh
4.配置模式
在 ijkplayer-android/config 目录下官方提供了三个编译FFmpeg的配置文件模板给我们使用:
- module-default.sh:默认,最后生成的文件同时支持ts格式的视频,例如一些电视台的m3u8 格式
- module-lite-hevc.sh:相对于module-lite.sh多了hevc功能
- module-lite.sh:如果你更喜欢较小的二进制大小的编解码器/格式,不支持ts格式的视频
如果需要支持直播流(rstp\rtp)、rmvb支持等等,可在模板文件中添加相应的配置,并替换原有的module.sh
下面就module-lite.sh 文件添加相关配置进行演示
打开该文件,找到export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=rtp"
修改为以下,就可以打开rtsp协议了。export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp"
然后继续添加以下一行,打开rtsp音视频分离器export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp""
然后执行以下命令,连接配置文件
- 为避免出现缺少ID为8的codec的错误*,还需要添加下面代码
1 | export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mjpeg" |
添加mkv、rmvb支持
1 | export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-muxer=matroska |
然后通过如下命令重新产生module.sh文件
1 | rm module.sh |
5.开始编译
编译之前先执行下命令清除一下
1 | cd android/contrib |
- 编译各个平台openssl
./compile-openssl.sh all
- 编译各个平台ffmpeg
./compile-ffmpeg.sh all
- 编译各个平台ijkplayer
1 | cd ../ |
如果在编译过程中出现类似于以下错误,很有可能是没有安装python,
可通过apt install python
命令来安装就行了,接着在编译就OK了
1 | build on Linux x86_64 |