美文网首页
Nginx-rtmp-module(基础篇)

Nginx-rtmp-module(基础篇)

作者: Damon_He | 来源:发表于2020-03-07 17:07 被阅读0次

    目前市场上很多直播平台,已经步入全民直播的时代!作为开发者,Nginx-rtmp-module是一个上手简单但功能又不俗的学习切入点。

    1. Nginx-rtmp-module 简介

    Nginx-rtmp-module包含以下特性:

    • 支持RTMP、HLS、MPEG-DASH
    • 支持RTMP、HLS点播
    • 可将直播视频分段存储
    • 支持 H.264 视频编解码、AAC 音频编解码
    • 支持 FFmpeg 命令内嵌
    • 支持回调 HTTP
    • 可使用 HTTP 对直播进行删除、录播等控制
    • 具有强大的缓冲功能,可确保在效率与码率间达到平衡
    • 支持多种操作系统(Linux、MacOS、Windows)

    2. RTMP 协议与 HLS 协议

    RTMP(Real Time Messaging Protocol)实时消息传输协议,它是 Adobe 公司为 Flash播放器和服务器间传输音视频和数据而开发的私有协议。

    HLS(HTTP Live Streaming)是苹果公司的开发标准协议。最初是针对 iPhone、iPod、iTouch 和 iPad等移动设备而开发的。由于 HLS 协议是基于 HTTP的,因此它继承了很多 HTTP 的优点。

    2.1 RTMP 协议

    RTMP 协议是为了在 Adobe Flash 平台技术(包括 Adobe Flash Player 和l Adobe AIR)之间 高性能传输音/视频和数据而设计的。 RTMP 协议是一个开放的规范,通过此规范可以创建产品 和技术,可以通过 OpenAMF, SWF、 FLY 和 F4V 格式,提供与 Adobe Flash Play巳I 兼容的视/ 音频和数据。

    2.1.1 关键特性

    RTMP 协议是应用层协议,需要靠底层可靠的传输层协议(通常是 TCP) 来保证信息传输 的可靠性。 在建立完基于传输层协议的链接后, RTMP 协议也需要客户端和服务器端通过“握 手”来建立基于传输层连接之上的 RTMP 连接。 在连接上会传输一些控制信息,如 SetChunkSize 和 SetACKWindowSize。 其中 CreateStream 命令会创建一个 Stream 链接,用于传输具体的音/ 视频等数据,以及控制这些信息传输的命令信息。 RTMP 协议在传输时会对数据进行格式化, 这种被格式化的消息被称为 RTMP Message。 而在实际传输时,为了更好地实现多路复用、分 包和信息的公平性,发送端会把 Message 划分为带有 Message ID 的 Chunk。每个 Chunk 可能是 一个单独的 Message,也可能是 Message 的一部分,在接收端会根据 chunk 中包含的 data 的长 度、 message id 和 message 的长度,把 chunk 还原成完整的 Message,从而实现信息的收发。

    2.1.2 握手流程

    一个 RTMP 连接以“握手”开始。 这里的“握手”和其他协议的“握手”不一样。这里的 “握手”由 3 个固定大小的 chunk 组成,而不是由可变大小的带有头文件的 chunk 组成。

    客户端(发起连接的一方)和服务器端各自发送 3 个相同的块。这些块如果是客户端发送 的,则记为 C0、 C1和 C2,如果是服务器端发送的,则记为 S0、 S1 和 S2,如下图所示。


    rtmp握手.png

    2.1.3 交互流程

    参考上图

    • 客户端要等收到 S1 之后才能发送 C2
    • 客户端要等收到 S2 之后才能发送其他信息(控制信息和真实音/视频等数据)
    • 服务器端要等收到 C0 之后才能发送 S1
    • 服务器端必须要等收到 C1之后才能发送 S2
    • 服务器端必须要等收到 C2 之后才能发送其他信息(控制信息和真实音/视频等数据)。

    2.2 HLS 协议

    HLS 用于将实时和按需的音视频内容流到 iPhone、 iPad、 iPod Touch、 Apple TV 和 Mac 中。 HTTP 允许用户使用普通的 Web 服务器(而不是专门的流媒体服务器)轻松地将媒体内容部署到流中。

    HLS 流的行为类似于常规的 Web 流量。它们使用现有的缓存基础设施,如内容传递网络 (CDNS), 并可靠地通过典型的防火墙和路由器。
    HLS 可以适应可变的网络条件,动态地调 整回放,以匹配有线和无线连接的可用速度。除可靠和易于部署外, HLS 还支持的功能有: 关闭宇幕、快速转发和反向播放、备用音视频、插入广告,以及保护内容。

    在典型的 HLS 流中,支持 HLS 的视频编码器解决方案接收一个实时视频提要或分发的媒 体文件。编码器在不同的比特率、分辨率和质量级别上创建了多个版本(称为变体)的音视频。 然后编码器将这些变体分割成一系列的小文件,它们被称为媒体段。 与此同时, 编码器为每个 变量创建一个媒体播放列表文件,其中包含指向i亥变体的媒体段的 U也列表。编码器还创建了 一个主播放列表文件,其中包含对可变媒体播放列表的 URL 列表,以及控制流播放行为的描述 性标记。 在生成播放列表和片段时,编码器或自动脚本将文件上载到 Web 服务器或 CDN 中。 通过在 Web 页面中嵌入主播放列表文件的链接,或者创建自己的自定义应用程序来下载主播放 列表文件,用户可以提供对内容的访问 。

    3. Nginx-rtmp-module 的搭建

    参考 https://www.jianshu.com/p/cf7f0552ffe9

    相关文章

      网友评论

          本文标题:Nginx-rtmp-module(基础篇)

          本文链接:https://www.haomeiwen.com/subject/lnwcdhtx.html