三、FFmpeg安装

三、FFmpeg安装1 FFmpeg 介绍 FFmpeg 是一个完整的 跨平台的解决方案 用于记录 转换和流化音 视频 FFmpeg 采用 LGPL 或 GPL 许可证 提供了录制 转换及流化音 视频的完整解决方案 其包含了非常先进的音 视频编解码库 libavcodec FFmpeg 是在 Linux 平台下开发的但是它同样也可以在其他操作系统环境中编译运行 包扩 Windows MacOS 等系统 这个项目最早是由 FabriceBella 发起的 在 2004 年至 2015 年由 MichaelNiede

1. FFmpeg介绍

2. FFmpeg组件

  • libavutil是一个包含简化编程功能的库,包括随机数生成器、数学例程、核心多媒体使用程序等。
  • libavcodec是一个包含解码和编码器的音/视频编解码器的库。
  • libavformat是一个包含用于多媒体容器格式的demuxers和muxers的库。
  • libavdevice是一个包含输入和输出设备的库,用于抓取和呈现许多常见的多媒体输入/输出软件框架,包括Video4Linux、Video4Linux2、VFW和ALSA。
  • libavfilter是一个包含媒体过滤器的库。
  • libswscale是一个执行高度优化的音频重采样、rematrixing个实例格式转换操作的库。
  • libpostproc是一个用于后期效果处理的库。

3. 所支持的协议

FFmpeg锁支持的协议包括:HTTP、RTP、RTSP、RealMedia RTSP/RDT、TCP、UDP、Gopher、RTMP、RTMPE、RTMPTE、RTMPS、SDP、MMS over TCP。

4. 安装

1. 下载

2. 通过xftp将文件上传至服务器

在这里插入图片描述

3. 解压

[root@localhost download]# tar -jxvf ffmpeg-4.1.8.tar.bz2  

4. 配置与安装

执行安装命令:

[root@localhost download]# cd ./ffmpeg-4.1.8/ [root@localhost ffmpeg-4.1.8]# ./configure --prefix=/usr/local/ffmpeg [root@localhost ffmpeg-4.1.8]# make && make install 

在这里插入图片描述
如果出现以上问题请看这一步,如果没有问题则可以跳过这一步。

4.1 问题原因

以上报错原因为没有NASM/YASM或其版本太旧导致的问题。

  • YASM是一个完全重写的NASM汇编。目前,它支持x86和AMD64命令集。
  • NASM是一款基于80×86和x86-64平台的汇编语言编译程序,其设计初衷是为了实现编译器程序跨平台和模块化的特性。

4.2 安装YASM

[root@localhost download]# tar -zxvf yasm-1.3.0.tar.gz  [root@localhost yasm-1.3.0]# cd ./yasm-1.3.0/ [root@localhost yasm-1.3.0]# ./configure --prefix=/usr/local/yasm [root@localhost yasm-1.3.0]# make && make install 

将YASM添加到环境变量中:

[root@localhost yasm-1.3.0]# vim /etc/profile # 文件输入一下内容 export YASM=/usr/local/yasm/ export PATH=$PATH:$YASM/bin 

刷新一下配置文件:

[root@localhost yasm-1.3.0]# source /etc/profile 

YASM安装完毕,再次执行ffmpeg安装命令:

[root@localhost ffmpeg-4.1.8]# ./configure --prefix=/usr/local/ffmpeg [root@localhost ffmpeg-4.1.8]# make && make install 

这时应该就安装成功了。

5. 添加FFmpeg到环境变量

执行命令:

[root@localhost ffmpeg-4.1.8]# vim /etc/profile 
[root@localhost ffmpeg-4.1.8]# source /etc/profile 

检查是否配置成功:

[root@localhost ffmpeg-4.1.8]# ffmpeg -version 

在这里插入图片描述
安装成功。

5. FFmpeg的配置

FFmpeg可以选择多种音/视频编码器对媒体进行渲染。下面介绍几种常用的视频编码器。

1. libx264

[root@localhost ffmpeg-4.1.8]# ffmpeg -i /tmp/ng.mp4 -vcodec libx264 -acodec aad -f flv rtmp://192.168.5.133:1935/mylive/66 

2. libx264安装

