直播系统介绍
演示
本地演示:ffmpeg/obs + livego + mpv
- 推流选择ffmpeg或者obs
- 流媒体服务直接使用livego
- 播放使用mpv
推流截图:
拉流截图:
livego
流地址
如果使用ffmpeg推流
视频流
直播系统组成
直播流协议
RTMP
Rtmp规范1.0:https://suncle.me/2018/03/09/rtmp%E8%A7%84%E8%8C%831-0/
Rtmp规范1.0 en:http://wwwimages.adobe.com/www.adobe.com/content/dam/acom/en/devnet/rtmp/pdf/rtmp_specification_1.0.pdf
- RTMP协议是应用层协议,基于下层的传输层协议TCP
- 要建立一个有效的RTMP Connection链接,首先要握手。但是实际使用过程中对握手数据校验不严格
- Adobe公司
- 低延迟,内容延迟可以低于3秒
- 需要编解码
- 几乎所有的稳定推流协议都是RTMP
HDL
HDL协议中封装格式使用的是FLV,HDL又叫做HTTP-FLV
- 基于HTTP
- 低延迟,内容延迟可以低于3秒
- 需要编解码
HLS
Http Live Streaming。
- 苹果公司
- 基于HTTP
- HTML5可以直接播放,不需要编解码,需要在服务端切片,有Stream Segmenter的概念
- 格式:
- m3u8:索引文件,以m3u8为后缀。用文本方式对媒体文件进行描述,由一系列标签组成
- ts:传输流文件,视频编码主要格式h264/mpeg4,音频为acc/MP3。
- 延迟较高,一般在10秒左右
使用情况
对于正常的直播场景,多数都是推流使用Rtmp协议,拉流使用HLS协议
参考:
- SRS的C++版本:https://github.com/ossrs/srs
- SRS的Golang版本:https://github.com/gwuhaolin/livego
- 云直播系统架构与实施:https://blog.csdn.net/qiansg123/article/details/80124296
- UCloud:http://blog.ucloud.cn/archives/699
直播系统介绍
https://suncle.me/posts/2029292735/