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

 

 

 

 

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