1.如何理解 rtmp 通过 flv 格式推送音视频流(h264/aac)
如何理解 rtmp 通过 flv 格式推送音视频流(h264/aac)
如何理解 RTMP 通过 FLV 格式推送音视频流RTMP,全称为 Real Time Messaging Protocol,是 Adobe Systems 开发的协议,用于在 Flash 平台与支持 RTMP 协议的流媒体/交互服务器之间进行音频、视频和数据通信。该协议基于可靠传输的html源码和css源码有什么 TCP 协议,包含多种变体,广泛应用于实时流媒体通信。
### Nginx RTMP 模块的源码编译与配置
要启用 Nginx-rtmp-module,需手动下载、编译 Nginx 源码和安装构建工具(如 git、make、gcc)。源码查询具体步骤包括:
1. **下载 Nginx 源码**:使用 git 获取最新源码。
2. **编译 Nginx**:执行 make 命令生成可执行文件。
3. **下载 Nginx-rtmp-module**:获取特定 RTMP 支持的模块。
4. **安装依赖**:确保所有开发包已安装。
5. **配置 Nginx**:在配置文件中添加 rtmp 相关配置,如 ip、查询源码port 和应用名称。
6. **编译与安装**:根据配置进行编译并安装 Nginx。
7. **启动与停止**:通过服务管理器启动或停止 Nginx 服务。
### 推流与点播
- **推流**:使用 ffmpeg 将本地文件(如 test.mp4)推送给 RTMP 服务器,并指定推流格式为 flv。
- **点播**:通过 ffplay 播放推流内容,云源码或直接在 VLC 中输入 RTMP 推流地址进行播放。
### RTMP 协议工作原理
RTMP 建立过程包括 TCP 连接的创建和三个阶段的消息交互。RTMP 消息分为基本头部、消息头部和扩展时间戳三部分,格式定义在《rtmp_specification_1.0》中详细说明。
### RTMP 消息格式分析
- **基本头部**:长度为 1、云 源码2 或 3 字节,根据 fmt 和 cs id 字段确定。
- **消息头部**:长度动态变化,由 fmt 字段决定,范围从 字节到 0 字节不等。
- **扩展时间戳**:仅在基本时间戳溢出时使用,长度为 0 字节或 4 字节。
### 音视频 FLV 标签在 RTMP 中的使用
RTMP 流中嵌入 FLV 标签,如 h/AAC,可通过 ffmpeg 推流命令实现。分析显示,FLV 标签在 RTMP 消息中使用特定格式携带 H 和 AAC 数据。
### Wireshark 抓包分析
通过 Wireshark 分析 RTMP 流,可具体查看 FLV 标签的组成,如 H SPS 和 PPS 的信息。解析过程涉及 AVCPacketType、CompositionTime 和 NALU 格式等元素。
### 总结
本文详细介绍了基于 Nginx-rtmp-module 的直播服务器搭建、推流与播放过程,并深入分析了 RTMP 协议的建立过程、消息格式以及音视频 FLV 标签在 RTMP 中的应用。后续文章将详细讨论 AAC 和 AVC 的具体格式。