当前位置:网站首页 > 技术博客 > 正文

linux交叉编译工具安装



当下直播应用很火,在音视频领域,FFmpeg相当知名。可能你用的一些视频播放器背后都有它的身影。FFmpeg是一个开源的跨平台多媒体处理工具,可以用于处理音视频流、转码、封装、解封装等操作,且支持多种格式和协议。它的视频采集功能也非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,且支持直播应用。

1. 转码:将一种格式的音视频文件转换为另一种格式,例如将MP4文件转换为AVI文件,或将H.264编码的视频转换为VP9编码的视频等。(解码,音视频播放器内核)

2. 剪辑:从一个音视频文件中截取出一段或多段内容,例如将一个长视频剪辑成多个短视频,或将一段音频剪辑出来作为铃声等。

3. 抓取:从摄像头或屏幕等设备中抓取音视频流,例如将摄像头的视频流抓取下来进行录制或直播等。(音视频采集)

4. 处理:对音视频流进行处理,例如添加水印、字幕、特效等,或进行降噪、去抖动、降低码率等处理。

5. 分离和合并:将一个音视频文件中的音频和视频分离出来,或将多个音视频文件合并成一个文件。(格式转换)

6. 直播:将音视频流实时推送到服务器上,或从服务器上拉取音视频流进行实时播放。

举例:在Linux平台上,ffmpeg对V4L2的视频设备提供了很好的支持。如: 

 

以上命令表示:采集10秒钟视频,对video4linux2视频设备进行采集,采集QCIF(176*144)的视频,每秒8帧,视频设备为/dev/video0,视频编码为H263,输出格式为RTP,后面定义了IP地址及端口,将该码流所对应的SDP文件重定向到/tmp/ffmpeg.sdp中,将此SDP文件上传到流媒体服务器(如live555)就可以实现直播了。

FFmpeg提供了libavformat库,其中包含了RTSP协议的实现,可以直接使用该库来拉取RTSP流。在使用FFmpeg拉取RTSP流时,可以使用类似如下的命令:

 

其中, rtsp://xxx.xxx.xxx.xxx/xxx 是RTSP流的URL地址, 表示直接复制流数据,不进行编解码, 是输出文件名。除了命令行方式,FFmpeg还提供了API接口,可以在程序中使用该接口来拉取RTSP流。

总之,FFmpeg是一个功能强大的多媒体处理工具,可以用于处理各种音视频文件,提供了丰富的功能和API,可以满足各种多媒体处理需求。

Download FFmpeg

GitHub - FFmpeg/FFmpeg: Mirror of https://git.ffmpeg.org/ffmpeg.git

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源工具组合。

它包含一系列的模块。

 1. libavcodec:音视频编解码库,提供了多种编解码器,可以支持多种音视频格式的编解码操作。 
 
2. libavformat:音视频封装和解封装库,提供了多种封装格式的支持,可以读取和写入多种音视频文件格式。 
 
3. libavfilter:音视频过滤器库,提供了多种音视频过滤器,可以对音视频流进行各种处理,如添加水印、调整亮度、对比度等。 
 
4. libavdevice:音视频输入输出设备库,提供了多种输入输出设备的支持,如摄像头、麦克风等。 
 
5. libswscale:视频图像缩放库,提供了多种图像缩放算法,可以对视频图像进行缩放操作。 
 
6. libswresample:音频重采样库,提供了多种音频重采样算法,可以对音频进行重采样操作。

7.libavutil:包含一些公共的工具函数。

8. libswscale:用于视频场景比例缩放、色彩映射转换。

9.libpostproc:用于后期效果处理。

10.ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等。

11.ffsever:一个 HTTP 多媒体即时广播串流服务器。

12.ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示。

这些模块可以单独使用,也可以组合使用,实现各种音视频处理操作。例如,可以使用libavcodec进行音视频编解码,使用libavformat进行音视频封装和解封装,使用libavfilter进行音视频过滤操作等。FFmpeg提供了丰富的模块组合。