重新配置及编译安装FFmpeg,将新的libx264配置到FFmpeg中。

[root@localhost ~]# cd /opt/download/ffmpeg-4.1.8/ [root@localhost ffmpeg-4.1.8]# ./configure --prefix=/usr/local/ffmpeg --enable-libx264 --enable-gpl 

在这里插入图片描述
报错,因为x264会依赖NASM的汇编加速,因此,这里先安装NASM。如果不安装NASM,则会报错:Minimum version is nasm-2.13。

2.1 安装NASM

2.2 解压与安装

[root@localhost ffmpeg-4.1.8]# cd /opt/download/ [root@localhost download]# tar -zxvf nasm-2.14.tar.gz  [root@localhost download]# cd ./nasm-2.14/ [root@localhost nasm-2.14]# ./configure --prefix=/usr/local/nasm [root@localhost nasm-2.14]# make && make install 

安装成功。

2.3 配置环境变量

[root@localhost nasm-2.14]# vim /etc/profile 

在这里插入图片描述
刷新配置文件:

[root@localhost nasm-2.14]# source /etc/profile 

2.4 安装x264

[root@localhost download]# tar -jxvf x264-master.tar.bz2  [root@localhost download]# cd ./x264-master/ [root@localhost x264-master]# ./configure --prefix=/usr/local/x264 --enable-shared # 配置动态库 [root@localhost x264-master]# make && make install [root@localhost x264-master]# cd /opt/download/ffmpeg-4.1.8/ [root@localhost ffmpeg-4.1.8]# ./configure --prefix=/usr/local/ffmpeg --enable-libx264 --enable-gpl 

在这里插入图片描述
此时依旧报错找不到x264。
通过命令查看ffmpeg日志信息:




[root@localhost ffmpeg-4.1.8]# tailf -n 500 /opt/download/ffmpeg-4.1.8/ffbuild/config.log  

在这里插入图片描述
报错找不到x264文件目录。因为我们在安装的时候手动选择了安装路径–prefix=/usr/local/x264,因此,x254目录下的lib和include目录中的文件无法被FFmpeg自动发现。
配置ffmpeg pkgconfig默认路径的环境变量:




[root@localhost ffmpeg-4.1.8]# vim /etc/profile 

在这里插入图片描述
刷新一下配置文件:

[root@localhost ffmpeg-4.1.8]# source /etc/profile # 修改ld.so.config文件 [root@localhost ffmpeg-4.1.8]# vim /etc/ld.so.conf # 文件中加入x264 下的lib路径就行 /usr/local/x264/lib //执行刷新命令 [root@VM-24-16-centos ffmpeg-4.1.8]# sudo ldconfig 

在这里插入图片描述
执行命令:

[root@localhost ffmpeg-4.1.8]# ./configure --prefix=/usr/local/ffmpeg --enable-libx264 --enable-gpl [root@localhost ffmpeg-4.1.8]# make && make install 

到这里就安装成功了。

6. 基础配置信息

无论是rtmp标签,还是server标签,甚至是application标签,都可以算是核心配置信息中的成员。因为他们的存在,影响着整个NRM,必须要配置。

1. rtmp

rtmp是根级标签,并且是配置中最关键的标签。

rtmp{ 
    ... } 

2. server

一个rtmp中可以包含多个server标签,每个server标签可以通过端口隔离。

rtmp{ 
    server { 
    listen 1935; } server { 
    listen 1955; } } 

3. listen

listen只能被放在server中,指定了所在server标签绑定的端口信息。

 server { 
    listen 1935; } 

4. application

application可以被放在server标签中,可以包含多个application并通过applicationName来隔离。

rtmp{ 
    server { 
    listen 1935; application A{ 
   } application B{ 
   } } server { 
    listen 1955; application A{ 
   } application B{ 
   } } } 

5. ping和ping_timeout

ping和ping_timeout可以被放在rtmp和server中,用于主动检查心跳,将各种心跳包发送到客户端。ping_timeout中设置的值为超时回复时间,如果在超时回复时间内没有得到回复,则关闭客户端。ping默认为1分钟,timeout默认为30秒,当ping为0时,关闭此功能。

 ping 15s; ping_timeout 5s; 

