• 【ijkplayer】引入Android项目


    【ijkplayer】引入Android项目(基于k0.8.8)

    编译准备

    git(Mac自带)、yasm(brew install yasm)、Android sdk(Android studio 默认)、ndk(r14b)、并配置环境变量

    ndk 环境变量

    export ANDROID_SDK=/Users/inke219223m/Library/Android/sdk/platform-tools
    export ANDROID_NDK=/Volumes/Victory/dev/android-ndk-r14b
    
    export PATH=$PATH:$ANDROID_SDK
    export PATH=$PATH:$ANDROID_NDK
    ## mac环境需要配置下面亮项
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    M1 芯片配置ndk-build

    #!/bin/sh
    # 原来的注释掉
    #DIR="$(cd "$(dirname "$0")" && pwd)"
    #$DIR/build/ndk-build "$@"
    
    # M1 build
    DIR="$(cd "$(dirname "$0")" && pwd)"
    arch -x86_64 /bin/bash $DIR/build/ndk-build "$@"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ijk 项目下载和拉取 fmpeg 代码

    # clone项目
    git clone https://github.com/Bilibili/ijkplayer.git
    
    # 进入ijkplayer-android目录
    cd ijkplayer
    
    # 切换到最新代码分支
    git checkout -B latest k0.8.8
    
    # 会检查下载ffmpeg代码 
    ./init-android.sh
    
    #初始化openSSL(使ijk编译后支持https)
    ./init-android-openssl.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    编译前选择你的配置

    官方库说明中提供了三种配置支持,每个sh脚本里有对应的配置信息,包含支持编码格式、流媒体协议类型等,如下截取一些decoders,enable标识支持该格式,disable则标识不支持。

    支持解码格式

    ./configure --list-decoders
    
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-decoders"
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=aac"
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=aac_latm"
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=flv"
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=h264"
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mp3*"
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=vp6f"
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=flac"
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=hevc"
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=vp8"
    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=vp9"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    选择配置文件,ln -s 命令标识软连接,module.sh可以直接获取module-default.sh的配置

    #If you prefer more codec/format
    cd config
    rm module.sh
    ln -s module-default.sh module.sh
    
    #If you prefer less codec/format for smaller binary size (include hevc function)
    cd config
    rm module.sh
    ln -s module-lite-hevc.sh module.sh
    
    #If you prefer less codec/format for smaller binary size (by default)
    cd config
    rm module.sh
    ln -s module-lite.sh module.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    编译

    本次编译的是 Android 项目,所以先 cd 到 android/contrib 下 执行清除命令,然后编译对于的 so 库,all 标识编译所有架构的 so,想编译 armv7a 架构则将 all 替换成 armv7a

    ./compile-openssl.sh clean #清除
    ./compile-ffmpeg.sh clean  #清除
    ./compile-openssl.sh all   #编译
    ./compile-ffmpeg.sh all    #编译
    
    • 1
    • 2
    • 3
    • 4

    生成 ijkplayer 对应架构 so 文件(all 同上输入对应架构则生成对应架构动态链接库),动态链接库生成路径如下图所示(路径示例:ijkplayer-android/android/ijkplayer/ijkplayer-armv7a/src/main/libs/armeabi-v7a)

    注意本步骤需要同意不受信任软件权限,具体参考地址

    # 注意回到android 路径下
    cd ..
    # 执行脚步生成so 文件
    ./compile-ijk.sh all
    
    • 1
    • 2
    • 3
    • 4

    到此 ijkplayer 编译完成,如果播放器之前逻辑已经写好,则直接替换项目中对应的动态链接库文件就行

    使用

    (待合成)

  • 相关阅读:
    C++ 函数的分文件编写
    Kotlin - 挂起函数 suspend
    EFK(elasticsearch+filebeat+kibana)日志分析平台搭建
    【CMAKE极简教程】不断更新中......
    Flink状态管理与恢复
    Mysql(列类型)
    Jmeter怎么实现接口关联?
    【frp】服务端配置与systemd启动
    Object.create()
    【云原生之Docker实战】使用Docker部署Mango个人漫画服务器
  • 原文地址:https://blog.csdn.net/weixin_43874301/article/details/125625130