×
单片机 > 单片机程序设计 > 详情

移植 ffmpeg 到 ARM 平台

发布时间:2020-06-20 发布时间:
|
一、下载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。 
    编译: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 
#配置缓冲文件 
 
#缓冲文件所在目录 
File /tmp/feed1.ffm 
#缓冲大小 
FileMaxSize 1M 
#允许链接的地址 
ACL allow 127.0.0.1 
 
#配置视频文件的参数 
 
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 
 
这样就可以启动ffserver了,使用格式如下:./ffserver -f test.conf 
然后再启动ffmpeg,使用方法:ffmpeg -f video4linux -s 320*240 -r 15 -i /dev/video0 http://localhost:8090/feed1.ffm 
这样服务器端就OK了,客户端不知道为什么怎么也不行! 
郁闷!!!!!!!!!!!!!!!!!!!!!!11 



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机制作超级流水灯