6. ack_window

ack_window可以被放在rtmp和server中,用于设置rtmp确认窗口大小,默认为字节。

 ack_window ; 

7. chunk_size

chunk_size可以被放在rtmp和server中,用于设置流中的块大小,默认时4096字节。这个值越大,CPU开销越低,但是这个值不能小于128字节。

 chunk_size 4096; 

8. max_message

max_message可以被放在rtmp和server中,用于设置输入数据保温最大尺寸。所有输入数据都会被分割成报文(然后进一步被分割为块)。报文在处理结束之前会被存放在内存中。从理论上讲,如果接受到的报文很大,则可能会影响服务器的稳定性。报文默认值为1MB,此时可以满足大多数情况。

 max_message 1M; 

9. buflen

buflen可以被放在rtmp和server中,用于设置缓冲区长度。

 buflen 5s; 

10. rtmp_auto_push

rtmm_auto_push可以设置当多任务时,分发任务到多个进程。

 rtmp_auto_push on; 

11. rtmp_auto_push_reconnect

rtmp_auto_push_reconnect用于设置rtmp_auto_push开启并因超时被销毁时,进行重连。

 rtmp_auto_push_reconnect 1s; 

12. meta

meta可以被放在rtmp,server和application中,用于将元数据信息发送到客户端,默认为打开。

 meta copy; 

13. interleave

interleave可以被放在rtmp,server和application中,用于交叉模式,此模式下音/视频在同一个chunk stream上,默认为关闭。

 interleave on; 

14. wait_key

wait_key可以被放在rtmp,server和application中,用于使视频流从一个关键帧开始,默认为关闭。

 wait_key on; 

15. wait_video

wait_video可以被放在rtmp,server和application中,用于禁用音频,知道第一个视频帧发送,默认为关闭。可以与wait_key结合,使客户端接受视频关键帧。然而,着通常会增加链接延迟。可以在编码器中调整关键帧间隔以减少延迟。

 wait_video on; 

16. sync

sync可以被放在rtmp,server和application中,用于同步音频流和视频流。如果客户端带宽不足以接受到服务器的数据,那么一些帧会被服务器删除。这导致了音频流和视频流不同步。但时间戳差异超过指定为同步参数的值时,则将发送一个绝对帧,默认为300ms。

 sync 10ms; 

17. allow,deny

allow,deny可以被放在rtmp,server和application中,用于设置白名单和黑名单。

 # 允许127.0.0.1推流 allow publish 127.0.0.1; #阻止所有推流,allow publish中的配置除外 deny publish all; # 允许192.168.0.0/24 拉流 allow play 192.168.0.0/24; # 阻止所有拉流,allow play的配置除外 deny play all; 

18. play

play可以被放在rtmp,server和application中,用于播放本地或远程点播文件。

 application vod { 
    play /var/flvs; } application vod_http { 
    play http://myserver.com/vod } application vod_mirror { 
    # 当第一个地址无法播放的时候,会访问第二个地址 play /var/local_mirror http://myserver.com/vod; } 

19. max_connections

max_connections可以被放在rtmp,server和application中,用于设置最大连接数。

 max_connections 1000; 

20. access_log

access_log可以被放在rtmp,server和application中,用于通常来说,rtmp日志是和nginx/logs/access.log文件存放在一起的,通过access_log可以单独存放rtmp_log。

 access_log logs/rtmp_access.log; 

21. log_format

log_format: 用于自定义日志格式。

  • connection:连接数
  • remote_addr:客户端地址
  • app_application:名称
  • name:最后一个串流码名称
  • args:最后一个播放的流/推流参数
  • flashver:flash版本
  • swfurl:swf地址
  • tcurl:tc地址
  • pageurl:客户端页面地址
  • command:推/拉流中命令:none,play,publish,play+publish
  • bytes_sent:发送到客户端的字节数
  • bytes_received:接受到客户端的字节数
  • time_local:连接关闭时间
  • session_time:连接持续时间
  • session_readable_time:格式化日期
  • msec:UNIX时间戳

ffmpeg的基础与安装就到这里了,欲知后续如何请看下章博客。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218921.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午11:09
下一篇 2026年3月17日 下午11:10


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号