很多朋友想做直播系统,但一听“推流”、“拉流”、“CDN”这些词就头大。别急,今天不用代码,就用几个问答,把直播系统开发的原理讲明白。
问:我对着手机说话,观众是怎么立刻看到的?
答:这中间有三个关键步骤。第一步叫“采集”,就是你的手机摄像头和麦克风,把声音和画面变成电脑能处理的“数据流”。第二步叫“编码”,这个数据流太大了,直接传网络受不了,所以要用H.264等协议把它“压缩打包”,变成一个小巧的“视频包裹”。第三步叫“推流”,就是通过RTMP协议,把这个“包裹”送到一个叫“直播服务器”的中转站。
问:那服务器收到后,又怎么发给成千上万的观众?
答:这就是最核心的“分发”环节了。服务器不能给每个观众都单独发一份,那样会堵死。它会用到CDN(内容分发网络),你可以把它想象成全国各地的“仓库”。服务器把“视频包裹”复制好多份,提前存到离观众最近的“仓库”里。观众看直播时,直接从最近的“仓库”取货,速度最快。
问:最后一个问题,观众手机是怎么播放的?
答:这步叫“拉流”和“解码”。观众的播放器会从CDN仓库里,把“视频包裹”拉过来。然后电脑或手机再执行“解码”操作,把这个压缩包解压,还原成一帧帧的画面和声音,最终显示在屏幕上。
总结一下,直播系统开发就是打通“采集-编码-推流-分发-拉流-解码”这条流水线。搞懂了这条链路,你就明白了80%的原理。剩下的,就是根据你的用户规模,去优化服务器和CDN的配置了。如果你正打算开发,不妨先从这六个环节入手,逐个击破。