?FFmpeg是一款專門用于處理數(shù)字音頻和視頻,支持錄制、轉(zhuǎn)換,并能將這些媒體內(nèi)容轉(zhuǎn)化為實(shí)時(shí)流數(shù)據(jù)的開源計(jì)算機(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)會(huì)報(bào)錯(cuò),這里使用的是gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux(在實(shí)驗(yàn)中使用gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf會(huì)報(bào)一個(gè)與pkg-config有關(guān)的錯(cuò)誤,暫未找到問題原因及解決方法)。
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”查詢是否搭建成功,如果沒搭建成功,請(qǐng)檢查上一步的PATH路徑是否填寫正確。

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

將下載的壓縮包放到你的工作目錄下并解壓,并創(chuàng)建一個(gè)“x264_install”文件夾用于存放編譯后生成的文件。
tar -vxf x264-snapshot-20191217-2245-stable.tar.bz2 mkdir x264_install
之后進(jìn)入解壓的“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
進(jìn)入解壓后的ffmpeg文件夾,并修改Makefile文件,添加編譯選項(xiàng)。
CFLAGS += -fPIC
執(zhí)行如下命令來配置編譯選項(xiàng)。
./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文件,查看具體報(bào)錯(cuò)原因。
最后執(zhí)行:
make make install
完成FFmpeg的編譯。

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

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

使用Ctrl+C打斷錄制,這時(shí)候會(huì)看到/home/root目錄下出現(xiàn)了cam_video.avi文件,這個(gè)就是錄制的視頻文件。
將該視頻文件傳輸?shù)?a target="_blank">電腦上進(jìn)行查看。在命令行輸入
scp -o HostKeyAlgorithms=+ssh-rsa cam_video.avi feng@192.168.0.1:/home/feng/
其中“feng@192.168.0.1:/home/feng/”需要改成自己電腦的用戶名和ip地址以及想要存放文件的路徑,這時(shí)候在/home/feng/文件夾下就能看到并播放錄制的視頻了。

至此,就完成了FFmpeg的移植。期望這一過程能為正在探索嵌入式領(lǐng)域知識(shí)的小伙伴們帶來實(shí)質(zhì)性的幫助。
-
嵌入式
+關(guān)注
關(guān)注
5198文章
20449瀏覽量
334079 -
數(shù)字音頻
+關(guān)注
關(guān)注
9文章
224瀏覽量
68202 -
開發(fā)板
+關(guān)注
關(guān)注
26文章
6291瀏覽量
118135 -
Linux開發(fā)
+關(guān)注
關(guān)注
0文章
46瀏覽量
7693 -
學(xué)習(xí)開發(fā)板
+關(guān)注
關(guān)注
0文章
10瀏覽量
715
發(fā)布評(píng)論請(qǐng)先 登錄
Tiny4412移植ffmpeg實(shí)現(xiàn)視頻解碼
【風(fēng)火輪YY3568開發(fā)板免費(fèi)體驗(yàn)】第二章:YY3568 ffmpeg 編譯以及 nanogui 移植
飛凌嵌入式ElfBoard ELF 1板卡-如何移植FFmpeg
嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-如何移植FFmpeg
【飛凌嵌入式OK3588J-C開發(fā)板體驗(yàn)】OK3588J-C開發(fā)板的支持RKMPP的FFmpeg移植
【HZ-RK3568開發(fā)板免費(fèi)體驗(yàn)】合眾HZ-RK3568 移植 ffmpeg 支持 mpp 庫(kù)來加速
【OK210申請(qǐng)】物聯(lián)網(wǎng)控制器,實(shí)時(shí)視頻項(xiàng)目
如何將ffmpeg移植到ARM平臺(tái)
迅為imx6開發(fā)板QT系統(tǒng)移植FFmpeg-編譯x264
迅為imx6開發(fā)板QT系統(tǒng)移植FFmpeg移植到ARM開發(fā)板和測(cè)試
ffmpeg第三方庫(kù)如何在harmony 3.0上編譯跑通?
Purple Pi R1 FFMPEG的移植與測(cè)試
瑞芯微RK3588平臺(tái)FFmpeg硬件編解碼移植及性能測(cè)試實(shí)戰(zhàn)攻略
瑞芯微RK3562平臺(tái)FFmpeg硬件編解碼移植及性能測(cè)試實(shí)戰(zhàn)攻略
如何移植FFmpeg
評(píng)論