imx6 x264 ffmpeg 移植----fwqlzz love is for ever

叉编译器版本:version 4.5.1

Libx264版本:x264-snapshot-20121020-2245

FFMPEG版本:ffmpeg-1.0

 

这里我只是移植了ffmpeg支持了h264,音频的未移植。

 

一、X264移植

1、先执行配置文件

./configure --prefix=/home/linux/workspace/x264-build/x264-arm--enable-shared --disable-asm

--prefix 指定最后使用make install输出头文件、库文件等的路径

 

2、修改生成的config.mak文件

2.1 ARCH=X86 修改为ARCH=ARM

2.2 CC=gcc修改为CC=arm-linux-gcc

2.3去掉-m32 (这行中CFLAGS=-Wshadow -O3-ffast-math  -Wall -I. -I$(SRCPATH)-std=gnu99 -fomit-frame-pointer -fno-tree-vectorize) 

2.4 修改LD=gcc –o为LD=arm-linux-gcc –o

 

推荐一款app应用——"印度爱经",木蚂蚁下载点击打开链接


3、编译和安装

make

make install

这样就安装在了前面—prefix指定的路径下

             

二、ffmpeg移植

1、先执行配置文件

./configure --disable-ffmpeg --disable-ffplay--disable-ffprobe --disable-ffserver--prefix=/home/linux/workspace/ffmpeg-build/ffmpeg1.0-arm--enable-cross-compile --cross-prefix=arm-linux- --target-os=linux --arch=arm--enable-shared --enable-nonfree --enable-gpl --enable-version3--extra-cflags=-I/home/linux/workspace/x264-build/x264-arm/include--extra-ldflags=-L/home/linux/workspace/x264-build/x264-arm/lib--enable-libx264

配置选项说明

--cross-prefix在所有编译工具前加上前缀arm-linux-

--disable-stripping不使用strip去掉库信息

--extra-cflags:第三方库头文件声明(这个路径要指向x264的安装路径,对比看看我的ffmpeg配置就明白了)

--extra-ldflags:第三方库库文件路径(同上)

 

2、编译和安装

make

make install


 

如果在make install过程中出现类似上图所示的错误,参考如下链接:

http://blog.csdn.net/yming0221/article/details/6705418

 

三、使用

1、先将x264的安装路径下的lib和include目录下的所有文件拷贝到ffmpeg安装目录下的lib和include目录下

 

2、写个简单的测试程序

#include<libavutil/opt.h>

#include<libavcodec/avcodec.h>

#include<libavutil/audioconvert.h>

#include<libavutil/common.h>

#include<libavutil/imgutils.h>

#include<libavutil/mathematics.h>

#include <libavutil/samplefmt.h>

 

void main()

{

avcodec_register_all();

}

 

编译命令:

arm-linux-gcc test.c-I /home/linux/workspace/ffmpeg-build/ffmpeg1.0-arm/include -L/home/linux/workspace/ffmpeg-build/ffmpeg1.0-arm/lib/ -lavformat -lavutil-lavcodec -lx264

 

-I(注意是大写的i)指定头文件路径,为安装的ffmpeg目录下的include目录

-L:指定库文件路径,为安装的ffmpeg目录下的lib目录

-l(注意是大写L的小写)指定库



一、下载yasm:

http://www.tortall.net/projects/yasm/wiki/Download 下载yasm0.7.2(x264需要用到的汇编编译器)

for x86:

./configure --enable-shared --prefix=/usr/local
make
make install

for arm:
./configure --enable-shared --prefix=/usr/local/ --host=arm-linux
make
make install

下载安装x264

到 ftp://ftp.videolan.org/pub/videolan/x264/snapshots/ 下载x264库
for x86:
./configure --enable-shared --prefix=/usr/local
make
make install
for arm:
./configure --enable-shared
修改config.mak文件,将其中的CC=gcc,AS=yasm修改成CC=arm-linux-gcc,AS=arm-linux-as。—>make。之后便生成了可执行文件X264。
这里会出错,解决办法:将解压文件夹下的common文件夹下的cpu.c中的#elif defined(SYS_LINUX) unsigned int bit; int np; cpu_set_t p_aff; memset( &p_aff, 0, sizeof(p_aff) );sched_getaffinity( 0, sizeof(p_aff), &p_aff );for( np = 0;bit = 0; bit < sizeof(p_aff); bit++ );np += (((uint8_t *)&p_aff)[bit / 8] >> (bit % 8)) & 1;return np;
改成了:#elif defined(SYS_LINUX)
return 1 ;
二、下载安装xvid库
到 http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz  下载xvid
for x86:
cd build/generic
./configure --prefix=/usr/local
make
make install
for arm:
#./configure --prefix=/usr/local/ --host=arm-linux --target=arm-linux
./configure --prefix=/usr/local/ --host=arm-hismall-linux --target=arm-hismall-linux
make
make install
三、下载ffmpeg
http://download.chinaunix.net/download.php?id=5532&ResourceID=2990在这个网址上下载了ffmpeg-0.4.9-p20051120.tar.bz2,然后解压。
(1)修改configure文件,要修改的如下
      prefix="/usr/local/ffmpeg-arm"
       cross_prefix="/usr/local/arm/3.3.2/bin/"
       cc="arm-linux-gcc"
      ar="arm-linux-ar"
      ranlib="arm-linux-ranlib"
      strip="arm-linux-strip"
      cpu="armv41"
      由于cc、ar、ranlib、strip都是交叉编译环境中的执行文件,也可以这样配置
      prefix="/usr/local/ffmpeg-arm"
       cross_prefix="/usr/local/arm/3.3.2/bin/arm-linux-"
       cpu="armv41"
    (2)执行
       ./configure --enable-shared --disable-strip
        说明:如果不加--disable-strip,那么在编译之后,动态链接库会有问题。在运行程序链接该三个链接库的时候,会出现"skippingincompatible"错误。我猜想是在安装动态库之前,利用了strip对其进行了处理,而不是调用arm-linux-strip,所以造成了动态库的损坏。(比如gcc编译得到的动态库,利用arm-linux-gcc去链接该动态库,当然会出现"skippingincompatible"错误)。
