分享

移植 ffmpeg 到 ARM 平台

 百草园404 2016-03-14

到 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./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./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./html/ruanjianxiazai/ffmpeg/20080414/89.html,然后解压后,将库文件和头文件加到VC中去,将动态链接库文件拷贝到自己的工程目录下。如果出现各种找不到可以解析的外部函数名,一般都是由于没有将相应的头文件和库文件加入的原因!!!!!!!!!!!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多