Nginx-rtmp-module 模块应用

embedded/2024/12/21 5:49:40/

本章会介绍FFmpeg 的具体应用与安装配置、 NRM常用配置字典,以及直播系统中常用的 架构体系。

1. FFmpeg 介绍

FFmpeg 是一个完整的跨平台的解决方案,用于记录、转换和流化音/视频FFmpeg 采用 LGPL 或 GPL许可证,提供了录制、转换及流化音/视频的完整解决方案。 其 包含了非常先进的音/视频编解码库 libavcodec。 FFmpeg 是在 Linux 平台下开发的, 但是它同样也可以在其他操作系统环境中编译运行,包 括Windows、 Mac OS X 等系统。这个项目最早是由 Fabrice Bellard 发起的,在 2004 年至 2015 年由Michael Niedermayer 主要负责维护。 许多 FFmpeg 的开发人员都来自 MPlayer 项目组,而 且当前FFmpeg 也是被放在 MPlayer 项目组的服务器上的。 其名称来自 MPEG 视频编码标准, “FF”代表“FastForward”。

2. FFmpeg组件

FFmpeg 的组件包含 libavcodec、 libavutil、 libavfonnat、、 libavdevice、 libswscale 和 libswresample (这些都可以应用于应用程序),以及ffmpeg、 ffplay 和 ffprobe (可以被终端用 户进行编码和播放)

4. 示例

转码一个视频码率为4Mbps:

ffmpeg -i input.avi -b 4Mbps output.avi

转码一个视频为24帧

ffmpeg -i input.avi -r 24 output.avi

(1)FFmpeg 调用 libavformat 库(包含 demuxers)来读取输入文件,并获取包含编码数据 的数据包。

(2 )将编码的信息包传递给解码器。

(3 )解码器产生未压缩的rj快,可以通过过滤做进一步处理。

(4 )过滤后,帧被传递给编码器, 编码器将其编码井输出编码的数据包。 (5 )最后,这些数据包被传递给muxer, 它将编码的包写入输出文件中

FFmpeg 的安装

本节介绍FFmpeg 的安装及组件的选择。

1. 下载 先下载 ffmpeg-x.x.x.tar.bz2 (本书使用的版本为 ffmpeg-3.4. l .tar.bz2 )或通过 wget 命令在 Linux 系统中直接下载。

2. 解压 通过rz命令将下载文件上传到/download 目录中: tar - xjvf ffmpeg- 3. 4.l.tar.bz2 mv ffmpeg-3 .4.l .tar.bz2 ffmpeg cd f fmpeg

3. 配置 进行如下配置

/configure --prefix=/usr/local/ ffmpeg make & make install

基础配置信息

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

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

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

rtmp{

        server

        {

        listen 1935;

        }

        server

        {

                listen 1935;

                }

        }

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

  server

        {

                listen 1935;

                }

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

rtmp

