@kryhear
2016-10-13T15:40:16.000000Z
字数 1371
阅读 875
一般通简单用的视频直播架构主要包含三个方面:主播端、RTMP直播服务器和播放端。
实际上一个完整的直播过程,包含很多的技术环节,包括采集处理、编码封包、推流传输、转码、分发、拉流、解码、播放,从推流到播放,再经过中间转发环节,延迟越低,用户体验越好。
采集和处理
其实就是直播视频的来源,比如从手机的摄像头,电脑上的屏幕等,然后对视频进行一定的预处理,比如美化、加水印等。
编码和封装
原始的视频数据体积很大,需要对其进行压缩编码来减小数据体积,从而方便数据的传输(推拉流)和存储。编码的方式有硬编和软编之分,比较主流的视频编码有H.264,甚至更新的H.265。
推拉流传输和转码
传输主要有两个环节
- 主播端将视频推到服务器(推流)
原始视频数据经过编码封装后,通常通过推流的方式将数据推到服务器,推流常用的传输协议有RTMP、RTSP等。- 播放端从服务器拉取视频(拉流)
当视频数据传输到服务器,经过转码等处理后,播放端再通过拉流的方式获取视频来播放观看,常用的拉流传输协议有HLS、RTMP等。
协议 基础 原理 延时 优点 使用场景 RTMP TCP长链接 实时发送数据 2s 延时低 即时互动 HLS HTTP短链接 集合一段时间数据生产ts切片文件并更新m3u8文件 10s-30s 跨平台 Web直播
分发
其实就是CDN,全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。对于一些边缘网络的用户,通常通过分发技术来加速他们的网络速度,提升观看体验。
解码和播放
播放端通过拉流获取转码过视频数据后,需要进行相应的解码和渲染后,才能播放呈现给用户观看。同编码一样,解码也有硬解和软解两种。
其实是想应用于我们公司的内部培训,场景就是讲师在总部这边在线讲课(主要是屏幕分享,摄像头辅助),各个展厅的人去连线后听课,语音和图像,同时支持文字等即时聊天,方便讲师和学员沟通,不需要支持语音即时聊天,还有需要支持课程录制,形成视频文件
根据上述火山的描述,这套直播系统概要如下:
- 学员数量大概100多人
- 讲师直播PC的屏幕给学员授课
- 学员通过移动终端等设备进行学习
- 讲师和学员可以通过文字等方式实时互动
- 最终需要将视频保存成文件(可能要支持回看)
如果自己搭建整套直播系统的话,由于内部使用人数不多的话,只需要一台直播服务器即可,无需分发服务器,大概架构如下:
相关技术栈需要:
- Nginx服务器 + RTMP模块
- OBS(Open Broadcaster Software)用于PC屏幕推流
- ijkplayer用于移动端获取视频流并解码播放(支持iOS / Android)
- SmarterStreaming大牛直播开源的整套直播方案(可以参考)
- 互动交流可以考虑通过腾讯云的云通信、融云或者环信来实现
上述简单地介绍了视频直播系统的技术构架,构架本身容易,但构建性能优良的构架就很有难度,需要在传输速度与效率、推流端兼容性、客户端体验上作深入的优化,包括:
- 带宽和流量
- 提高首播时间
- 延迟优化(低延时高画质)
- 网络延迟,抖动甚至丢包引起的画面卡顿
- 视频编码涉及非常多的技术参数和细节,如何平衡?