ijkplayer编译-RTSP
作者:互联网
1.编译平台和版本
- 使用操作系统 Ubuntu 18.04
- 使用ndk版本:android-ndk-r14b-linux-x86_64.zip (使用r17c编译会报错)
- AS版本:4.2.2
1.1 安装git:
sudo apt install git
1.2 配置java环境:
解压JDK:
sudo tar -zxvf jdk-8u221-linux-x64.tar.gz -C /opt
配置环境变量:
sudo gedit /etc/profile
文末添加
export JAVA_HOME=/opt/jdk1.8.0_221
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
同步:
source /etc/profile
1.3 配置SDK的环境变量
export PLATFORM_TOOLS=/opt/sdk/platform-tools
export PATH=$PATH:$PLATFORM_TOOLS
1.4 配置NDK的环境变量
export ANDROID_NDK=/opt/android-ndk-r14b
export PATH=$PATH:$ANDROID_NDK
2. 编译ijkplayer
由于github非常慢,可以使用gitee的极速下载仓库:https://gitee.com/mirrors/ijkplayer.git
2.1 下载ijkplayer
使用命令git clone https://gitee.com/mirrors/ijkplayer.git ijkplayer-android
git clone https://gitee.com/mirrors/ijkplayer.git ijkplayer-android
```shell
执行命令
```shell
cd ijkplayer-android
# 用最新的稳定版本
git checkout -B k0.8.8
2.2 执行init-android脚本
从github下载ffmpeg、libyuv超级慢,这里改成码云的链接
init-android.sh的FFmpeg.git改为https://gitee.com/yuazhen/FFmpeg.git
如果我们只想编译armv7a的版本(修改init-android.sh)
init-android-libyuv.sh的改为:https://gitee.com/yuazhen/libyuv.git
然后再执行init-android.sh
./init-android.sh
2.3 初始化openssl支持https
先修改文件init-android-openssl.sh,将对应的openssl链接改为码云链接。
IJK_OPENSSL_UPSTREAM=https://gitee.com/yuazhen/openssl.git
IJK_OPENSSL_FORK=https://gitee.com/yuazhen/openssl.git
如果我们只想编译armv7a的版本(修改init-android-openssl.sh)
然后在执行
./init-android-openssl.sh
2.4 配置编码器格式支持
在module-default.sh最底部增加以下两行
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib”
默认为最少支持,如果足够你使用,可以跳过这一步,否则可以改为以下配置:
module-default.sh更多的编解码器/格式,同时支持ts格式的视频,例如一些电视台的m3u8 格式
module-lite-hevc.sh较少的编解码器/格式(包括 hevc)
module-lite.sh较少的编解码器/格式(默认情况)
==========================================================
1.如果您喜欢更多编解码器/格式
cd config // 进入config目录
rm module.sh // 删除module.sh脚本
ln -s module-default.sh module.sh // 指定默认脚本软连接到module.sh
source module.sh // 重新执行刚修改的文件初始化,使之立即生效
2.如果您希望使用较小的编解码器/格式来获得较小的二进制大小(包括hevc函数)
cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
source module.sh
3.如果您希望使用较小的编解码器/格式来获得较小的二进制大小(默认情况下)
cd config
rm module.sh
ln -s module-lite.sh module.sh
source module.sh
这里我们就选择第1个,不要问我为什么,小朋友都知道越多越好
然后修改 module-default.sh,在文件末尾追加如下两行
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib"
2.5 支持rtsp
默认的ijkplayer并不支持rtsp流的播放,因为在编译ffmpeg的时候并没有开启rtsp的demuxer,所以在编译ffmpeg的时候需要开启rtsp的demuxer
cd ijkplayer-android/config
vim module-lite.sh // 如果没有配置2.4步骤,则在这个脚本添加,否则在module-default.sh添加
#在相关地方加入如下两行代码
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"
3 编译
3.1 编译openssl
# 进入android/contrib目录
cd android/contrib
# 清除openssl的编译文件
./compile-openssl.sh clean
# 编译openssl
./compile-openssl.sh armv7a
./compile-openssl.s`h后跟 all表示编译所有CPU架构的so库,如果只编译指定CPU架构的so库,后面就跟CPU架构,比如:
./ compile-ffmpeg.sh armv7a`
3.2 编译ffmpeg
cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh armv7a
3.3 编译ijkplayer
cd ..
./compile-ijk.sh clean
./compile-ijk.sh armv7a
稍作等待ing...编译成功后,当前目录下的ijkplayer的里面的库和文件就更新了。导出ijkplayer项目作为library依赖就可以了。
注意
编译的时候有可能会报错,例如我就遇到了ERROR:Failed to create toolchain
,这个是因为没有安装python,可以参考
ijkplayer 编译 遇到的几个问题
4 使用编译成功的ijkplayer库
上面如果编译成功了,会生成ijkplayer-android/android/ijkplayer
。将该目录整个拷贝出来,导入到Android studio。
ijkplayer目录实际上就是一个project。直接用Android studio,File->open 导入进行编译,编译成功后,导入手机,选择手机上的视频文件进行播放。到这里即可验证我们成功编译了ijkplayer。
4.1 导入到自己的项目工程中
-
将你需要的平台so库拷贝到libs目录下。
-
再将编译后的ijkplayr工程目录下的
ijkplayer-java/build/outputs/arr/ijkplayer-java-release.arr
也复制到新建工程文件的libs目录下。 -
修改新建工程app模块下的build.gradle文件
-
接下来就可以在项目中使用IjkMediaPlayer了
参考资料
ijkplayer支持播放rtsp、jpeg、gif
ijkplayer-android编译与使用说明
记一次ijkplayer编译旅程
编译ijkplayer-android
ijkplayer开启rtsp,并且支持录制和截图功能
标签:ijkplayer,RTSP,module,编译,sh,export,android 来源: https://www.cnblogs.com/zuojie/p/16457739.html