最近有机会又重新捡起了视频播放器这个难啃的骨头,回顾一下,发现忘了好多。。。借着这次机会,希望可以把ijkplayer整体梳理一遍,也可以帮助新手快速入门ijkplayer这个神秘的殿堂
ijkplayer是什么
ijkplayer是bilibili开源的视频播放器,底层基于FFMPEG,经过jni层封装,在应用层提供与Android原生MediaPlayer相同的适配接口。
总体上看,在应用层使用IjkPlayer与原生的MediaPlayer基本无差别;但IjkPlayer的优势在于,它不再依赖Android系统支持的编码格式,(参见Android原生支持的编码格式)而是基于FFMPEG自己维护了视频编解码,可以说覆盖了Android大部分的机型和系统,这一点对于饱受碎片化扎心的Android开发者来说是非常好的体验(当然这是要增加包大小的)
介绍完成,下边开始从pull代码编译开始逐步扒开ijkplayer的面纱
准备工作
首先从github上pull代码(github传送门)
按照github内的步骤,安装homebrew、git、yasm(已安装过的忽略)
准备工作其实就这些,接下来就要开始进行编译了
编译过程
操作流程请按照github上的步骤进行,本部分仅是对编译过程进行详细拆分和解读
编译一共分为以下几步
- 配置ijkplayer支持的音视频编解码格式
- 下载参与编译的库(FFmpeg、libyuv、soundtouch)
- 编译FFmpeg
- 编译ijkplayer
第一步——配置支持的编码格式
# config/module-lite-hevc.sh
# 可以看到一些ffmpeg配置的编码格式
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-decoders"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=aac"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=aac_latm"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=flv"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=h263"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=h263i"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=h263p"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=h264"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mp3*"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=vp6"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=vp6a"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=vp6f"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=hevc"
第二步——下载参与编译的必要库