mac 編譯H264以及ffmpeg

最近項目中需要ffmpeg來操作h264流,然而ffmpeg並沒有並沒有集成h264編碼器,需要引入libx264,所以在電腦上重新編譯了ffmpeg以及h264,真是一路踩坑的過程,中間遇到很多莫名的錯誤,在此記錄下,希望後來看到的你,能順利編譯。

首先編譯h264,首先從官網下載h264源碼,http://download.videolan.org/pub/videolan/x264/snapshots/ 也可以用git下載

解壓之後在h264目錄下新建build_x264.sh可以執行文件,如下


#!/bin/bash


NDK=/Users/qss/Documents/adt-bundle-mac-x86_64-20140702/sdk/ndk-bundle
#NDK= 換成自己的ndk主目錄 

SYSROOT=$NDK/platforms/android-15/arch-arm/

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64


 function build_one
 {
 bash  ./configure \
    --prefix=$PREFIX \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --sysroot="$SYSROOT" \
    --host=arm-linux \
    --enable-pic \
    --enable-shared \
    --enable-static \
    --disable-cli
    make
    make install

 }
 CPU=arm
 PREFIX=/usr/local
build_one 

NDK、SYSROOT、TOOLCHAIN要寫成自己對應的目錄,否則編譯的時候找不到相關文件

移動到x264目錄下
       添加可執行權限:sudo chmod +x build_x264.sh
       開始執行./build_x264.sh
      最後一步可能出現權限錯誤,然後sudo make install,然後輸入密碼,即可。
      編譯成功後切換到 /usr/local目錄下會看到include 和lib兩個文件夾,爲輸出對應文件夾

說下中間的坑,執行./build_x264.sh的時候報錯

Makefile:3: config.mak: No such file or directory

cat: config.h: No such file or directory

./configure

Found no assembler

Minimum version is nasm-2.13

If you really want to compile without asm, configure with --disable-asm.

make: *** [config.mak] Error 1

上面提示是nasm版本太低或者關閉--disable-asm.  我首先想到的是關閉--disable-asm.配置,然而,關閉配置之後依然報這個錯誤,只能把nasm升級,升級就是先安裝Homebrew

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null 

直接終端複製安裝,經過漫長的等待,homebrew安裝完成,接下來安裝nasm

       brew install nasm

然後在繼續執行我們之前的命令:

       ./build_x264.sh

此時沒有意外的話,執行成功,在usr/local下的lib和include中會多出很多文件,這就是編譯好的h264文件

接下來編譯ffmpeg,依然是下載ffmpeg源碼,我下載的是最新的4.2.2的源碼,下載完成之後,在ffmpeg目錄下新建一個build_android.sh可執行文件,內容如下:

#!/bin/sh

NDK=/Users/qss/Documents/adt-bundle-mac-x86_64-20140702/sdk/ndk-bundle
SYSROOT=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-doc \
--enable-gpl \
--enable-libx264 \
--enable-protocols \
--enable-muxer=mp4 \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic -I/usr/local/include $ADDI_CFLAGS" \
--extra-ldflags="-L/usr/local/lib $ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=/Users/qss/Desktop
ADDI_CFLAGS="-marm"
build_one

NDK、SYSROOT、TOOLCHAIN、依然是填寫自己的文件路徑

移動到FFmpeg目錄下
       添加可執行權限:sudo chmod +x build_android.sh
       開始執行./build_android.sh
      最後一步可能出現權限錯誤,然後sudo make install,然後輸入密碼,即可。
     編譯成功後切換到 /usr/local目錄中的include 和lib兩個文件夾裏會多出文件,爲輸出對應文件。

 

執行./build_android.sh的時候報錯信息:

Unknown option "--disable-ffserver".

See ./configure --help for available options.

        大概意思是要設置 --disable-ffserver 

這是因爲要經過configure編譯,如果不經過編譯,就會報上面的錯誤

       ./configure 編譯,然後繼續命令操作:

       ./build_android.sh

發生瞭如下錯誤:

       /bin/sh: ranlib/usr/local/lib/libavdevice.a: No such file or directory

      make: *** [install-libavdevice-static] Error 127

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章