前言
系统:UBUNTU 16.04桌面版
编译步骤,主要还是参考README.md中Build Android的描述
Android/iOS video player based on FFmpeg n3.2, with MediaCodec, VideoToolbox support.
优势:
基于 FFmpeg,表明几乎支持任何的协议
基于MediaCodec, VideoToolbox,表明支持硬件解码
1.下载软件
2.软件安装
2.1.安装OPENJDK
sudo apt-get install openjdk-8-jre-headless
2.2.SDK安装
SDK
解压下载好的SDK压缩包,执行tools/android脚本启动android sdk manager下载最新的Android SDK Tools和Android SDK Platform-tools和Android SDK Build-tools
2.3.配置环境
打开文件/etc/profile,在文件末尾加入以下内容:
export ANDROID_SDK=/home/sugao/Android/Sdk
export ANDROID_NDK=/home/sugao/Android/Ndk-r14b
export PATH=${ANDROID_SDK}/platform-tools:$PATH
export PATH=${ANDROID_SDK}/tools:$PATH
export PATH=${ANDROID_NDK}:$PATH
2.5.环境生效
source /etc/profile
2.6.环境检测
adb -version
2.7.安装其他软件
sudo apt-get update
sudo apt-get install git
sudo apt-get install yasm
3.下载ijkplayer
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer
4.编译
./init-android.sh
4.1.编译openssl
cd android/contrib
./compile-openssl.sh clean
./compile-openssl.sh all
4.2.编译ffmpeg
cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
注意:FFMPEG的配置文件在config/module.sh
4.3.编译ijkplayer native代码
cd ..
./compile-ijk.sh all
4.4.库文件
在android/ijkplayer/ijkplayer-xxxx/src/main/libs/armeabi-v7a目录中有对应的库文件(libijkffmpeg.so,libijkplayer.so,libijksdl.so)。
全平台库文件下载链接
5.运行DEMO
1.导入DEMO
点击ANDROID-STUDIO中的File->New->Improt Project导入android/ijkplayer
根据ANDROID-STUDIO的版本,修改build.gradle中ext配置
ext {
compileSdkVersion = 23 // depending on your sdk version
buildToolsVersion = "23.0.0" // depending on your build tools version
targetSdkVersion = 23 // depending on your sdk version
}
2.运行DEMO
DEMO程序APK下载链接
6.整体评测
6.1.DEMO评测
- DEMO首页界面:已包含本地文件浏览和播放,sample列表和播放以及设置界面,功能已相当丰富;
- DEMO播放界面:包括Player(使用的播放器:AndroidMediaPlayer,IjkMediaPlayer),Render(图像渲染:none,SurfaceView,TextureView),Scale(比例:16:9,4:3,aspect),Info(流信息)和Tracks(音视频轨道,且可选择播放那些轨道) ,并且具有
- DEMO普通设置:是否使能后台播放,设置播放引擎(AndroidMediaPlayer,IjkMediaPlayer,IjkExoMediaPlayer)
- DEMO视频设置:是否使用MediaCodec编解码,是否使用MediaCodec的自动旋转,是否使用MediaCodec处理分辨率变化,像素格式
- DEMO音频设置:是否使用OpenSL ES接口
- DEMO渲染设置:略
- DEMO麦克风设置:是否使用MediaDataSource接口;
6.2.性能评测
标清播放问题不大,但高清可能出现音视频不同步;
TS流播放加载时间太长,切台效果不佳;
7.错误整理
7.1.ADV启动错误
错误信息:
下午3:08 Executing tasks: [:ijkplayer-example:assembleAll32Debug]
下午3:08 Emulator: libGL error: unable to load driver: nouveau_dri.so
下午3:08 Emulator: libGL error: driver pointer missing
下午3:08 Emulator: libGL error: failed to load driver: nouveau
下午3:08 Emulator: libGL error: unable to load driver: swrast_dri.so
下午3:08 Emulator: libGL error: failed to load driver: swrast
下午3:08 Emulator: X Error of failed request: BadValue (integer parameter out of range for operation)
下午3:08 Emulator: Major opcode of failed request: 155 (GLX)
下午3:08 Emulator: Minor opcode of failed request: 24 (X_GLXCreateNewContext)
下午3:08 Emulator: Value in failed request: 0x0
下午3:08 Emulator: Serial number of failed request: 33
下午3:08 Emulator: Current serial number in output stream: 34
下午3:08 Emulator: Process finished with exit code 1
解决办法:
使用sudo apt list "*nvidia-[0-9][0-9][0-9]"获取NVIDIA显卡驱动版本,然后安装相应驱动(sudo apt install nvidia-375),重启电脑即可