美文网首页
ijkplayer-ios 脚本分析

ijkplayer-ios 脚本分析

作者: YannChee | 来源:发表于2021-10-26 14:24 被阅读0次

    脚本分析:

    #! /usr/bin/env bash
    
    # B站托管与github的ffmpeg分支的下载地址
    # 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
    
    #  ffmpeg版本
    IJK_FFMPEG_COMMIT=ff3.4--ijk0.8.7--20180103--001
    
    # ffmpeg下载目录
    IJK_FFMPEG_LOCAL_REPO=extra/ffmpeg
    
    # gas-preprocessor是用于编译FFmpeg的perl预处理脚本
    IJK_GASP_UPSTREAM=https://github.com/Bilibili/gas-preprocessor.git
    
    # gas-preprocessor backup
    # https://github.com/Bilibili/gas-preprocessor.git
    
    if [ "$IJK_FFMPEG_REPO_URL" != "" ]; then
        IJK_FFMPEG_UPSTREAM=$IJK_FFMPEG_REPO_URL
        IJK_FFMPEG_FORK=$IJK_FFMPEG_REPO_URL
    fi
    
    if [ "$IJK_GASP_REPO_URL" != "" ]; then
        IJK_GASP_UPSTREAM=$IJK_GASP_REPO_URL
    fi
    
    # 每个脚本都应该在文件开头加上set -e
    set -e
    
    # 定义文件目录
    TOOLS=tools
    
    # iOS6架构 iOS7架构 iOS8架构
    FF_ALL_ARCHS_IOS6_SDK="armv7 armv7s i386"
    FF_ALL_ARCHS_IOS7_SDK="armv7 armv7s arm64 i386 x86_64"
    FF_ALL_ARCHS_IOS8_SDK="arm64"
    
    # 所有架构 = iOS8架构
    FF_ALL_ARCHS=$FF_ALL_ARCHS_IOS8_SDK
    
    # 获取脚本第一个参数
    FF_TARGET=$1
    
    # 定义函数【echo_ffmpeg_version】
    function echo_ffmpeg_version() {
        #   输出 ffmpeg版本号
        echo $IJK_FFMPEG_COMMIT
    }
    
    # 定义函数【pull_common】
    function pull_common() {
        #  查看git版本
        git --version
        #   输出 "== pull gas-preprocessor base =="
        echo "== pull gas-preprocessor base =="
    
        #   执行当前文件夹下tools文件夹中的pull-repo-base.sh 并且传入两个参数(https://github.com/Bilibili/gas-preprocessor.git,extra/gas-preprocessor)下载gas-preprocessor
        sh $TOOLS/pull-repo-base.sh $IJK_GASP_UPSTREAM extra/gas-preprocessor
    
        echo "== pull ffmpeg base =="
        #   执行当前文件夹下tools文件夹中的pull-repo-base.sh 并且传入两个参数(https://github.com/Bilibili/FFmpeg.git,extra/ffmpeg),下载FFmpeg
        sh $TOOLS/pull-repo-base.sh $IJK_FFMPEG_UPSTREAM $IJK_FFMPEG_LOCAL_REPO
    }
    
    # 定义函数【pull_fork】
    function pull_fork() {
        #   输出 平台架构
        echo "== pull ffmpeg fork $1 =="
        #   执行tools文件夹下的pull-repo-ref.sh脚本 并且传入3个参数 (https://github.com/Bilibili/FFmpeg.git , ios/ffmpeg-平台架构 ,extra/ffmpeg)
        sh $TOOLS/pull-repo-ref.sh $IJK_FFMPEG_FORK ios/ffmpeg-$1 ${IJK_FFMPEG_LOCAL_REPO}
        #   进入 ffmpeg-平台架构文件
        cd ios/ffmpeg-$1
        #   切换到ffmpeg版本分支,并且强制创建新的分支ijkplayer
        git checkout ${IJK_FFMPEG_COMMIT} -B ijkplayer
        #   回到上一级目录
        cd -
    }
    
    # 定义函数【pull_fork_all】
    function pull_fork_all() {
         # 遍历FF_ALL_ARCHS,依次调用pull_fork函数
        for ARCH in $FF_ALL_ARCHS
        do
            pull_fork $ARCH
        done
    }
    
    function sync_ff_version() {
        sed -i '' "s/static const char \*kIJKFFRequiredFFmpegVersion\ \=\ .*/static const char *kIJKFFRequiredFFmpegVersion = \"${IJK_FFMPEG_COMMIT}\";/g" ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMoviePlayerController.m
    }
    
    #----------
    #   逻辑分支语句
    #   FF_TARGET => $1
    #   执行脚本的时候,没有传任何参数,因此$1 = 空
    #   case "$FF_TARGET" in => case "$1" in => case "" in
    #   不满足任何条件,执行 *) 后面的语句(执行pull_common,pull_fork_all函数)
    
    case "$FF_TARGET" in
        ffmpeg-version)
            echo_ffmpeg_version
        ;;
        armv7|armv7s|arm64|i386|x86_64)
            pull_common
            pull_fork $FF_TARGET
        ;;
        all|*)
            pull_common
            pull_fork_all
        ;;
    esac
    
    sync_ff_version
    
    
    

    相关文章

      网友评论

          本文标题:ijkplayer-ios 脚本分析

          本文链接:https://www.haomeiwen.com/subject/butyaltx.html