ijkplayer如何使用FFmpeg 4.0核心?

何俊林發表於2018-11-27

相信不少使用ijkplayer的朋友,都在埋怨,很多issue沒有人去解,master上分支已經停留在201801月,這現在一年都快過去了,官方不維護了麼?其實,人家一直在維護和更新。只不過ijkplayer是基於FFmpeg作為核心。上層ijkplayer封裝的東西,改動性沒有那麼大,出問題,也都是在底層FFmpeg改。如Demux,Codec等,還有各種協議。

所以,我告訴大家如何用ijkplayer核心最新穩定版本。我們一定對它的工程結構瞭解,他們是怎麼把FFmpeg,libyuv,soundtouch,等第三方庫作為contrib的。

IJK_FFMPEG_UPSTREAM=https://github.com/Bilibili/FFmpeg.git
IJK_FFMPEG_FORK=https://github.com/Bilibili/FFmpeg.git
IJK_FFMPEG_COMMIT=ff3.4--ijk0.8.7--20180103--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 -
}
複製程式碼

這裡master上依賴的庫是ff3.4--ijk0.8.7--20180103--001,是基於FFmpeg3.4的,新版本FFmpeg的都是4.1了,同時修復了很多問題和一些新的Feature。

ijkplayer的維護者,也是一直在勤快的更新。

所以要改動,只需要把IJK_FFMPEG_COMMIT=ff3.4--ijk0.8.7--20180103--001換成JK_FFMPEG_COMMIT=ff4.0--ijk0.8.25--20181123--001就可以,然後再做驗證性測試。

對於iOS也是,在init-ios.sh中

IJK_FFMPEG_UPSTREAM=https://github.com/Bilibili/FFmpeg.git
IJK_FFMPEG_FORK=https://github.com/Bilibili/FFmpeg.git
IJK_FFMPEG_COMMIT=ff3.4--ijk0.8.7--20180103--001
IJK_FFMPEG_LOCAL_REPO=extra/ffmpeg

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
TOOLS=tools
複製程式碼

也是改法和上面相同。其他第三方庫libyuv,soundtouch,修改對應指令碼就行。需要注意的是,編譯時,如果有一些新舊介面變化,可以用對比工具對比下。升級的好處,可以規避很多問題。大家有興趣可以試試。

ijkplayer如何使用FFmpeg 4.0核心?
歡迎關注我的微信公眾號「何俊林」,接收第一手技術乾貨

相關文章