Days 20 ElfBoard 板 FFmpeg移植

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。因此,对于从事多媒体技术开发的工程师来说,深入研究FFMPEG成为一门必不可少的工作,可以这样说,FFMPEG之于多媒体开发工程师的重要性正如kernel之于嵌入式系统工程师一般。

配置交叉编译环境

ELFbord官方使用的是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有关的错误,暂未找到问题原因及解决方法),具体下载链接请在公众号"MrFeng的学习笔记"回复"ELFboard交叉编译器"获取。

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

1

2

3

之后我们配置环境变量,使用命令"sudo gedit /etc/profile"打开profile文件,并在文件最后添加

export PATH=$PATH:/usr/local/arm/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin

1

最后保存文件并使用reboot命令重启系统,在命令行输入"arm-linux-gnueabihf-gcc -v"查询是否搭建成功,如果没搭建成功,请检查上一步的PATH路径是否填写正确。

编译x264

首先从网站http://download.videolan.org/pub/videolan/x264/snapshots/获取x264的源码并下载

将下载的压缩包放到你的工作目录下并解压,并创建一个"x264_install"文件夹用于存放编译后生成的文件

tar -vxf x264-snapshot-20191217-2245-stable.tar.bz2

mkdir x264_install

1

2

之后进入解压的"x264-snapshot-20191217-2245-stable"文件夹下(我这里将文件夹重命名为了x264),并执行如下命令

./configure --enable-shared --prefix=/home/feng/文档/开发/Linux/proj/ffmpeg/x264_install/ --host=arm-linux-gnueabihf --disable-asm

1

其中

prefix=/home/feng/文档/开发/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

1

2

3

4

5

6

最后执行

make

make install

完成x264的编译。

编译ffmpeg

首先从ffmpeg网站http://ffmpeg.org/download.html上下载ffmpeg源码并放置在工作目录下

之后与x264编译类似,解压并创建文件夹ffmpeg_install用于存放生成的文件

tar -vxf ffmpeg-snapshot.tar.bz2

mkdir ffmpeg_install

1

2

进入解压后的ffmpeg文件夹,并修改Makefile文件,添加编译选项

CFLAGS += -fPIC

1

执行如下命令来配置编译选项

./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

1

参数说明:

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路径

这一步可能遇到的问题:

ERROR: x264 not found using pkg-config

解决方法:需要指定x264/lib/pkgconfig的路径:

export PKG_CONFIG_PATH=/home/feng/文档/开发/Linux/proj/ffmpeg/x264_install/lib/pkgconfig

1

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

1

2

3

4

如果出现问题,可以查看/ffmpeg/ffbuild目录下的config.log文件,查看具体报错原因

最后执行

make

make install

完成ffmpeg的编译

文件移植

进入x264_install/lib目录,将x264_install/lib文件夹下的库文件拷贝到开发板的/lib/目录下

scp -o HostKeyAlgorithms=+ssh-rsa *x264* root@192.168.0.232:/lib/

1

进入ffmpeg_install/lib目录,将ffmpeg_install/lib文件夹下的so库文件全部拷贝到开发板的/lib/目录下

scp -o HostKeyAlgorithms=+ssh-rsa *lib* root@192.168.0.232:/lib/

1

进入ffmpeg_install/bin/目录,将ffmpeg_install/bin/目录下的ffmpeg文件拷贝到开发板的/bin/目录下

scp -o HostKeyAlgorithms=+ssh-rsa ffmpeg root@192.168.0.232:/bin/

1

完成文件的移植。

测试

将免驱的USB摄像头插到ELFboard的USB口上,我们可以看到在/dev文件夹下会新增一个video2的设备,这个就是我们的摄像头。

之后我们测试使用ffmpeg录制摄像头视频并保存

ffmpeg -f video4linux2 -s 320x240 -i /dev/video2 /home/root/cam_video.avi

1

会出现如下所示

我们使用ctrl+c打断录制,这时候我们就会看到/home/root目录下出现了cam_video.avi文件,这个就是我们录制的视频文件。

我们将该视频文件传输到电脑上进行查看。在ELFboard命令行输入

scp -o HostKeyAlgorithms=+ssh-rsa cam_video.avi feng@192.168.0.1:/home/feng/

1

其中"feng@192.168.0.1:/home/feng/"需要改成你自己电脑的用户名和ip地址以及你想要存放文件的路径

这时候在/home/feng/文件夹下就能看到并播放我们录制的视频了。

相关推荐
weixin_452600692 小时前
如何为老化的汽车铅酸电池充电
开发语言·单片机·安全·汽车·电机·电源模块·充电桩
极客小张4 小时前
ESP32 步进电机精准控制:打造高精度 DIY 写字机器人,实现流畅书写体验
单片机·嵌入式硬件·mcu·物联网·机器人·硬件工程
安步当歌6 小时前
【FFmpeg】av_write_trailer函数
c语言·c++·ffmpeg·视频编解码·video-codec
XD7429716368 小时前
【TB作品】51单片机 Proteus仿真 超声波 LCD1602显示实验
嵌入式硬件·51单片机·proteus
TMS320VC5257H9 小时前
ffmpeg在powershell和ubuntu终端下的不同格式
linux·ubuntu·ffmpeg
赟赟、嵌入式9 小时前
linux RTC时钟时间出现了明显的偏移
linux·驱动开发·嵌入式硬件·实时音视频
Jack1530276827910 小时前
什么是上拉电阻器?上拉和下拉电阻的典型应用
stm32·单片机·嵌入式硬件·智能家居·医疗器械·新能源汽车充电枪锁
Anin蓝天(北京太速科技-陈)11 小时前
116-基于5VLX110T FPGA FMC接口功能验证6U CPCI平台
图像处理·嵌入式硬件·fpga开发
极客小张12 小时前
Zigbee智能家居数据中心:微信小程序实时掌控家居传感器信息
javascript·单片机·嵌入式硬件·物联网·硬件架构·硬件工程
Naiva12 小时前
单片机关键任务优先级的实现学习
单片机·嵌入式硬件·学习