<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 移植 ffmpeg 到 ARM 平臺(tái)

          移植 ffmpeg 到 ARM 平臺(tái)

          作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
          一、下載yasm:

          到http://www.tortall.net/projects/yasm/wiki/Download下載yasm0.7.2(x264需要用到的匯編編譯器)

          本文引用地址:http://www.ex-cimer.com/article/201611/317672.htm

          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庫(kù)
          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。之后便生成了可執(zhí)行文件X264。
          這里會(huì)出錯(cuò),解決辦法:將解壓文件夾下的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庫(kù)
          到 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在這個(gè)網(wǎng)址上下載了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都是交叉編譯環(huán)境中的執(zhí)行文件,也可以這樣配置
          prefix="/usr/local/ffmpeg-arm"
          cross_prefix="/usr/local/arm/3.3.2/bin/arm-linux-"
          cpu="armv41"
          (2)執(zhí)行
          ./configure --enable-shared --disable-strip
          說(shuō)明:如果不加--disable-strip,那么在編譯之后,動(dòng)態(tài)鏈接庫(kù)會(huì)有問(wèn)題。在運(yùn)行程序鏈接該三個(gè)鏈接庫(kù)的時(shí)候,會(huì)出現(xiàn)"skippingincompatible"錯(cuò)誤。我猜想是在安裝動(dòng)態(tài)庫(kù)之前,利用了strip對(duì)其進(jìn)行了處理,而不是調(diào)用arm-linux-strip,所以造成了動(dòng)態(tài)庫(kù)的損壞。(比如gcc編譯得到的動(dòng)態(tài)庫(kù),利用arm-linux-gcc去鏈接該動(dòng)態(tài)庫(kù),當(dāng)然會(huì)出現(xiàn)"skippingincompatible"錯(cuò)誤)。
          (3)編譯并安裝
          make
          make install
          安裝完成后,在/usr/local/ffmpeg-arm文件下有三個(gè)文件夾,分別為頭文件夾include、動(dòng)態(tài)庫(kù)文件夾lib和執(zhí)行文件夾bin。
          由于是利用動(dòng)態(tài)鏈接庫(kù),bin目錄下的執(zhí)行文件需要lib下的動(dòng)態(tài)庫(kù)的支持。在實(shí)驗(yàn)箱上運(yùn)行ffmpeg,必須把lib下的動(dòng)態(tài)庫(kù)燒寫到/usr/lib或者/lib目錄下。
          (4)測(cè)試
          把include文件夾下的ffmpeg文件夾到/usr/local/arm/3.3.2/include目錄下。那么在測(cè)試程序中的包含文件可以這樣寫#include。
          編譯:arm-linux-gcc -o test test.c -L/usr/local/ffmpeg-arm/lib-lavformat -lavcodec
          -lavutil
          在實(shí)驗(yàn)箱運(yùn)行測(cè)試程序,必須把動(dòng)態(tài)庫(kù)文件燒寫到/usr/lib或者/lib下。

          (5)ffmpeg+ffserver構(gòu)建視頻服務(wù)器(攝像頭作為視頻采集端口,通過(guò)ffmpeg進(jìn)行mpeg4編碼,然后通過(guò)ffserver使用rtp協(xié)議傳輸視頻!)
          首先啟動(dòng)ffserver。啟動(dòng)ffserver之前必須先配置好ffserver。配置文件如下
          Port 8090

          BindAddress 0.0.0.0
          #最大鏈接數(shù)
          MaxClients 1000
          #帶寬上限
          MaxBandwidth 10000
          CustomLog -
          NoDaemon
          #配置緩沖文件

          #緩沖文件所在目錄
          File /tmp/feed1.ffm
          #緩沖大小
          FileMaxSize 1M
          #允許鏈接的地址
          ACL allow 127.0.0.1

          #配置視頻文件的參數(shù)

          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

          這樣就可以啟動(dòng)ffserver了,使用格式如下:./ffserver -f test.conf
          然后再啟動(dòng)ffmpeg,使用方法:ffmpeg -f video4linux -s 320*240 -r 15 -i /dev/video0 http://localhost:8090/feed1.ffm
          這樣服務(wù)器端就OK了,客戶端不知道為什么怎么也不行!
          郁悶?。。。。。。。。。。。。。。。。。。。。?!11

          二、ffmpeg在VC下使用
          首先下載一個(gè)ffmpeg SDK,現(xiàn)在最新版本3.2,下載地址:http://www.bairuitech.com/html/ruanjianxiazai/ffmpeg/20080414/89.html,然后解壓后,將庫(kù)文件和頭文件加到VC中去,將動(dòng)態(tài)鏈接庫(kù)文件拷貝到自己的工程目錄下。如果出現(xiàn)各種找不到可以解析的外部函數(shù)名,一般都是由于沒(méi)有將相應(yīng)的頭文件和庫(kù)文件加入的原因!?。。。。。。。。?!


          關(guān)鍵詞: 移植ffmpegARM平

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();