ijkplayer编译脚本解析(一)

源码下载编译,脚本里除去源码下载部分,编译部分如下


./init-android.sh
​
cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
​
cd ..
./compile-ijk.sh all

这里想知道init-android.sh、compile-ffmpeg.sh、compile-ijk.sh都干了啥。

 

1. init-android.sh

主要做了3件事

1. clone ffmpeg,并在android/contrib/目录下创建多份ffmpeg源码(根据架构"armv5"、"armv7a"、"arm64"、"x86"、"x86_64")

2. 准备ffmpeg config参数

3. 准备libyuv以及soundtouch源码

1.1 clone ffmpeg

    这里涉及两个工具,为方便弄懂init-android.sh, 我先说明下他们的大概用途,具体脚本我会附在后边。

    tools/pull-repo-base.sh:从远程git服务器拉取更新代码工具

    tools/pull-repo-ref.sh:加快clone同一个项目到新目录


# IJK_FFMPEG_UPSTREAM=git://git.videolan.org/ffmpeg.git
IJK_FFMPEG_UPSTREAM=https://github.com/Bilibili/FFmpeg.git
IJK_FFMPEG_FORK=https://github.com/Bilibili/FFmpeg.git
IJK_FFMPEG_COMMIT=ff4.0--ijk0.8.8--20201130--001
IJK_FFMPEG_LOCAL_REPO=extra/ffmpeg
​
set -e
TOOLS=tools
​
git --version
​
echo "== pull ffmpeg base =="
sh $TOOLS/pull-repo-base.sh $IJK_FFMPEG_UPSTREAM $IJK_FFMPEG_LOCAL_REPO
​
function pull_fork()
{
    echo "== pull ffmpeg fork $1 =="
    sh $TOOLS/pull-repo-ref.sh $IJK_FFMPEG_FORK android/contrib/ffmpeg-$1 ${IJK_FFMPEG_LOCAL_REPO}
    cd android/contrib/ffmpeg-$1
    git checkout ${IJK_FFMPEG_COMMIT} -B ijkplayer
    cd -
}
​
#1. clone ffmpeg,并在android/contrib/目录下创建多份ffmpeg源码
#根据架构"armv5"、"armv7a"、"arm64"、"x86"、"x86_64"

pull_fork "armv5"
pull_fork "armv7a"
pull_fork "arm64"
pull_fork "x86"
pull_fork "x86_64"
​
#2. 准备ffmpeg config参数
./init-config.sh
#3. 准备libyuv以及soundtouch源码
./init-android-libyuv.sh
./init-android-soundtouch.sh

涉及的两个工具脚本:

#tools/pull-repo-base.sh

#! /usr/bin/env bash
​
REMOTE_REPO=$1
LOCAL_WORKSPACE=$2
​
#判断$1或者$2为空 报错
#如果$2存在,拉取远程最新代码
if [ -z $REMOTE_REPO -o -z $LOCAL_WORKSPACE ]; then
    echo "invalid call pull-repo.sh '$REMOTE_REPO' '$LOCAL_WORKSPACE'"
elif [ ! -d $LOCAL_WORKSPACE ]; then
    git clone $REMOTE_REPO $LOCAL_WORKSPACE
else
    cd $LOCAL_WORKSPACE
    git fetch --all --tags
    cd -
fi


#tools/pull-repo-ref.sh


#! /usr/bin/env bash
​
REMOTE_REPO=$1
LOCAL_WORKSPACE=$2
REF_REPO=$3
# $1 $2 $3不能为空
# --reference加快克隆速度,如果本地有从本地clone
# 如果工程存在,则拉取最新代码
if [ -z $1 -o -z $2 -o -z $3 ]; then
    echo "invalid call pull-repo.sh '$1' '$2' '$3'"
elif [ ! -d $LOCAL_WORKSPACE ]; then
    git clone --reference $REF_REPO $REMOTE_REPO $LOCAL_WORKSPACE
    cd $LOCAL_WORKSPACE
    git repack -a
else
    cd $LOCAL_WORKSPACE
    git fetch --all --tags
    cd -
fi

1.2  准备ffmpeg config参数

init-config.sh:module.sh存储了ffmpeg configure相关的配置,这个后面编译ffmpeg时候会用到

if [ ! -f 'config/module.sh' ]; then
    cp config/module-lite.sh config/module.sh
fi

1.3 准备libyuv以及soundtouch源码

init-android-libyuv.sh:拉取最新代码到本地REPO

再从本地REPO更新到ijkmedia/ijkyuv目录

这里有两层概念,一层是缓存层,负责与远程服务器同步,一层是本地依赖的源码,是适配不同的tag,可自由切换到脚本想要的提交


IJK_LIBYUV_UPSTREAM=https://github.com/Bilibili/libyuv.git
IJK_LIBYUV_FORK=https://github.com/Bilibili/libyuv.git
IJK_LIBYUV_COMMIT=ijk-r0.2.1-dev
IJK_LIBYUV_LOCAL_REPO=extra/libyuv
​
set -e
TOOLS=tools
​
echo "== pull libyuv base =="
sh $TOOLS/pull-repo-base.sh $IJK_LIBYUV_UPSTREAM $IJK_LIBYUV_LOCAL_REPO
​
echo "== pull libyuv fork =="
sh $TOOLS/pull-repo-ref.sh $IJK_LIBYUV_FORK ijkmedia/ijkyuv ${IJK_LIBYUV_LOCAL_REPO}
cd ijkmedia/ijkyuv
git checkout ${IJK_LIBYUV_COMMIT}
cd -

init-android-soundtouch.sh与init-android-libyuv.sh雷同,不再粘代码了。

 

2. android/contrib/compile-ffmpeg.sh

编译各个架构的ffmpeg,这里面脚本写的很多,主要功能就是编译各个架构的ffmpeg。这里不需要细看,不过我也把代码粘过来了,大概看下就行了。网上编译ffmpeg的脚本很多,可借鉴学习下。


#----------
UNI_BUILD_ROOT=`pwd`
FF_TARGET=$1
FF_TARGET_EXTRA=$2
set -e
set +x
​
FF_ACT_ARCHS_32="armv5 armv7a x86"
FF_ACT_ARCHS_64="armv5 armv7a arm64 x86 x86_64"
FF_ACT_ARCHS_ALL=$FF_ACT_ARCHS_64
​
#打印支持的所有架构,和当前所编译的所有架构
echo_archs() {
    echo "===================="
    echo "[*] check archs"
    echo "===================="
    echo "FF_ALL_ARCHS = $FF_ACT_ARCHS_ALL"
    echo "FF_ACT_ARCHS = $*"
    echo ""
}
​
echo_usage() {
    echo "Usage:"
    echo "  compile-ffmpeg.sh armv5|armv7a|arm64|x86|x86_64"
    echo "  compile-ffmpeg.sh all|all32"
    echo "  compile-ffmpeg.sh all64"
    echo "  compile-ffmpeg.sh clean"
    echo "  compile-ffmpeg.sh check"
    exit 1
}
​
echo_nextstep_help() {
    echo ""
    echo "--------------------"
    echo "[*] Finished"
    echo "--------------------"
    echo "# to continue to build ijkplayer, run script below,"
    echo "sh compile-ijk.sh "
}
#----------
case "$FF_TARGET" in
    "")
        echo_archs armv7a
        sh tools/do-compile-ffmpeg.sh armv7a
    ;;
    armv5|armv7a|arm64|x86|x86_64)
        echo_archs $FF_TARGET $FF_TARGET_EXTRA
        sh tools/do-compil
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值