直播最近很火,项目组也在热火朝天。
技术实现上,视频经由客户端采集后生产视频数据,通过网络传输到直播后台,直播后台负责转码,录制,视频分发等功能,这里面太多花花绿绿的功能,因为有各种各样的客户。
后台收到视频数据后,是如何工作的呢?带着这个问题从直播后台的最前端模块开始说起。
视频数据一般是通过 rtmp 协议传输上来的。rtmp 相当于我们熟悉的 http,只是一个数据包装协议,只是更为复杂一点,适合传输流媒体。学习 rtmp 可以下载 Adobe 的官方文档,文档也较为简单,最好在阅读过程记下自己,因为陌生概念多,容易混淆。我反复读了好几遍再加上不断抓包实践,才慢慢理解接受;按着自己的理解写了一个 rtmp 服务器, FFmpeg 模拟推流能正常处理。
梳理流程如下:
- 握手
- 客户端 connect 指令,该阶段要求服务端要告知客户端 ack size,带宽限制
- 客户端 createStream 指令
- publish 指令,该指令是告诉服务端会产生一个流
- 剩下就是音视频数据
- 当音视频流结束后,客户端会发送一个,FCUnpublish 以及 deleteStream,表示结束
较为复杂应该是后面的音视频数据的处理以及音视频数据的分发。主播端推送了一种格式的视频数据,但播放端可能会有多种,一种输入需要产生多种输出。
23 April 2017 会持续更新