直播协议摘要介绍RTMP-HTTP-FLV-WebRTC-RTSP等
音视频协议详解
RTMP/HTTP-FLV
这两种协议都建立在FLV封装之上,且一般不写入磁盘,仅在内存中交换。
RTMP
- 用于直播源推流和系统内直播流数据传递
- 端口号1935,建立TCP长连接
- 延迟一般为1~3s
- 推流地址和播放地址相同
- 存在高并发问题
- 因浏览器摒弃flash,主要用于直播源推流和CDN推流
- 强制切片以保证实时性和弱网抵抗能力,但有性能损耗
HTTP-FLV
- 主要用于客户端观看
- 是RTMP的HTTP版本
- 网页需要引入flv.js才能播放
WebRTC协议
基本特性
- Web Real-Time Communication
- 允许浏览器之间直接连接
- 延迟低于1s,使用UDP通道
- 推拉流地址格式:
webrtc://127.0.0.1:8000/live
连接机制
- 点对点协议(PPP)
- 需要信令服务器作为初始中转
- 信令内容包括:
- 媒体流元数据
- 网络数据信息
连接方式
- 本地局域网直接通信
- 通过STUN服务器获取公网IP
- TURN服务器作为备选方案
多对多通信模式
Mesh模式
- 优点:实现简单
- 缺点:仅支持4-6人
MCU模式
- 优点:支持多人
- 缺点:服务器压力大
SFU模式
- 优点:服务器压力适中
- 缺点:带宽消耗大
- 适用于一对多通信
RTSP协议
- 主要用于摄像头/监控设备
- 支持TCP/UDP切换
- 支持推流拉流
- 支持点播直播
- 现代浏览器不支持
直播系统架构
工作流程
1 | 直播源 -> 服务器1 -> 转码处理 -> 服务器2 -> 客户端 |
功能特性
- 支持转码处理
- 支持水印添加
- 支持清晰度转换
- 支持码率限制
- 支持直播录像
封装格式对比
MP4
- 支持自定义封面
- 树状结构数据块
- 主要数据块:
- ftyp:编码格式信息
- moov:元数据
- mdat:音视频数据
FLV
- 适合网络视频播放
- 大文件/长时间播放稳定
- 支持时间戳索引
- 需要建立I帧索引
HLS
- 基于HTTP下载
- 由ts文件和m3u8索引组成
- 支持二级索引
- 延迟较大(5~30秒)
H.264编码原理
码流分层
- VAL:视频编码层
- NAL:网络提取层
帧类型
- I帧:完整帧
- P帧:差异编码
- B帧:双向参考
- IDR帧:重置参考
- GOP组:关键帧组
参数优化
- 码率控制
- 分辨率/帧率调整
- GOP设置:
- 在线播放:帧率的4-5倍
- 直播:帧率的1-2倍
推流命令示例
1 | .\ffmpeg -re -f dshow -i video="USB2.0 HD UVC WebCam" -vcodec libx264 -acodec aac -f flv -g 60 -bf 0 rtmp://127.0.0.1/live/test |
参数说明:
-re
:按原帧率读取-f dshow
:Windows视频获取-g 60
:GOP大小-bf 0
:禁用B帧
评论