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

  1. homebrew安装教程

  2. 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
  1. yasm 下载 sudo apt-get install yasm

参照资料:https://blog.csdn.net/u014614038/article/details/78350324

编译Android的ijkplayer

以下内容大多数来自参考资料,小部分是自己添加。会以斜体字进行区分。
编译过程:

  1. 切换到你想要保持的目录下(最终编译文件会比较大,注意空间要足够,我就吃亏了次)
  2. 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
  1. 进入到ijkplayer-android目录,执行下面代码,这个过程需要下ffmpeg文件,大概两三百MB。
./init-android.sh

注意:因为国内网络原因你可能会遇到 init-android.sh 失败问题,多试一试几次就可以了。最好确保每一个每一个包都下载成功了,它下载的时候可能会出现几个包没有下载到的现象,下载的时候注意留心看,如果由某个包没有下载到,就多执行几次。)

  1. 进入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"#添加
  1. cd android/contrib 进入,执行:
    清除旧的编译记录与文件 ./compile-ffmpeg.sh clean
    执行ffmpeg,这个过程比较久,耐心点 ./compile-ffmpeg.sh all若需要 h264请先看第8点

  2. 编译so文件
    进入android目录 编译所有so文件

cd .. 
./compile-ijk.sh all
  1. 编译后Harmony需要的是arm64的的.os文件在
    ijkplayer/ijkplayer-arm64/src/main/libs/arm64-v8a 这个路径下
    在这里插入图片描述

  2. 添加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

以下内容基于官方文档和自己的实践。

  1. 下载安装(自行百度)
    在这里插入图片描述

  2. 安装OpenHarmony的ijkplayer样例包
    https://gitee.com/openharmony-tpc/ijkplayer/tree/master
    在这里插入图片描述

  3. 用IDE打开( 注意第一次打开可能会加载grade什么的很久,耐心等待。可能会加载失败,删除掉整个目录重新加载就行,多试几次。)
    在这里插入图片描述

  4. 将编译好的 libijkffmpeg.so 放入到这个目录下
    在这里插入图片描述
    导入 .os 时,可能会有下面这个读条,或者其它形式的读条,耐心等待即可。
    在这里插入图片描述
    注意: 在IDE中导入hos工程,在自动生成的local.properties中配置native.dir为2.0.1.95,目前不要使用最新的默认NDK版本。
    (2021-08-28写) 你看到这篇文章时,是否可支持更新版本,请自行去官网查阅。
    在这里插入图片描述

  5. 导入完成后,点击Build->Build Hap(s)/APP(S)->Build Hap(s)
    在这里插入图片描述
    耐心等待编译
    在这里插入图片描述
    成功完成如下:
    在这里插入图片描述
    编译成功后会在ijkplayer_so/intermediates/cmake/对应指令集(如arm64-v8a,arm64-v7a)中,libc++.so ,libijksdl.so ,libijkplayer.so,这些文件是cmake编译生成的文件(先记住它的位置,不要动它)
    在这里插入图片描述

  6. 点击右侧 gradle命令->ijkplayer_hos->ijkplayer->ohos:debug->generateDebugClassesJar
    在这里插入图片描述
    在ijkplayer/build/intermediates/javac/debug/下生成classes.jar
    在这里插入图片描述

  7. 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来自公司提供,所以不方便分享,还请谅解。)

  1. 将上面生成的放 entry/libs/(你所以要用的模块下)
    在这里插入图片描述
  2. 重建依赖
    在这里插入图片描述
  3. 用VLC生流
    VLC生流使用参考链接
    在这里插入图片描述
    在这里插入图片描述

转载请注明出处,十分感谢!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