Jump to content
  • Hello visitors, welcome to the Hacker World Forum!

    Red Team 1949  (formerly CHT Attack and Defense Team) In this rapidly changing Internet era, we maintain our original intention and create the best community to jointly exchange network technologies. You can obtain hacker attack and defense skills and knowledge in the forum, or you can join our Telegram communication group to discuss and communicate in real time. All kinds of advertisements are prohibited in the forum. Please register as a registered user to check our usage and privacy policy. Thank you for your cooperation.

    TheHackerWorld Official

Recommended Posts

1.编译平台和版本

  • 使用操作系统 Ubuntu 18.04
  • 使用ndk版本:android-ndk-r14b-linux-x86_64.zip (使用r17c编译会报错)
  • AS版本:4.2.2

1.1 安装git:

sudo apt install git

1.2 配置java环境:

解压JDK:

sudo tar -zxvf jdk-8u221-linux-x64.tar.gz -C /opt

配置环境变量:

sudo gedit /etc/profile

文末添加

export JAVA_HOME=/opt/jdk1.8.0_221
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH

同步:

source /etc/profile

1.3 配置SDK的环境变量

export PLATFORM_TOOLS=/opt/sdk/platform-tools
export PATH=$PATH:$PLATFORM_TOOLS

1.4 配置NDK的环境变量

export ANDROID_NDK=/opt/android-ndk-r14b
export PATH=$PATH:$ANDROID_NDK

2. 编译ijkplayer

由于github非常慢,可以使用gitee的极速下载仓库:https://gitee.com/mirrors/ijkplayer.git

2.1 下载ijkplayer

使用命令git clone https://gitee.com/mirrors/ijkplayer.git ijkplayer-android

git clone https://gitee.com/mirrors/ijkplayer.git ijkplayer-android
```shell
执行命令
```shell
cd ijkplayer-android
# 用最新的稳定版本
git checkout -B k0.8.8

2.2 执行init-android脚本

从github下载ffmpeg、libyuv超级慢,这里改成码云的链接
init-android.sh的FFmpeg.git改为https://gitee.com/yuazhen/FFmpeg.git
835426-20220708093433383-1415392049.png
如果我们只想编译armv7a的版本(修改init-android.sh)
image

init-android-libyuv.sh的改为:https://gitee.com/yuazhen/libyuv.git
image

然后再执行init-android.sh

./init-android.sh

2.3 初始化openssl支持https

先修改文件init-android-openssl.sh,将对应的openssl链接改为码云链接。

IJK_OPENSSL_UPSTREAM=https://gitee.com/yuazhen/openssl.git
IJK_OPENSSL_FORK=https://gitee.com/yuazhen/openssl.git

如果我们只想编译armv7a的版本(修改init-android-openssl.sh)
image
然后在执行

./init-android-openssl.sh

2.4 配置编码器格式支持

在module-default.sh最底部增加以下两行

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib”
默认为最少支持,如果足够你使用,可以跳过这一步,否则可以改为以下配置:
module-default.sh更多的编解码器/格式,同时支持ts格式的视频,例如一些电视台的m3u8 格式
module-lite-hevc.sh较少的编解码器/格式(包括 hevc)
module-lite.sh较少的编解码器/格式(默认情况)
==========================================================
1.如果您喜欢更多编解码器/格式
cd config // 进入config目录
rm module.sh // 删除module.sh脚本
ln -s module-default.sh module.sh // 指定默认脚本软连接到module.sh
source module.sh // 重新执行刚修改的文件初始化,使之立即生效

2.如果您希望使用较小的编解码器/格式来获得较小的二进制大小(包括hevc函数)
cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
source module.sh

3.如果您希望使用较小的编解码器/格式来获得较小的二进制大小(默认情况下)
cd config
rm module.sh
ln -s module-lite.sh module.sh
source module.sh

这里我们就选择第1个,不要问我为什么,小朋友都知道越多越好
然后修改 module-default.sh,在文件末尾追加如下两行
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib"

2.5 支持rtsp

默认的ijkplayer并不支持rtsp流的播放,因为在编译ffmpeg的时候并没有开启rtsp的demuxer,所以在编译ffmpeg的时候需要开启rtsp的demuxer

cd ijkplayer-android/config
vim module-lite.sh // 如果没有配置2.4步骤,则在这个脚本添加,否则在module-default.sh添加
#在相关地方加入如下两行代码
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"

3 编译

3.1 编译openssl

# 进入android/contrib目录
cd android/contrib
# 清除openssl的编译文件
./compile-openssl.sh clean
# 编译openssl
./compile-openssl.sh armv7a

./compile-openssl.s`h后跟 all表示编译所有CPU架构的so库,如果只编译指定CPU架构的so库,后面就跟CPU架构,比如:./ compile-ffmpeg.sh armv7a`

3.2 编译ffmpeg

cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh armv7a

3.3 编译ijkplayer

cd ..
./compile-ijk.sh clean
./compile-ijk.sh armv7a

稍作等待ing...编译成功后,当前目录下的ijkplayer的里面的库和文件就更新了。导出ijkplayer项目作为library依赖就可以了。
835426-20220708102937697-104926182.png

注意
编译的时候有可能会报错,例如我就遇到了ERROR:Failed to create toolchain,这个是因为没有安装python,可以参考
ijkplayer 编译 遇到的几个问题

4 使用编译成功的ijkplayer库

上面如果编译成功了,会生成ijkplayer-android/android/ijkplayer。将该目录整个拷贝出来,导入到Android studio。
ijkplayer目录实际上就是一个project。直接用Android studio,File->open 导入进行编译,编译成功后,导入手机,选择手机上的视频文件进行播放。到这里即可验证我们成功编译了ijkplayer。
835426-20220708103400429-191412377.png

4.1 导入到自己的项目工程中

  1. 将你需要的平台so库拷贝到libs目录下。
    835426-20220708105706172-2036842684.png

  2. 再将编译后的ijkplayr工程目录下的ijkplayer-java/build/outputs/arr/ijkplayer-java-release.arr也复制到新建工程文件的libs目录下。

  3. 修改新建工程app模块下的build.gradle文件
    835426-20220708105931613-409730438.png

  4. 接下来就可以在项目中使用IjkMediaPlayer了

参考资料
ijkplayer支持播放rtsp、jpeg、gif
ijkplayer-android编译与使用说明
记一次ijkplayer编译旅程
编译ijkplayer-android
ijkplayer开启rtsp,并且支持录制和截图功能

Link to post
Link to comment
Share on other sites

 Share

discussion group

discussion group

    You don't have permission to chat.
    • Recently Browsing   0 members

      • No registered users viewing this page.
    ×
    ×
    • Create New...