首页 > 代码库 > ffmpeg+libx264+facc交叉编译 实现264流录制avi文件

ffmpeg+libx264+facc交叉编译 实现264流录制avi文件

默认交叉编译器已经搭建好。。。。。。。。。。。。。。。

需求:
把标准的h264流保存成avi格式的实现文件,所以需要h264的解码器,avi文件容器,传输协议类型是文件,这些会体现在ffmpeg的configure配置上--disable-everything --enable-protocol=file --enable-encoder=libx264 --enable-encoder=libfaac --enable-libx264 --enable-gpl --enable-libfaac --enable-nonfree --enable-muxer=avi --enable-demuxer=avi。

1 .下载libx264 ffmpeg facc

下载地址自己找吧。。。。。。
我下载的三个包:x264-snapshot-20120718-2245-stable.tar.bz ffmpeg-0.11.1.tar.gz faac-1.28.tar.bz2

2 .交叉编译libx264

2.1 解压x264-snapshot-20120718-2245-stable.tar.bz 到目录 /root/workspace/multimedia/ffpmeg

2.2 进入目录 /root/workspace/multimedia/ffpmeg/x264-snapshot-stable

2.3 创建目录 /root/workspace/multimedia/ffpmeg/out

2.4 执行configure 构造Makefile

./configure --enable-static --host=arm-linux --disable-asm --prefix=/root/workspace/multimedia/ffpmeg/out

2.5 修改config.mak

CC=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-gcc

LD=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-gcc -o 

AR=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-ar rc 

RANLIB=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-ranlib

STRIP=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-strip

保存

2.6 执行 make

2.7 执行 make install

2.8 搞定。。。。。。。。。。。。。。。。。。。编译好的静态库 躺在out目录里

交叉编译 faac

3.1 解压 ffmpeg 到目录/root/workspace/multimedia/ffmpeg

3.2 进入目录 /root/workspace/multimedia/ffmpeg/ffmpeg-1.0

3.3 执行configure 构造Makefile

./configure --enable-static --host=arm-linux --with-mp4v2 --prefix=/root/workspace/multimedia/ffpmeg/out CC=/opt/dm6467t/arm-2009q1-203/bin/arm-none-linux-gnueabi-gcc CXX=/opt/dm6467t/arm-2009q1-203/bin/arm-none-linux-gnueabi-g++

 

3.4 执行 make 

3.5 执行 make install

3.6 执行 make clean

      3.7  搞定。。。。。。。。。。。。。。。。。。。编译好的静态库 躺在out目录里 虽然配置了静态库但动态库已编译了。

交叉编译 ffmpeg

4.1 解压 ffmpeg 到目录/root/workspace/multimedia/ffmpeg

4.2 进入目录 /root/workspace/multimedia/ffmpeg/ffmpeg-1.0

4.3 执行configure 构造Makefile

 

./configure --arch=arm --target-os=linux --cc=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-gcc  cxx=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-g++ strip=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-strip --enable-cross-compile --disable-avdevice --disable-avfilter --disable-network --enable-static --disable-shared --enable-small --disable-debug --disable-everything --enable-protocol=file --enable-encoder=libx264 --enable-encoder=libfaac --enable-libx264 --enable-gpl --enable-libfaac --enable-nonfree --enable-muxer=avi --enable-demuxer=avi --prefix=/root/workspace/smart-box-apps-v1.0/sbox_app/multimedia/ffpmeg/out --extra-cflags=-I/root/workspace/smart-box-apps-v1.0/sbox_app/multimedia/ffpmeg/out/include --extra-ldflags=-L/root/workspace/smart-box-apps-v1.0/sbox_app/multimedia/ffpmeg/out/lib

4.4 执行 make

4.5执行 make install

4.6 搞定。。。。。。。。。。。。。。。。。。。编译好的静态库 躺在out目录里

说明: --disable-everything 一定要关闭所有,然后再打开你需要的模块,不然编译的静态库有几十兆

使用 ffmpeg 

修改原有的Makefile 添加:

INCLUDES+=-I$(SBOX_APP_DIR)/multimedia/ffpmeg/out/include

 

LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libavformat.a

LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libavcodec.a

LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libx264.a

LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libfaac.a

#LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libavdevice.a

#LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libavfilter.a

LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libavutil.a

LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libswresample.a

LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libswscale.a

 

 

编译出可执行程序2.2M大小

裁剪成功