重新编译ijkplayer,实现鸿蒙RTSP播放
亲测可用,并且实现了h264编码播放Linux编译环境搭建android-sdk_r24.4.1-linux.tarjdk-8u112-linux-x64.tar.gzandroid-ndk-r13b-linux-x86_64.zip编译Android的ijkplayer从Android移植到Harmony测试Linux编译环境搭建资源下载:android-sdk_r24.4.1-linux.ta
亲测可用,并且实现了h264编码播放
Linux编译环境搭建
博主的环境:
VMwave Workstation下的 ubuntu18.04
jdk-8u112-linux-x64 .tar.gz
android-ndk-r13-linux-x86_64.zip
android-sdk_r24.4.1-linux.tgz
资源下载:
android-sdk_r24.4.1-linux.tar
http://tools.android-studio.org/index.php/sdk/
android-sdk 安装教程 不完全一样,自己注意看
jdk-8u112-linux-x64.tar.gz
https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
往下拉,看清楚是JDK不是JRE
安装教程 (离线安装jdk-8u112-linux-x64)
android-ndk-r13b-linux-x86_64.zip
https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
android-ndk 安装教程 多种安装方式看清楚你要那个
安装 homebrew, git, yasm
配置完上面后还需要安装homebrew, git, yasm
-
git 用
sudo apt-get install git
下载就可以了
( 注意:git最好要升级到最新版本,不然后面有些地方好像会出问题,我这里之前出了问题,但不确定是不是git的问题
我的git版本 ) git升级参考
git --version
sudo apt-get install git
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git
- yasm 下载
sudo apt-get install yasm
参照资料:https://blog.csdn.net/u014614038/article/details/78350324
编译Android的ijkplayer
以下内容大多数来自参考资料,小部分是自己添加。会以斜体字进行区分。
编译过程:
- 切换到你想要保持的目录下(最终编译文件会比较大,注意空间要足够,我就吃亏了次)
git clone -b K0.7.6 –depth 1 https://github.com/Bilibili/ijkplayer.git ijkplayer-android
( 这里我改用了官方的,因为上面原博主的已经用不了了 )
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.8.8
- 进入到ijkplayer-android目录,执行下面代码,这个过程需要下ffmpeg文件,大概两三百MB。
./init-android.sh
( 注意:因为国内网络原因你可能会遇到 init-android.sh 失败问题,多试一试几次就可以了。最好确保每一个每一个包都下载成功了,它下载的时候可能会出现几个包没有下载到的现象,下载的时候注意留心看,如果由某个包没有下载到,就多执行几次。)
- 进入config目录,指定编译的格式与配置之类。
cd config
rm module.sh
ln -s module-default.sh module.sh
module-default.sh是默认配置,编译出来的so文件会比较大,可以使用修改了的module-little.sh。下面是添加对RTSP流的支持。(本人是用module-little来编译的,可以用 ):
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"#添加
-
cd android/contrib 进入,执行:
清除旧的编译记录与文件./compile-ffmpeg.sh clean
执行ffmpeg,这个过程比较久,耐心点./compile-ffmpeg.sh all
(若需要 h264请先看第8点) -
编译so文件
进入android目录 编译所有so文件
cd ..
./compile-ijk.sh all
-
编译后Harmony需要的是arm64的的.os文件在
ijkplayer/ijkplayer-arm64/src/main/libs/arm64-v8a
这个路径下
-
添加h264编码
在do-compile-ffmpeg.sh中加入以下进行重新编译:
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=h264"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-protocol=udp"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=h264"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-parser=h264"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-hwaccel=h264_vaapi"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-hwaccel=h264_vaapi"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-hwaccel=h264_dxva2"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=mjpeg"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=rtsp"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=rtp"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-encoder=h264"
do-compile-ffmpeg.sh 路径位于 android/contrib/tools
我添加在大概244行处
「楠之枫雪」的原创文章链接:
https://blog.csdn.net/u014614038/article/details/78350324
官方参照:
https://github.com/bilibili/ijkplayer/blob/master/README.md
https://gitee.com/openharmony-tpc/ijkplayer/blob/master/ijkplayer_hos/README.md
从Android移植到Harmony
以下内容基于官方文档和自己的实践。
-
下载安装(自行百度)
-
安装OpenHarmony的ijkplayer样例包
https://gitee.com/openharmony-tpc/ijkplayer/tree/master
-
用IDE打开( 注意第一次打开可能会加载grade什么的很久,耐心等待。可能会加载失败,删除掉整个目录重新加载就行,多试几次。)
-
将编译好的 libijkffmpeg.so 放入到这个目录下
导入 .os 时,可能会有下面这个读条,或者其它形式的读条,耐心等待即可。
注意: 在IDE中导入hos工程,在自动生成的local.properties中配置native.dir为2.0.1.95,目前不要使用最新的默认NDK版本。
(2021-08-28写) 你看到这篇文章时,是否可支持更新版本,请自行去官网查阅。
-
导入完成后,点击Build->Build Hap(s)/APP(S)->Build Hap(s)
耐心等待编译
成功完成如下:
编译成功后会在ijkplayer_so/intermediates/cmake/对应指令集(如arm64-v8a,arm64-v7a)中,libc++.so ,libijksdl.so ,libijkplayer.so,这些文件是cmake编译生成的文件(先记住它的位置,不要动它)
-
点击右侧 gradle命令->ijkplayer_hos->ijkplayer->ohos:debug->generateDebugClassesJar
在ijkplayer/build/intermediates/javac/debug/下生成classes.jar
-
libc++.so ,(在linux里面编译产生的)libijkffmpeg.so ,libijksdl.so,libijkplayer.so 和 classes.jar,这些就是需要集成到工程的。
参考文献:
https://gitee.com/openharmony-tpc/ijkplayer/blob/master/ijkplayer_hos/README.md
测试
可自行用官方给的ijkplayer example来进行测试
(用官方的是否可行我没试过,不过需要一个公网RTSP推流地址才能在模拟器跑,网上的大白兔点播地址是不能跑的这个播放器的,我测试过了。)
( 这里我用自己的demo来测试的,因为demo来自公司提供,所以不方便分享,还请谅解。)
- 将上面生成的放 entry/libs/(你所以要用的模块下)
- 重建依赖
- 用VLC生流
VLC生流使用参考链接
转载请注明出处,十分感谢!
更多推荐
所有评论(0)