0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何移植FFmpeg

ElfBoard 2024-06-07 15:28 次阅读

​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

之后配置环境变量,使用命令“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

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

wKgaomZinbOAQg30ABmrl2gFNXM430.png

编译x264

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

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

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

最后执行

make make install

完成x264的编译。

编译FFmpeg

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

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

这一步可能遇到的问题:

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

文件移植

进入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

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

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

会出现如下所示:

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5083

    文章

    19129

    浏览量

    305392
  • 数字音频
    +关注

    关注

    9

    文章

    202

    浏览量

    66986
  • 开发板
    +关注

    关注

    25

    文章

    5057

    浏览量

    97519
  • Linux开发
    +关注

    关注

    0

    文章

    33

    浏览量

    6906
  • 学习开发板
    +关注

    关注

    0

    文章

    10

    浏览量

    253
收藏 人收藏

    评论

    相关推荐

    嵌入式Qt-交叉编译FFmpeg与视频播放测试

    本篇介绍了嵌入式Qt播放视频的准备工作:交叉编译FFmpeg库并移植到Linux板子中,并先通过ffmpeg指令测试视频播放效果。下篇将尝试设计Qt界面来结合FFmpeg进行视频的播放
    的头像 发表于 09-15 02:08 2463次阅读
    嵌入式Qt-交叉编译<b class='flag-5'>FFmpeg</b>与视频播放测试

    Tiny4412移植ffmpeg实现视频解码

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码
    的头像 发表于 09-29 15:31 1436次阅读
    Tiny4412<b class='flag-5'>移植</b><b class='flag-5'>ffmpeg</b>实现视频解码

    【风火轮YY3568开发板免费体验】第二章:YY3568 ffmpeg 编译以及 nanogui 移植

    本章主要记录如何移植 nanogui 以及在 buildroot 下快乐编译 ffmpeg
    的头像 发表于 08-11 15:41 2276次阅读
    【风火轮YY3568开发板免费体验】第二章:YY3568  <b class='flag-5'>ffmpeg</b> 编译以及 nanogui <b class='flag-5'>移植</b>

    飞凌嵌入式ElfBoard ELF 1板卡-如何移植FFmpeg

    的全方位解决方案,深入掌握FFmpeg已成为每一位多媒体开发工程师的必修课。今天就跟各位小伙伴分享一篇共创社的学习笔记,探讨一下如何移植FFmpeg。 配置交叉编译环境ELFbord官方
    发表于 06-06 09:17

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-如何移植FFmpeg

    的全方位解决方案,深入掌握FFmpeg已成为每一位多媒体开发工程师的必修课。今天就跟各位小伙伴分享一篇共创社的学习笔记,探讨一下如何移植FFmpeg。 配置交叉编译环境ELFbord官方
    发表于 06-06 09:32

    【飞凌嵌入式OK3588J-C开发板体验】OK3588J-C开发板的支持RKMPP的FFmpeg移植

    没办法了,我们自己进行编译一下吧,而且飞凌官方也给我们提供具体的移植过程,OK3588 5.10.66 Forlinx Desktop20.04 移植ffmpeg,不过也可以按照我这里面来进行
    发表于 12-30 08:57

    【OK210申请】物联网控制器,实时视频项目

    申请理由:已买ok6410, 对比一下性能。 希望推荐给同事和朋友。作为M2M team培训的开发板。项目描述:1,移植ffmpeg, ffserver vlc等 流媒体服务器。 2,使用linaro构建rootfs。3,机器人控制等。
    发表于 06-29 21:25

    iTOP-iMX6ULL开发板-FFmpeg移植

    将其转化为流的多媒体视频处理工具,拥有视频采集功能、视频格式转换、视频抓图等功能。本文档介绍如何将 ffmpeg 移植到 ARM 平台。开发板使用迅为i.MX6ULL终结者和USB免驱摄像头,交叉编译
    发表于 09-04 10:28

    如何将ffmpeg移植到ARM平台

    ffmpeg移植到ARM平台。开发板使用迅为i.MX6ULL终结者和USB免驱摄像头,交叉编译工具为arm-linux-gnueabihf,yocto Qt5文件系统。
    发表于 12-28 06:24

    怎么实现ffmpeg解码器到龙芯3B的移植

    本文实现了ffmpeg解码器到龙芯3B的移植,并针对龙芯3B实现了对向量扩展指令支持的特点,对ffmpeg解码器进行了手工向量化。
    发表于 06-02 06:57

    迅为imx6开发板QT系统移植FFmpeg-编译x264

    ffmpeg 移植到ARM 平台。相关的配套资料在网盘资料的“iTOP-i.MX6 开发板资料汇总(不含光盘资料)\08_iTOP-i.MX6 开发板 Linux 系统开发资料\09-Linux 系统移植
    发表于 10-14 11:25

    迅为imx6开发板QT系统移植FFmpeg移植到ARM开发板和测试

    我们通过 ssh 将_x264_install 下的库文件拷贝到开发板的/lib/目录下,大家也可以使用 nfs 或者 U 盘拷贝文件到开发板,如下图所示:将_ffmpeg_install/lib
    发表于 10-28 11:18

    ffmpeg第三方库如何在harmony 3.0上编译跑通?

    该如何编译,目前是没有config.h文件的。因为纯新手很多基础都不懂,之前看过连老师在openharmony 1.0 上的第三方库移植,用的是hi3861,但是我尝试了一下移植ffmpeg到1.0
    发表于 12-20 13:16

    Purple Pi R1 FFMPEG移植与测试

    FFMPEG移植与测试下载源码git clone https://github.com/aaron201912/ffmpeg.git将ffmpeg-master.zip 放到Ubun
    发表于 09-06 15:22

    介绍FFmpeg是什么?与关于FFmpeg的问题回答

    FFmpeg诞生于十几年前,最初是作为一个MPlayer播放器的一个子项目出现。因为当时的播放器有需要支持各种各样解码的需求, 其中有一位Mplayer的开发者看到了这样的需求,于是编写了FFmpeg
    的头像 发表于 07-28 09:10 2.4w次阅读
    介绍<b class='flag-5'>FFmpeg</b>是什么?与关于<b class='flag-5'>FFmpeg</b>的问题回答