传统直播架构
直播系统可以简单的分为实时互动直播
和传统直播
,实时互动直播
注重于传输的实时性(因此采用UDP作为底层协议),如在线教育、音视频会议等,传统直播
则注重的是画面质量、音视频是否卡顿的问题(因此采用TCP作为底层传输协议),如娱乐直播等
商业级别的直播系统结构是非常复杂的,除了核心的音视频直播外,还包括用户管理、认证系统、直播间管理、私信等业务逻辑
直播客户端
直播客户端主要包括音视频数据的采集、编码、推流、拉流、解码和播放等功能
- 客户端主要用途分类
- 主播使用的客户端
- 包括音视频采集、编码和推流的功能
- 可以从直播设备上采集对应数据,然后对采集的音视频数据进行编码,最后将编码后的音视频数据按RTMP协议推送给CDN源节点(RTMP接入服务器)
- 观众使用的客户端
- 包括拉流、解码与渲染(播放)的功能
- 观众端主要实现了一个播放器的功能,开源的有两个成熟的项目集成后就可以基本实现对应的功能(ljkplayer和VLC)
- 主播使用的客户端
信令服务器
主要用于接收信令,并根据信令处理一些和业务相关的逻辑,如创建房间、加入房间、离开房间、送礼物、文字聊天等
- 注意点
- 一定要关注和防止消息的洪范
CDN网络
主要用于媒体数据的分发
主播推流浅析
- 向信令服务器发送「创建房间」的信令,并收到信令服务器返回的推流地址信息(CDN网络源站地址) - 步骤①
- 主播客户端将采集到的音视频数据进行编码,生成RTMP消息,最终将媒体流推送给CDN网络 - 步骤②
- 步骤③和④与①和②一样,只是设备不同
- 观众向信令服务器发送「加入房间」的消息,信令服务器根据用户地区,分配一个最近的CDN边缘节点 - 步骤⑤
- 观众收到CDN地址后进行拉流和渲染 - 步骤⑥
- 在传统直播中,一般推流端使用RTMP协议,拉流端可以使用RTMP协议或者HLS协议
RTMP协议与HLS协议
RTMP协议
RTMP(Real Time Messaging Protocol:实时消息协议,默认端口1935,可能会被防火墙屏蔽),一般情况下最少会有几秒到几十秒的延迟,底层是基于TCP协议的,其传输格式是RTMP Chunk Format,媒体流数据的传输和RTMP控制消息的传输都是基于此格式的,在使用RTMP协议传输数据之前,RTMP也像TCP协议一样,先进行三次握手才可以建立连接;
优势
- 底层依赖于TCP协议,不会出现丢包,乱序等问题,因此音视频业务质量有很好的保障;
- 使用简单,技术成熟,有现成的RTMP协议库实现,如FFmpeg项目中的librtmp库等
- 市场占有率高,相较于HLS协议,实时性要高很多
劣势
- iOS不支持该协议,理由是有较大的安全缺陷,现在该协议已经停止更新了
- 不支持h.265
【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788