1.音视频直播架构下图是音视频直播架构的简化图。1、角色直播客户端(主播)涉及的功能主要包括音视频数据采集、编码、推流。从摄像头和麦克风采集数据,将数据编码后通过RTMP协议发送给CDN源节点直播客户端(viewer)。)功能主要包括推流、解码、播放从直播系统获取房间推流地址通过RTMP协议从CDN边缘节点获取数据,解码、渲染信令服务器接受指令,处理业务逻辑,创建房间,加入房间、送礼物等CND网络内容分发网络(ContentDeliveryNetwork)使用离每个用户最近的服务器,更快更可靠地向用户发送音乐、图片、视频、应用程序等,提供高性能和远程备份,100%高可用性2.传输协议RTMP协议实时消息传输协议,RealTimeMessagingProtocol的缩写,最初由Macromedia开发,用于通过Internet在Flash播放器和服务器之间传输流式音频、视频和数据。基于TCP,默认使用1935端口的“明文”协议HLS协议Apple提出了一种基于HTTP的流媒体网络传输协议,简称HTTPLiveStreaming,工作原理是将整个流分成基于HTTP的小文件进行下载,每个只下载一些HLS,只请求基本的HTTP数据包。与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或代理服务器。根据客户端带宽自适应调整码率。例如,FFmpeg可以将视频文件转换为HLS切片3.整体流程直播客户端(主播)向信令服务器发起信令,创建直播间。信令服务器收到指令后返回CDN源站推流地址。直播客户端(主播)通过音频/视频采集设备采集数据后,进行编码,通过RTMP协议发送给CDN网络直播客户端(观众)。向信令服务器发送信令加入直播间。信令服务器收到指令后,将附近的CND边缘推送给客户端(观众),直播客户端(观众)收到节点地址后,使用RTMP/HLS协议拉取直播数据。2.搭建直播服务器。下面两种方式搭建直播服务器比较快捷。方法一使用Nginx+RTMP推拉插件NginxRTMPModule支持RTMP/HLS/MPEG-DASH协议https://github.com/arut/nginx-rtmp-modulehttps://nginx.org/download/方法二使用开源SRSServerSRS是一款简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181https://ossrs.net/lts/zh-cn/docs/v4/doc/introduction3.CDN内容分发网络CDN内容分发网络(ContentDistributionNetwork)是指通过互联网相互连接的计算机网络系统,使用离每个用户最近的服务器来分发音乐、图片、视频、应用程序等将文件发送给用户,以向用户提供高性能、可扩展且低成本的Web内容交付。提高网页加载速度提高文件下载速度提高视频播放速度云厂商CDN服务:阿里云:https://www.aliyun.com/product/cdn腾讯云:https://cloud.tencent.com/product/cdn华为云:https://www.huaweicloud.com/product/cdn.html七牛云:https://www.qiniu.com/products/qcdn#scene
