最近需要ijkplayer的so库能够解avi封装的视频,网上下载的都没能用上,不知道是不是因为版本的问题,所以自己只好试着编译。
一.准备工作主要步骤:
1.安装Ubuntu虚拟机,网上有教程,我的Ubuntu虚拟机版本是14.04。
2.安装并配置jdk,sdk,ndk,没安装配置的可参考我的安装步骤来,点击:Ubuntu-14.04虚拟机下配置jdk,sdk,ndk环境
3.官网上说要安装homebrew,git,yasm
我的homebrew是根据:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
git和yasm是根据sudo apt-get install git和sudo apt-get install yasm命令安装的。
二.环境搭建好之后,拉取ijkplayer的代码:
新建Downloads目录,进入该目录,在Terminal中输入:git clone https://github.com/Bilibili/ijkplayer.git
然后进入根目录ijkplayer
在Terminal中输入:
git checkout -B latest k0.8.8
因为当前版本是0.8.8,所以建一个分支,避免影响主干master上的代码。
敲入git branch 即可看到已切换到latest分支上。
然后拉取ffmpeg的源码,输入:
./init-android.sh
注:拉取源码的过程相当长,我拉的时候失败了N多次,当时已经急的想要在Windows下拉取,再放到虚拟机里,可是发现找不到ffmpeg,最终坚持不懈,失败了不断拉取,最终成功了。
三.修改module-lite.sh文件
因为我需要可以支持播放avi的视频文件,所以我修改了的module-lite.sh这个文件,在最后添加了:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp"//修改
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=tcp"//添加
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"//添加
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mjpeg"//添加
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mjpeg"//添加
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=avi"
四.编译
1.进入ijkplayer/config目录下
rm module.sh
ln -s module-lite.sh module.sh
2.回到ijkplayer目录下
cd android/contrib
/** 编译前先clean下 **/
./compile-ffmpeg.sh clean
/** 编译ffmpeg ,如果在./compile-ffmpeg.sh后加了all,表示编译各种环境下的so库,不加all只会编译armv7a环境下的库,我只需要armv7a,所以没加all **/
./compile-ffmpeg.sh
注:如果步骤1用的是module-default.sh,也是可以的,但是需要在modeule-default.sh的最后加入:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
3.回到ijkplayer/android目录下
运行./compile-ijk.sh 来编译ijkplayer,没加all是因为我不需要那么多。
完了后就可以在/ijkplayer/android/ijkplayer/ijkplayer-armv7a/src/main/libs/armeabi-v7a下找到编译好的库。
可以点击https://download.youkuaiyun.com/download/asla_1/10421247下载
PS:关于ffmpeg的使用,稍微记录下一点点
在ffmpeg的官网下载后,首先配置环境变量,我是Windows系统,需要把bin目录配置到Path路径下。
关于ffmpeg转换视频格式的命令:
1. ffprobe input.mp4
查看视频信息
2. ffmpeg -i input.mkv output.avi
把mkv格式封装的视频转成avi封装格式,但是视频编解码的格式会变
3. ffmpeg -i input.mp4 -c:v libx265 output.avi
把mp4封装的视频转成h265编码,avi封装的格式