ijkplayer (iOS)集成x264編碼器

背景

為了把ijkplayer中的視頻流到文件的保存,嘗試對AVFrame進行encode操作,然后保存成對應的視頻文件,完成視頻的錄制。

遇到的問題

一直找不到對應的編碼器,encoder = avcodec_find_encoder(dec_ctx->codec_id);一直返回NULL

解決方案

查看ijkplayer的配置,發現其并未集成對應的編碼器,因此需要我們自己集成編碼器(x264)到ijkplayer中。

實現過程

x264的準備工作

1.下載x264

x264官網 下載x264源碼,將其文件夾名稱改為x246

2.下載gas-preprocessor

需要將x264編譯成RAM平臺的版本,需要此文件。下載gas-pregprcessor,將其中的gas-preprocessor.pl文件放到/usr/local/bin文件夾下面。然后修改其權限使其可以運行chmod u+x gas-preprocessor.pl


sudo cp gas-preprocessor.pl /usr/local/bin

cd /usr/local/bin

sudo chmod u+x gas-preprocessor.pl

3.下載x264 build shell

下載build-x264.sh 將文件build-x264.sh放在x264同一級目錄里面,注意不是放在x264文件夾里面

目錄結構.png

修改其權限,添加運行權限sudo chmod u+x build-x264.sh,然后執行腳本即可完成x264的交叉編譯。

sudo ./build-x264.sh

完成編譯后會生成x264-iOS文件夾,里面就是我們已經編譯好了的包。

4.將編譯好的x264放到系統路徑下面

  • 將x264-iOS文件夾下include中的頭文件移到/usr/local/include

sudo cp include/* /usr/local/include

  • 將x264-iOS文件夾下lib中的文件移到/usr/local/lib

sudo cp lib/* /usr/local/lib

重新編譯ijkplayer

我們需在編譯ffmpeg的時候加上x264,因此需要修改ijkplayer文件中./config/module.sh文件配置。(我用的是module-lite.sh文件)

添加修改部分配置如下,在第9行的位置修改如下


# Licensing options:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-gpl"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-libx264"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-encoder=libx264"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-version3"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-nonfree"

# Configuration options:

修改第69行,把export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-encoders"改為


export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-encoders"

然后重新編譯ijkplayer。


cd ios/

./compile-ffmpeg clean

./compile-ffmpeg all

編譯完了將x264-iOS/lib中的libx264.a文件復制到ijkplayer中的./ios/build/universal/lib

Paste_Image.png

最后在工程中引入libx264.a的包即可。

Paste_Image.png

這樣就完成了ijkplayer中x264編碼庫的集成,就可以對AVFrame進行編碼操作了,愉快的去(too young too simple)完成視頻的錄制。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容