{

        server

{

listen 1935;

application A{

}

application B{

}

server

{

listen 1934;

application A{

}

application B{

}

}

#rtmp : //ip : 1934/A 与 rtmp: //ip: 1935/A 是 server 隔离 #rtmp : //ip : 1934/A 与 rtmp: //ip : 1934/B 是 application 隔

5. ping he ping_timeout

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

6. ack_window

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

RTMP 消息包-共分成 3 种类型。

第一类是命令(通知〉消息, 第二类是音频消息, 第三 类是视频消息

而窗口大小则属于第一类消息, 即命令消息。 窗口大小的本意是让对端了解与 本端的通信状况,用以控制媒体传输流量的一种方案。通常,我们从RTMP服务器中拉取RTMP 流到本地时, 在协商的过程中, 会发送Ox05 和Ox06消息包,即带宽值通知, 通常设为2.5MB。 在实际的拉流过程中,我们通常隔一段时间就得向服务器报告我们已经从服务中收到了多少数 据,此种报告就是窗口大小,即 ack size 确认。 在实际开发的过程中, 通常当接收的数据量接 近于3倍带宽值 C2.5MBx3)时,向服务器报告一下目前己接收了多少数据。 在接收端的TCP协议缓存中还有多少剩余空间,发送端必须保证发迭的数据不超过这个剩 余空间,以免造成缓冲区溢出,这个窗口是接收端用来限制流量的。在传输过程中, 窗口大小 与接收端的进程取出数据的快慢有关。 ack window 5000000;

7. chunk size

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

8. max_ message

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

9. buflen

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

10. rtmp_auto_push

rtmp _auto _push 用于设置当多任务进行时,分发任务到多个进程。

11. rtmp_auto_push_reconnect

rtmp _auto _push_reconnect 用于设置当 rtrnp_auto_push 开启并因超时被销毁时, 进行重连

12. meta

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

13. interleave

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

interleave on;

14. wait_key

wait_ key 可以被放在 门mp, server 和 application 中,用于使视频流从一个关键帧开始,默 认为关闭。 wait key on ;

15. wait video

wait_ video 可以被放在 此mp, server 和 application 中,用于禁用音频, 直到第一个视频帧发 送,默认为关闭。可以与wait_key 结合,使客户端接收视频关键帧。然而,这通常会增加连接 延迟。 可以在编码器中调整关键帧间隔以减少延迟。最新版本的IE浏览器需要设置这个选项才 能正常播放。 wait video on;

16. sync

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

17. allow, deny

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

18. play

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

19. max connections

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

20. access一log

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


http://www.ppmy.cn/embedded/147455.html

相关文章

HYPRE: BoomerAMG选项和优化

文章目录 BoomerAMG选项和优化OverviewAMG AlgorithmOptionsTurning on BoomerAMGStrong ThresholdGoing DeeperTimingMore OptionsMax LevelsCoarsen TypeAgressive CoarseningInterpolation TypeP MaxPutting it All Together Full List of Options BoomerAMG选项和优化 Hyp…

解锁 SSM 与 Vue 在新锐台球厅管理系统设计与实现中的融合密码

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适…

static_cast与dynamic_cast的区别

主要区别如下 (1)作用阶段方面:static_cast在编译时转换;dynamic_cast在运行时检查类型。 (2)转换目标:static_cast用于C语言强制转换可替代方案,可能存在信息丢失,没有…

Hive解决数据倾斜

一、数据倾斜概念 数据倾斜(Data Skew)问题是指在分布式计算系统中,由于某些数据分布不均匀,导致某些节点处理的数据量远远大于其他节点,从而引起性能瓶颈、计算延迟甚至计算失败的现象。 在Hive中,在处理分组聚合(Group By)或者多…

工业大数据分析算法实战-day10

文章目录 day10机器学习其他视角负载模式、并行化计算新范式 时序算法简介 day10 今天是第10天,昨日主要是针对关联规则算法、深度学习算法进行阐述,讲解了常见的关联规则以及常见的深度学习算法,今日主要是针对第三章节最后一节机器学习算法…

鸿蒙Next条件渲染用法总结

在鸿蒙Next开发中,ArkTS提供了强大的渲染控制能力,其中条件渲染(if/else)可根据应用不同状态显示相应UI内容。以下是对其用法的详细总结。 一、使用规则 1. 语句支持 支持if、else和else if语句,可灵活构建条件判断…

解决Ubuntu下蓝牙耳机连接成功但无声音输出问题

sudo apt install blueman -y 输入以上命令,下载blueman,在左下角打开应用程序,搜索blue, 打开blueman后连接蓝牙耳机即可

10_HTML5 MathML --[HTML5 API 学习之旅]

HTML5 中的 MathML(Mathematical Markup Language)是一种用于在网页上显示复杂数学符号和公式的标记语言。它允许以结构化的方式描述数学表达式,从而确保公式能够被正确渲染,并且可以与其他Web技术如CSS、JavaScript等结合使用。 …