2011年10月4日 星期二

移植 ffmpeg & ffserver 到 ARM-S3C6410 Linux 平台.

一、下載yasm


http://www.tortall.net/projects/yasm/wiki/Download 下載yasm 0.7.2x264需要用到的彙編編譯器)


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 arm:
./configure --enable-shared
修改config.mak檔,將其中的CC=gcc,AS=yasm修改成CC=arm-linux-gccAS=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 = 0bit = 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 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"
      
由於ccarranlibstrip都是交叉編譯環境中的執行檔,也可以這樣配置
      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下。


5ffmpegffserver構建視頻伺服器(攝像頭作為視頻採集埠,通過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

二、ffmpegVC下使用

首先下載一個ffmpeg SDK,現在最新版本3.2,下載位址:http://www.bairuitech.com/html/ruanjianxiazai/ffmpeg/20080414/89.html,然後解壓後,將庫文件和頭文件加到VC中去,將動態連結程式庫檔拷貝到自己的工程目錄下。如果出現各種找不到可以解析的外部函數名,一般都是由於沒有將相應的頭檔和庫檔加入的原因!

資料轉貼自 xingyu19871124 的專欄


沒有留言:

張貼留言

FPGA Verilog 的學習經驗,提供給要入門的新手

今天簡單說說 FPGA Verilog 的學習經驗,提供給要入門的新手: 1.對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數。 這一點個人認為很重要,就正如寫 C語言,心中要能生成對應的組合語言一樣,我是這樣要求自己的。 雖然 FPGA Verilog語言...