加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

如何移植FFmpeg

06/07 16:11
938
阅读需 14 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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

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

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

编译x264
首先从以下网站获取x264的源码并下载。
(http://download.videolan.org/pub/videolan/x264/snapshots/)

将下载的压缩包放到你的工作目录下并解压,并创建一个“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 :表示指定交叉编译链,用户需要修改为自己的交叉编译器。

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

最后执行

make
make install
完成x264的编译。
编译FFmpeg

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

之后与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路径

这一步可能遇到的问题:

  • 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的编译。

文件移植

进入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的设备,这个就是摄像头。

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

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

会出现如下所示:

使用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/文件夹下就能看到并播放录制的视频了。

至此,就完成了FFmpeg的移植。期望这一过程能为正在探索嵌入式领域知识的小伙伴们带来实质性的帮助。

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
ECS-2520MV-333.3-CM-TR 1 ECS International Inc HCMOS Output Clock Oscillator,
暂无数据 查看
H11G1 1 Motorola Mobility LLC 1 CHANNEL DARLINGTON OUTPUT OPTOCOUPLER
$0.89 查看
M24M01-RMN6TP 1 STMicroelectronics 1 Mbit serial I<sup>2</sup>C bus EEPROM

ECAD模型

下载ECAD模型
$1.51 查看
飞凌嵌入式

飞凌嵌入式

保定飞凌嵌入式技术有限公司,创建于2006年,是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业,是国内较早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累,公司拥有业内优秀的软硬件研发团队,在北京及保定建立两大研发基地,在苏州、深圳设有华东、华南技术服务中心,并在北美、欧洲以及亚太等其他国家和地区拥有国际业务网络。公司研发的智能设备核心平台广泛应用于物联网、工控、轨道交通、医疗、电力、商业电子、智能家居、安防、机器人、环境监测等诸多领域。

保定飞凌嵌入式技术有限公司,创建于2006年,是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业,是国内较早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累,公司拥有业内优秀的软硬件研发团队,在北京及保定建立两大研发基地,在苏州、深圳设有华东、华南技术服务中心,并在北美、欧洲以及亚太等其他国家和地区拥有国际业务网络。公司研发的智能设备核心平台广泛应用于物联网、工控、轨道交通、医疗、电力、商业电子、智能家居、安防、机器人、环境监测等诸多领域。收起

查看更多

相关推荐

电子产业图谱