?FFmpeg是一款專門用于處理數字音頻和視頻,支持錄制、轉換,并能將這些媒體內容轉化為實時流數據的開源計算機程序。它遵循LGPL或GPL許可協議,為用戶提供了涵蓋音視頻錄制、格式轉換及流媒體分發的全方位解決方案,深入掌握FFmpeg已成為每一位多媒體開發工程師的必修課。今天就跟各位小伙伴分享一篇共創社的學習筆記,探討一下如何移植FFmpeg。
配置交叉編譯環境
ElfBoard官方使用的是arm-poky-linux-gnueabi-gcc交叉編譯器,但是在使用中發現會報錯,這里使用的是gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux(在實驗中使用gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf會報一個與pkg-config有關的錯誤,暫未找到問題原因及解決方法)。
arm交叉編譯器下載完成后,創建/usr/local/arm目錄并將下載的壓縮包拷貝到該目錄下并解壓。
sudo mkdir /usr/local/arm sudo cp gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz /usr/local/arm/ sudo tar -vxf ggcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz
![wKgaomZinXqAB6aXAAFGzbG-50k567.png](https://file1.elecfans.com/web2/M00/ED/51/wKgaomZinXqAB6aXAAFGzbG-50k567.png)
之后配置環境變量,使用命令“sudo gedit /etc/profile”打開profile文件,并在文件最后添加“export PATH=$PATH:/usr/local/arm/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin”。
![wKgaomZinZOAe--NAAQ_7XcJ2G4064.png](https://file1.elecfans.com/web2/M00/ED/51/wKgaomZinZOAe--NAAQ_7XcJ2G4064.png)
最后保存文件并使用reboot命令重啟系統,在命令行輸入“arm-linux-gnueabihf-gcc -v”查詢是否搭建成功,如果沒搭建成功,請檢查上一步的PATH路徑是否填寫正確。
![wKgaomZinbOAQg30ABmrl2gFNXM430.png](https://file1.elecfans.com/web2/M00/ED/51/wKgaomZinbOAQg30ABmrl2gFNXM430.png)
編譯x264
首先從以下網站獲取x264的源碼并下載。(http://download.videolan.org/pub/videolan/x264/snapshots/)
![wKgZomZincyAWeJyABAPN5yNVAI848.png](https://file1.elecfans.com/web2/M00/EC/69/wKgZomZincyAWeJyABAPN5yNVAI848.png)
將下載的壓縮包放到你的工作目錄下并解壓,并創建一個“x264_install”文件夾用于存放編譯后生成的文件。
tar -vxf x264-snapshot-20191217-2245-stable.tar.bz2 mkdir x264_install
之后進入解壓的“x264-snapshot-20191217-2245-stable”文件夾下(我這里將文件夾重命名為了x264),并執行如下命令。
./configure --enable-shared --prefix=/home/feng/文檔/開發/Linux/proj/ffmpeg/x264_install/ --host=arm-linux-gnueabihf --disable-asm
其中:
prefix=/home/feng/文檔/開發/Linux/proj/ffmpeg/x264_install/表示指定編譯后存放路徑。
host=arm-linux-gnueabihf :表示指定交叉編譯鏈,用戶需要修改為自己的交叉編譯器。
![wKgaomZingiAZImLAAP-VUjttq4410.png](https://file1.elecfans.com/web2/M00/ED/51/wKgaomZingiAZImLAAP-VUjttq4410.png)
之后修改“config.mak”文件,需要將交叉編譯工具修改為自己使用的交叉編譯工具。
SYS_ARCH=ARM SYS=LINUX CC= arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-gcc -o AR= arm-linux-gnueabihf-ar rc RANLIB= arm-linux-gnueabihf-ranlib
![wKgZomZinjCAWLH2AALH3csEFA4273.png](https://file1.elecfans.com/web2/M00/EC/69/wKgZomZinjCAWLH2AALH3csEFA4273.png)
最后執行
make make install
完成x264的編譯。
編譯FFmpeg
首先從以下網站上下載ffmpeg源碼并放置在工作目錄下。(http://ffmpeg.org/download.html)
![wKgaomZintCAGS7NAAJTenbK2Rs940.png](https://file1.elecfans.com/web2/M00/ED/51/wKgaomZintCAGS7NAAJTenbK2Rs940.png)
之后與x264編譯類似,解壓并創建文件夾ffmpeg_install用于存放生成的文件
tar -vxf ffmpeg-snapshot.tar.bz2 mkdir ffmpeg_install
進入解壓后的ffmpeg文件夾,并修改Makefile文件,添加編譯選項。
CFLAGS += -fPIC
執行如下命令來配置編譯選項。
./configure --cross-prefix=arm-linux-gnueabihf- --enable-cross-compile --target-os=linux --cc=arm-linux-gnueabihf-gcc --arch=arm --prefix=/home/feng/文檔/開發/Linux/proj/ffmpeg/ffmpeg_install --enable-shared --disable-static --enable-gpl --enable-nonfree --disable-ffplay --enable-swscale --enable-pthreads --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-x86asm --disable-stripping --enable-libx264 --extra-cflags=-I/home/feng/文檔/開發/Linux/proj/ffmpeg/x264_install/include --extra-ldflags=-L/home/feng/文檔/開發/Linux/proj/ffmpeg/x264_install/lib --extra-libs=-ldl
參數說明:
- cross-prefix=arm-linux-gnueabihf-:配置為自己的交叉編譯工具
- cc=arm-linux-gnueabihf-gcc:配置為自己的交叉編譯工具
- arch=arm --prefix=/home/feng/文檔/開發/Linux/proj/ffmpeg/ffmpeg_install:編譯后存放路徑
- extra-cflags=-I/home/ubuntu/work/ffmpeg/_x264_install/include:x264的include路徑
- extra-ldflags=-L/home/ubuntu/work/ffmpeg/_x264_install/lib :x264的lib路徑
![wKgaomZinx2ASFxRAAdh9kb2dCA144.png](https://file1.elecfans.com/web2/M00/ED/52/wKgaomZinx2ASFxRAAdh9kb2dCA144.png)
這一步可能遇到的問題:
ERROR: x264 not found using pkg-config
解決方法:需要指定x264/lib/pkgconfig的路徑:
export PKG_CONFIG_PATH=/home/feng/文檔/開發/Linux/proj/ffmpeg/x264_install/lib/pkgconfig
error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
解決方法:
sudo apt-get install apt-file sudo apt-file update sudo apt-file search libz.so.1 sudo apt-get install lib32z1
如果出現問題,可以查看/ffmpeg/ffbuild目錄下的config.log文件,查看具體報錯原因。
最后執行:
make make install
完成FFmpeg的編譯。
![wKgaomZin3mAT_llAAaWp5h1zzI509.png](https://file1.elecfans.com/web2/M00/ED/52/wKgaomZin3mAT_llAAaWp5h1zzI509.png)
文件移植
進入x264_install/lib目錄,將x264_install/lib文件夾下的庫文件拷貝到開發板的/lib/目錄下:
scp -o HostKeyAlgorithms=+ssh-rsa *x264* root@192.168.0.232:/lib/
進入ffmpeg_install/lib目錄,將ffmpeg_install/lib文件夾下的so庫文件全部拷貝到開發板的/lib/目錄下:
scp -o HostKeyAlgorithms=+ssh-rsa *lib* root@192.168.0.232:/lib/
進入ffmpeg_install/bin/目錄,將ffmpeg_install/bin/目錄下的ffmpeg文件拷貝到開發板的/bin/目錄下
scp -o HostKeyAlgorithms=+ssh-rsa ffmpeg root@192.168.0.232:/bin/
完成文件的移植。
測試
將免驅的USB攝像頭插到ELF 1開發板的USB口上,可以看到在/dev文件夾下會新增一個video2的設備,這個就是攝像頭。
![wKgaomZioI2AS0ACAAmJuTeGzq0082.png](https://file1.elecfans.com/web2/M00/ED/52/wKgaomZioI2AS0ACAAmJuTeGzq0082.png)
之后測試使用FFmpeg錄制攝像頭視頻并保存
ffmpeg -f video4linux2 -s 320x240 -i /dev/video2 /home/root/cam_video.avi
會出現如下所示:
![wKgaomZioLmACLsFAAyWvlwjNxs734.png](https://file1.elecfans.com/web2/M00/ED/52/wKgaomZioLmACLsFAAyWvlwjNxs734.png)
使用Ctrl+C打斷錄制,這時候會看到/home/root目錄下出現了cam_video.avi文件,這個就是錄制的視頻文件。
將該視頻文件傳輸到電腦上進行查看。在命令行輸入
scp -o HostKeyAlgorithms=+ssh-rsa cam_video.avi feng@192.168.0.1:/home/feng/
其中“feng@192.168.0.1:/home/feng/”需要改成自己電腦的用戶名和ip地址以及想要存放文件的路徑,這時候在/home/feng/文件夾下就能看到并播放錄制的視頻了。
![wKgaomZioOyAQ4JSAAGU7-U_Nq4144.png](https://file1.elecfans.com/web2/M00/ED/52/wKgaomZioOyAQ4JSAAGU7-U_Nq4144.png)
至此,就完成了FFmpeg的移植。期望這一過程能為正在探索嵌入式領域知識的小伙伴們帶來實質性的幫助。
-
嵌入式
+關注
關注
5096文章
19189瀏覽量
308034 -
數字音頻
+關注
關注
9文章
204瀏覽量
67173 -
開發板
+關注
關注
25文章
5134瀏覽量
98339 -
Linux開發
+關注
關注
0文章
34瀏覽量
6965 -
學習開發板
+關注
關注
0文章
10瀏覽量
307
發布評論請先 登錄
相關推薦
嵌入式Qt-交叉編譯FFmpeg與視頻播放測試
![嵌入式Qt-交叉編譯<b class='flag-5'>FFmpeg</b>與視頻播放測試](https://file.elecfans.com//web2/M00/69/71/pYYBAGMh0jSAEJNVAACYTXrvhzU307.png)
Tiny4412移植ffmpeg實現視頻解碼
![Tiny4412<b class='flag-5'>移植</b><b class='flag-5'>ffmpeg</b>實現視頻解碼](https://file.elecfans.com//web2/M00/6D/D4/pYYBAGM1Sc6AXBujAAMEwvhAPmI473.png)
飛凌嵌入式ElfBoard ELF 1板卡-如何移植FFmpeg
嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-如何移植FFmpeg
【飛凌嵌入式OK3588J-C開發板體驗】OK3588J-C開發板的支持RKMPP的FFmpeg移植
【OK210申請】物聯網控制器,實時視頻項目
iTOP-iMX6ULL開發板-FFmpeg移植
如何將ffmpeg移植到ARM平臺
怎么實現ffmpeg解碼器到龍芯3B的移植?
迅為imx6開發板QT系統移植FFmpeg-編譯x264
迅為imx6開發板QT系統移植FFmpeg移植到ARM開發板和測試
ffmpeg第三方庫如何在harmony 3.0上編譯跑通?
Purple Pi R1 FFMPEG的移植與測試
介紹FFmpeg是什么?與關于FFmpeg的問題回答
![介紹<b class='flag-5'>FFmpeg</b>是什么?與關于<b class='flag-5'>FFmpeg</b>的問題回答](https://file.elecfans.com/web1/M00/58/C9/pIYBAFtbxBWAcY6fAAANc0Cp0uc025.png)
評論