最近公司准备开发关于视频的应用,要支持很多格式 解码视频,准备使用谷歌官方播放器时候,发现很多编码格式支持不了,寻找开发app 推荐b站的开源项目ijkplayer项目,当时对比两个比较火热的播发器项目:
Vitamio:自用免费,商用收费,需要收费就排除了;
ijkplayer:B站开源的基于FFmpeg的轻量级 Android/iOS视频播放器,看博客很多人使用,遇到问题也好搜索查找
后面决定开始使用一些ijkplayer
使用IJKplayer
官网:https://github.com/Bilibili/ijkplayer
build.gradle添加下述依赖引用即可【其实 github 官网就有了】
Android:
Gradle
# required
allprojects {
repositories {
jcenter()
}
}
dependencies {
# required, enough for most devices.
compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
# Other ABIs: optional
compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'
compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'
compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'
compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'
# ExoPlayer as IMediaPlayer: optional, experimental
compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
}
下面编译ijkplayer so 动态库
步骤一 官网里面有提到设置bash 【当前前提是linux系统编译】 这点比较重要,之前unbutu 18.04 出现编译不了,通过设置,解决的
执行 no[否]
sudo dpkg-reconfigure dash
可以通过 ll /bin/sh 指令 是否转成bash
可以参考地址:https://blog.csdn.net/gatieme/article/details/52136411 大佬写的很详细
步骤二 搭载环境【已经搭好可以不要】
1.安装工具
sudo apt-get update
brew install git
brew install yasm
2.搭建 jdk sdk ndk环境
sudo vim /etc/profile
添加
export ANDROID_JDK=
export ANDROID_SDK=
export ANDROID_NDK=
下图是我当前的路径,可以参考下
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export ANDROID_NDK=/home/fmc/work/android-ndk-r14b
export PATH=$ANDROID_NDK:$PATH
export ANDROID_SDK=/home/fmc/work/android-sdk-linux
export PATH=${PATH}:$ANDROID_SDK/tools:$PATH
添加完成后执行如下命令,让设置的环境变量生效
sudo source /etc/profile
测试环境变量是否已经设置好
执行如下命令
javac -version
ndk-build -v
出现下图信息,说明配置好了
步骤三 编译ijkplay
1.下载ijkplayer-android源码
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
2.开始编译ijkplayer-android
(1)代码拉完之后进入到ijkplayer-android目录
cd ijkplayer-android
(2)创建新的分支
git checkout -B latest k0.8.4
(3)初始化,会从网上自动拉代码,时间比较长
./init-android.sh
如果视频播放需要支持Https协议,需要执行如下命令
./init-android-openssl.sh
编译各个平台的编译openssl
cd android/contrib
./compile-openssl.sh clean
./compile-openssl.sh all
(4)编译各个平台的ffmpeg,如果需要更多的编解码格式
cd android/contrib
./compile-ffmepg.sh clean
编译各个cpu架构的ffmpeg
./compile-ffmpeg.sh all
(5)接下来,编译ijkplayer
cd ..
./compile-ijk.sh all
步骤四 导入源码
导入android 源码,使用studio File-New-Import project ./ijkplayer-android/android 目录下的 project ijkplayer导入就ok。
这里可能会遇到一些警告 高版本studio 依赖写法不一样【implementation】
这里说一下错误:Error:All flavors must now belong to a named flavor dimension.Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
解决办法:【参考地址:https://www.jb51.net/article/127673.htm】
在主app的build.gradle里面的
defaultConfig {
targetSdkVersion:***
minSdkVersion :***
versionCode:***
versionName :***
//版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号,这样维度就是都是统一的了
flavorDimensions "versionCode"
}