(3)编译并安装
     make
     make install
     安装完成后,在/usr/local/ffmpeg-arm文件下有三个文件夹,分别为头文件夹include、动态库文件夹lib和执行文件夹bin。
     由于是利用动态链接库,bin目录下的执行文件需要lib下的动态库的支持。在实验箱上运行ffmpeg,必须把lib下的动态库烧写到/usr/lib或者/lib目录下。
(4)测试
     把include文件夹下的ffmpeg文件夹复制到/usr/local/arm/3.3.2/include目录下。那么在测试程序中的包含文件可以这样写 #include<ffmpeg/avcodec.h>。
    编译:arm-linux-gcc -o test test.c -L/usr/local/ffmpeg-arm/lib-lavformat -lavcodec
-lavutil
    在实验箱运行测试程序,必须把动态库文件烧写到/usr/lib或者/lib下。




(5)ffmpeg+ffserver构建视频服务器(摄像头作为视频采集端口,通过ffmpeg进行mpeg4编码,然后通过ffserver使用rtp协议传输视频!)
首先启动ffserver。启动ffserver之前必须先配置好ffserver。配置文件如下
Port 8090

BindAddress 0.0.0.0
#最大链接数
MaxClients 1000
#带宽上限
MaxBandwidth 10000
CustomLog -
NoDaemon
#配置缓冲文件
<Feed feed1.ffm>
#缓冲文件所在目录
File /tmp/feed1.ffm
#缓冲大小
FileMaxSize 1M
#允许链接的地址
ACL allow 127.0.0.1
</Feed>
#配置视频文件的参数
<Stream test.asf>
Feed feed1.ffm
Format asf
NoAudio
VideoCodec mpeg4
VideoFrameRate 15
VideoSize 320x240
VideoBitRate 256
VideoBufferSize 40
VideoGopSize 30
#AudioBitRate 64
StartSendOnKey
ACL allow 192.168.0.0 192.168.255.255
</Stream>
这样就可以启动ffserver了,使用格式如下:./ffserver -f test.conf
然后再启动ffmpeg,使用方法:ffmpeg -f video4linux -s 320*240 -r 15 -i /dev/video0 http://localhost:8090/feed1.ffm
这样服务器端就OK了,客户端不知道为什么怎么也不行!
郁闷!!!!!!!!!!!!!!!!!!!!!!11



二、ffmpeg在VC下使用
首先下载一个ffmpeg SDK,现在最新版本3.2,下载地址: http://www.bairuitech.com/html/ruanjianxiazai/ffmpeg/20080414/89.html,然后解压后,将库文件和头文件加到VC中去,将动态链接库文件拷贝到自己的工程目录下。如果出现各种找不到可以解析的外部函数名,一般都是由于没有将相应的头文件和库文件加入的原因!!!!!!!!!!!




修改:编译ffmpeg

下载最新的3.0.2./configure --cross-prefix=arm-linux- --enable-cross-compile --target-os=linux --cc=arm-linux-gcc --arch=arm --prefix=/usr/local/imx6/ --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-pthreads  --disable-yasm --disable-stripping --arch=arm --cpu=cortex-a9 --enable-pic  --disable-asm --enable-decoder=h264 --enable-decoder=rv40 --enable-decoder=aac --extra-cflags=-I/usr/local/imx6/include --extra-ldflags=-L/usr/local/lib  --enable-gpl --enable-version3

 make


make install



ffserver.conf



Port 8090
BindAddress 192.168.1.6
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
CustomLog -

#媒体流文件设置
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 2M
ACL allow 192.168.1.0 192.168.255.255
</Feed>

#压缩为asf格式
<Stream test.asf>
Feed feed1.ffm
Format asf
VideoFrameRate 15
VideoSize 352x240
VideoBitRate 256
VideoBufferSize 40
VideoGopSize 30
StartSendOnKey
NoAudio
</Stream>

#rm格式视频
<Stream test.rm>
Feed feed1.ffm
Format rm
AudioBitRate 32
VideoBitRate 128
VideoFrameRate 25
VideoGopSize 25
NoAudio
</Stream>

#可以查看ffserver的启动状态
<Stream stat.html>
Format status
ACL allow 192.168.1.0 192.168.255.255
</Stream>

#不起作用
<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>



ffplay http://192.168.1.104:8090/test.asf

ffserver -f test.conf &
ffmpeg -f video4linux2 -i /dev/video0 http://127.0.0.1:8090/feed1.ffm
ffmpeg -f video4linux2 -framerate 30 -i /dev/video0 http://127.0.0.1:8090/feed1.ffm

./ffmpeg -f video4linux -s 320x240 -i /dev/video2 /home/bbb/test.avi
./ffmpeg -f v4l -s 320x240 -i /dev/video2 /home/bbb/test.avi



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值