?FFmpeg是一款專門用于處理數(shù)字音頻和視頻,支持錄制、轉(zhuǎn)換,并能將這些媒體內(nèi)容轉(zhuǎn)化為實時流數(shù)據(jù)的開源計算機程序。它遵循LGPL或GPL許可協(xié)議,為用戶提供了涵蓋音視頻錄制、格式轉(zhuǎn)換及流媒體分發(fā)的全方位解決方案,深入掌握FFmpeg已成為每一位多媒體開發(fā)工程師的必修課。今天就跟各位小伙伴分享一篇共創(chuàng)社的學(xué)習(xí)筆記,探討一下如何移植FFmpeg。
配置交叉編譯環(huán)境
ElfBoard官方使用的是arm-poky-linux-gnueabi-gcc交叉編譯器,但是在使用中發(fā)現(xiàn)會報錯,這里使用的是gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux(在實驗中使用gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf會報一個與pkg-config有關(guān)的錯誤,暫未找到問題原因及解決方法)。
arm交叉編譯器下載完成后,創(chuàng)建/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

之后配置環(huán)境變量,使用命令“sudo gedit /etc/profile”打開profile文件,并在文件最后添加“export PATH=$PATH:/usr/local/arm/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin”。

最后保存文件并使用reboot命令重啟系統(tǒng),在命令行輸入“arm-linux-gnueabihf-gcc -v”查詢是否搭建成功,如果沒搭建成功,請檢查上一步的PATH路徑是否填寫正確。

編譯x264
首先從以下網(wǎng)站獲取x264的源碼并下載。(http://download.videolan.org/pub/videolan/x264/snapshots/)

將下載的壓縮包放到你的工作目錄下并解壓,并創(chuàng)建一個“x264_install”文件夾用于存放編譯后生成的文件。
tar -vxf x264-snapshot-20191217-2245-stable.tar.bz2 mkdir x264_install
之后進入解壓的“x264-snapshot-20191217-2245-stable”文件夾下(我這里將文件夾重命名為了x264),并執(zhí)行如下命令。
./configure --enable-shared --prefix=/home/feng/文檔/開發(fā)/Linux/proj/ffmpeg/x264_install/ --host=arm-linux-gnueabihf --disable-asm
其中:
prefix=/home/feng/文檔/開發(fā)/Linux/proj/ffmpeg/x264_install/表示指定編譯后存放路徑。
host=arm-linux-gnueabihf :表示指定交叉編譯鏈,用戶需要修改為自己的交叉編譯器。

之后修改“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

最后執(zhí)行
make make install
完成x264的編譯。
編譯FFmpeg
首先從以下網(wǎng)站上下載ffmpeg源碼并放置在工作目錄下。(http://ffmpeg.org/download.html)

之后與x264編譯類似,解壓并創(chuàng)建文件夾ffmpeg_install用于存放生成的文件
tar -vxf ffmpeg-snapshot.tar.bz2 mkdir ffmpeg_install
進入解壓后的ffmpeg文件夾,并修改Makefile文件,添加編譯選項。
CFLAGS += -fPIC
執(zhí)行如下命令來配置編譯選項。
./configure --cross-prefix=arm-linux-gnueabihf- --enable-cross-compile --target-os=linux --cc=arm-linux-gnueabihf-gcc --arch=arm --prefix=/home/feng/文檔/開發(fā)/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/文檔/開發(fā)/Linux/proj/ffmpeg/x264_install/include --extra-ldflags=-L/home/feng/文檔/開發(fā)/Linux/proj/ffmpeg/x264_install/lib --extra-libs=-ldl
參數(shù)說明:
- cross-prefix=arm-linux-gnueabihf-:配置為自己的交叉編譯工具
- cc=arm-linux-gnueabihf-gcc:配置為自己的交叉編譯工具
- arch=arm --prefix=/home/feng/文檔/開發(fā)/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路徑

這一步可能遇到的問題:
ERROR: x264 not found using pkg-config
解決方法:需要指定x264/lib/pkgconfig的路徑:
export PKG_CONFIG_PATH=/home/feng/文檔/開發(fā)/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
如果出現(xiàn)問題,可以查看/ffmpeg/ffbuild目錄下的config.log文件,查看具體報錯原因。
最后執(zhí)行:
make make install
完成FFmpeg的編譯。

文件移植
進入x264_install/lib目錄,將x264_install/lib文件夾下的庫文件拷貝到開發(fā)板的/lib/目錄下:
scp -o HostKeyAlgorithms=+ssh-rsa *x264* root@192.168.0.232:/lib/
進入ffmpeg_install/lib目錄,將ffmpeg_install/lib文件夾下的so庫文件全部拷貝到開發(fā)板的/lib/目錄下:
scp -o HostKeyAlgorithms=+ssh-rsa *lib* root@192.168.0.232:/lib/
進入ffmpeg_install/bin/目錄,將ffmpeg_install/bin/目錄下的ffmpeg文件拷貝到開發(fā)板的/bin/目錄下
scp -o HostKeyAlgorithms=+ssh-rsa ffmpeg root@192.168.0.232:/bin/
完成文件的移植。
測試
將免驅(qū)的USB攝像頭插到ELF 1開發(fā)板的USB口上,可以看到在/dev文件夾下會新增一個video2的設(shè)備,這個就是攝像頭。

之后測試使用FFmpeg錄制攝像頭視頻并保存
ffmpeg -f video4linux2 -s 320x240 -i /dev/video2 /home/root/cam_video.avi
會出現(xiàn)如下所示:

使用Ctrl+C打斷錄制,這時候會看到/home/root目錄下出現(xiàn)了cam_video.avi文件,這個就是錄制的視頻文件。
將該視頻文件傳輸?shù)?a target="_blank">電腦上進行查看。在命令行輸入
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/文件夾下就能看到并播放錄制的視頻了。

至此,就完成了FFmpeg的移植。期望這一過程能為正在探索嵌入式領(lǐng)域知識的小伙伴們帶來實質(zhì)性的幫助。
-
嵌入式
+關(guān)注
關(guān)注
5125文章
19438瀏覽量
313068 -
數(shù)字音頻
+關(guān)注
關(guān)注
9文章
208瀏覽量
67413 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5389瀏覽量
100885 -
Linux開發(fā)
+關(guān)注
關(guān)注
0文章
36瀏覽量
7188 -
學(xué)習(xí)開發(fā)板
+關(guān)注
關(guān)注
0文章
10瀏覽量
401
發(fā)布評論請先 登錄
相關(guān)推薦
嵌入式Qt-交叉編譯FFmpeg與視頻播放測試

Tiny4412移植ffmpeg實現(xiàn)視頻解碼

【風(fēng)火輪YY3568開發(fā)板免費體驗】第二章:YY3568 ffmpeg 編譯以及 nanogui 移植

評論