以下是使用ffmpeg编译的步骤:

1.首先,您需要下载ffmpeg的源代码。您可以从官方网站(https://ffmpeg.org/download.html)下载最新版本的源代码。 

2. 下载完成后,您需要解压缩源代码。可以使用以下命令解压缩: tar -zxvf ffmpeg-xxx.tar.gz 其中,xxx是ffmpeg版本号。

3. 接下来,您需要安装一些编译工具和依赖库。您可以使用以下命令安装: sudo apt-get install build-essential sudo apt-get install libmp3lame-dev libx264-dev libopus-dev libvpx-dev libssl-dev

4. 安装完成后,您可以进入解压缩后的ffmpeg目录,并使用以下命令编译: https://blog.csdn.net/yyz_1987/article/details/configure --enable-gpl --enable-libmp3lame --enable-libx264 --enable-libopus --enable-libvpx --enable-openssl

make, make install

以上命令将启用一些常用的编解码器和库,如MP3、H.264、Opus和VP8/VP9。如果您需要其他功能,请查看ffmpeg文档并相应地配置。libopus是一个开源的音频编解码器,它提供了高质量的语音和音乐编码。libvpx是一个开源的视频编解码器,它提供了高质量的视频编码和解码。它们都是在ffmpeg中支持的编解码器之一。 libssl是一个加密库,它提供了安全的套接字层(SSL)和传输层安全(TLS)协议的实现。在ffmpeg中使用libssl可以支持HTTPS协议。 如果您需要支持HTTPS协议,则需要安装libssl。如果您不需要支持HTTPS协议,则可以不安装libssl。

5. 编译完成后,您可以使用以下命令验证是否成功安装: ffmpeg -version 如果成功安装,将显示ffmpeg的版本信息。  

注:(视频用 libx264,音频用 libmp3lame。但是基于默认配置而编译的 ffmpeg 不包含这俩编码器,他们属于第三方编码器,linux的x64直接sudo安装依赖即可,但若交叉编译,则需要自己下载这俩编码器的源码,自己先编译成库供FFmpeg使用。)

依赖的三方库地址

lame:

官网在这里 https://lame.sourceforge.io/
页面链接到这里:https://sourceforge.net/projects/lame/files/lame/
本人下载的版本是 3.100 ( lame-3.100.tar.gz )

x264:

以下使用的FFmpeg,用的 ffmpeg 4.4版本为例。

fmpeg的常用编译参数如下:

- --enable-shared:启用共享库的编译,生成.so文件,可以被其他程序调用。

- --enable-static:启用静态库的编译,生成.a文件,可以被其他程序静态链接。 - --enable-gpl:启用GPL许可证的代码。

- --enable-version3:启用LGPLv3许可证的代码。

- --enable-libx264:启用x264编解码器。

- --enable-libx265:启用x265编解码器。

- --enable-libvpx:启用VP8/VP9编解码器。

- --enable-libopus:启用Opus编解码器。

- --enable-libmp3lame:启用MP3编码器。

- --enable-libfdk-aac:启用AAC编码器。

- --enable-libvorbis:启用Vorbis编码器。

- --enable-libtheora:启用Theora编码器。

- --disable-yasm:禁用yasm汇编优化。

- --disable-asm:禁用汇编优化。

其中,--enable-shared、--enable-static、--enable-gpl、--enable-version3、--disable-yasm这些选项是比较重要的。

如果需要使用x264、x265、VP8/VP9、Opus等编解码器,则需要启用相应的选项。如果需要精简体积和提高速度,可以禁用一些不必要的编解码器和过滤器,例如--disable-libvpx、--disable-libtheora等。但是,禁用汇编优化可能会影响编解码性能,因此x86或x64下不建议禁用汇编优化。若是嵌入式平台移植需要,则需要禁用汇编。

配置参数

 

注:--enable-gpl含义,该选项启用了GPL许可证的代码。--enable-version3选项是与--enable-gpl选项相关的。如果您启用了--enable-gpl选项,那么您可以选择启用--enable-version3选项,以允许使用LGPLv3许可证的代码。LGPLv3是一种自由软件许可证,它比GPLv2更严格,并且允许链接到不同的库。如果您不启用--enable-version3选项,则只能使用LGPLv2.1许可证的代码。

如果不启用--enable-gpl和--enable-version3选项,您仍然可以编译成功,但将无法使用一些GPL许可证或LGPLv3许可证的代码,例如x264、x265、libvpx等编解码器和一些过滤器。这意味着您将无法进行H.264、H.265等常见的视频编码和解码,也无法应用某些过滤器。 如果您只需要使用一些基本的编解码器和过滤器,那么禁用--enable-gpl和--enable-version3选项可能不会对您的应用程序造成太大影响。但是,如果您需要使用某些高级编解码器或过滤器,则必须启用这些选项以便使用它们。此外,如果您使用了启用了GPL许可证的代码,那么您的代码也必须使用GPL许可证发布。

--extra-cflags、 --extra-ldflags 是显示指示模块的头文件与库文件的位置。

--extra-libs 是指定链接到哪个库文件,如果不指定,应该是使用在配置文件里已经设置了的默认值。

在x64平台西编译很简单,安装两个依赖库:

 

执行configure配置: 

 

如果要支持alsa声卡设备,还需要安装依赖:sudo apt-get install  libasound-dev  

并增加配置选项:--enable-alsa:开启ALSA音频驱动程序支持;

如果要想生成ffplay,需要SDL2库的支持。sudo apt-get install libsdl2-dev 

 日志:

 

交叉编译工具链,环境变量配置:

 

LAME库的交叉编译

 在sourceforge下载最新版本,我下载的版本是3.100。

 

你以为这就正常了吗?注意这个有个坑啊,指定的cc=无效,指定的--host才是交叉工具链的前缀。我的工具链是arm-fsl-linux-gnueabi-gcc,所以--host需要改为如下:

 

 x264库交叉编译

下载地址:x264, the best H.264/AVC encoder - VideoLAN  

 

ffmpeg交叉编译

 

测试验证

FFmpeg —— 录制本地麦克风音频进行UDP推流,并进行拉流音频播放

使用ffmpeg命令采集音频

其次,我们需要知道,麦克风这个文件格式是什么?对于麦克风这种硬件设备,与其说是格式,我更觉得这是驱动程序。在linux上,通用的音频驱动程序,就是alsa。

这样的话,我们很容易形成了下面这样的命令:
ffmpeg -f alsa -i hw:0 out.wav
这里, -f 指定格式(驱动程序)为alsa, -i 指出文件路径,这里是麦克风地址“hw:0”,最后一个是输出文件路径,这里为当前路径下,保存为 out.wav文件。

我们在终端运行这条命令之后,然后对着麦克风讲话“”,然后按q结束录音,就可以看到当前路径下面,生成了 out.wav。然后我们使用
ffplay out.wav
播放这段录音,就可以听到刚刚我们喊的“”。

FFmpeg拉取服务端的视频流

 

Windows下编译FFmpeg详解_ffmpegwindows编译_zhouyongku的博客-CSDN博客

FFmpeg 详尽编译过程_ffmpeg如何编译_学术袁的博客-CSDN博客

ffplay Documentation

用 VS2019 编译带 libx264, libmp3lame 的 FFmpeg 库_ffmpeg libmp3lame 编译_fly4free的博客-CSDN博客

FFmpeg简介_贝勒里恩的博客-CSDN博客

ubuntu18.04编译FFMPEG_ubuntu18.04下编译ffmpeg_papaofdoudou的博客-CSDN博客

Linux下交叉编译FFMPEG与X264库:目标板友善之臂Tiny4412开发板_EXYNOS4412(ARMV7_32位)-腾讯云开发者社区-腾讯云 交叉编译多平台 FFmpeg 库并提取视频帧 - 知乎

FFmpeg进行笔记本摄像头+麦克风实现流媒体直播服务,展示在浏览器上。_ffmpeg打开麦克风_jrongweb的博客-CSDN博客

EasyDarwin+FFmpeg实现本地音视频推流_ffmpeg单独音频推流_屠龍之技的博客-CSDN博客

树莓派利用ffmpeg将外接USB麦克风的音频实时推流到rtmp服务器,实现在任意设备上实时监听音频 - 芒果爱吃胡萝卜

读取麦克风的核心代码及详解_FFmpeg4.3开发系列之10:采集麦克风AAC+MP3编码存储并直播实战_C/C++视频-51CTO学堂

linux下使用ffmpeg采集音频数据_ffmpeg捕捉麦克风 linux_snail_hunan的博客-CSDN博客

ffmpeg精简_ffmpeg 精简_且行且探索的博客-CSDN博客

 ffmpeg精简_wanxiu.的博客-CSDN博客

嵌入式开发(四):海思Hi3559AV100交叉编译ffmpeg_夜风里唱的博客-CSDN博客

LAME的交叉编译 - 知乎

ffmpeg交叉编译_平平无奇的小垃圾的博客-CSDN博客

 Linux下交叉编译FFMPEG与X264库:目标板友善之臂Tiny4412开发板_EXYNOS4412(ARMV7_32位)-腾讯云开发者社区-腾讯云

嵌入式平台Portaudio的交叉编译_portaudio lib库_遇逆境处之泰然的博客-CSDN博客

PortAudio - an Open-Source Cross-Platform Audio API

libsndfile 用法简介_liyuanbhu的博客-CSDN博客

嵌入式linux/鸿蒙开发板(IMX6ULL)开发(一) 嵌入式Linux开发基本概念以及开发流程介绍-阿里云开发者社区

正点原子imx6ull开发板视频监控项目实战系列5: 摄像头(V4L2)和声卡(ALSA)接口简介_imx6ull 摄像头_One Piece&的博客-CSDN博客

Linux---ALSA音频工具arecord、aplay、amixer使用_linux aplay_面朝大海0902的博客-CSDN博客正点原子imx6ull开发板视频监控项目实战系列5: 摄像头(V4L2)和声卡(ALSA)接口简介_imx6ull 摄像头_One Piece&的博客-CSDN博客 Linux驱动开发|音频驱动_51CTO博客_android驱动开发和linux驱动开发

 正点原子Linux第五章 I.MX6U-ALPHA开发平台介绍 - 知乎

正点原子ALPHA开发板核心资源分析_正点原子阿尔法开发板怎么样_ManGo CHEN的博客-CSDN博客 正点原子linux阿尔法开发板使用—Linux设备树_配置linux开发板设备树_梅山剑客的博客-CSDN博客

正点原子linux阿尔法开发板使用——IIC驱动_梅山剑客的博客-CSDN博客

Linux 4G 通信实验_嵌入式学习者。的博客-CSDN博客

正点原子Linux第七十一章Linux 4G通信实验 - 知乎 

版权声明


相关文章:

  • 计算机网络的定义及组成2025-03-13 09:29:59
  • pymysql sqlalchemy2025-03-13 09:29:59
  • 流量监控是干嘛的2025-03-13 09:29:59
  • 数字图像基本处理实验2025-03-13 09:29:59
  • ds3231各型号区别2025-03-13 09:29:59
  • ce认证有哪几家认证机构2025-03-13 09:29:59
  • 交叉编译教程2025-03-13 09:29:59
  • 工具的种类和用途2025-03-13 09:29:59
  • 小区内私搭乱建怎么界定2025-03-13 09:29:59
  • swing的布局2025-03-13 09:29:59