在开发直播系统平台中,会运用到非常多的技术难点,例如视频/音频处理,图形处理、视频/音频压缩、CDN分发等,每一个技术都够学好几年的。今天就跟大家介绍一下开发一套视频直播系统,整个流程中所运用到的技术原理大概是哪些。
首先我们来了解一下一个完整的直播APP原理是:把主播录制的视频,推送到服务器,再由服务器分发给观众观看。
流程: 采集 —>处理—>编码和封装—>推流到服务器—>服务器流分发—>播放器流播放
1. 采集视频、音频
采集是整个视频推流过程中的第一个环节,它从系统的采集设备中获取原始视频数据,将其输出到下一个环节。视频的采集是指音频采集和图像采集:音频数据既能与图像结合组合成视频数据,也能以纯音频的方式采集播放,纯音频采集播放在很多成熟的应用场景如在线电台和语音电台等起着非常重要的作用。图像采集是将图像采集的图片结果组合成一组连续播放的动画,即构成视频中可肉眼观看的内容。对于采集,PC端需要各种型号的摄像头的驱动,Andriod端要做很多手机机型的适配工作,ios端就比较简单。
2.视频处理(如美颜、水印)
视频或者音频完成采集之后得到原始数据,为了增强一些现场效果或者加上一些额外的效果,我们一般会在将其编码压缩前进行处理,处理环节中分为音频和视频处理,音频处理中具体包含混音、降噪和声音特效等处理,视频处理中包含美颜、水印、以及各种自定义滤镜等处理。美颜美化功能是在线直播系统开发的标配,且以动态贴纸为代表的AI技术也被广泛应用于音视频直播系统方案中。
3.编解码、封装
编码是信息从一种形式或格式转换为另一种形式的过程也称为计算机编程语言的代码简称编码。解码,是编码的逆过程,使用相关硬件或软件对接收到的编码后的音视频数据进行解码,得到可以直接显示的图像或声音。编解码就好比物流系统中配货和装货的过程,这个过程直接就影响视频图像文字在网络传输中的速度。封装,就类似媒体的容器,是把编码器生成的多媒体内容(视频,音频,字幕,章节信息等)混合封装在一起的标准。封装使得不同多媒体内容同步播放变得简单,也为多媒体内容提供索引,也就是说如果没有封装存在的话一部影片你只能从一开始看到最后,不能拖动进度条,而且如果你不自己去手动另外载入音频就没有声音。
4.推流到服务器
推流,就是将采集到的音频、视频数据通过流媒体协议发送到流媒体服务器。推流对这个直播链路影响非常大,如果推流的网络不稳定,无论我们如何做优化,观众的体验都会很糟糕,所以也是我们排查问题的第一步。推送协议主要有三种:
(1)RTSP(Real TimeStreaming Protocol):实时流传送协议,是用来控制声音或影像的多媒体串流协议, 由Real Networks和Netscape共同提出的;
(2)RTMP(Real Time Messaging Protocol):实时消息传送协议,是Adobe公司为Flash播放器和服务器之间音频、视频和数据传输 开发的开放协议;
(3)HLS(HTTP Live Streaming):是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议。
RTMP 是目前主流的流媒体传输协议,广泛用于直播领域,可以说市面上绝大多数的直播产品都采用了这个协议,也有部分使用HLS协议。
5.服务器流分发
流媒体服务器的作用是负责直播流的发布和转播分发功能。
常用服务器
SRS:一款国人开发的优秀开源流媒体服务器系统
BMS:也是一款流媒体服务器系统,但不开源,是SRS的商业版,比SRS功能更多
nginx:免费开源Web服务器,常用来配置流媒体服务器
自建流媒体服务器局限性很大,费用也比较高昂,建议交给CDN服务商。
6. 播放器流播放
主要是实现直播节目在终端上的展现。如果使用的传输协议是RTMP, 那么只要支持 RTMP 流协议的播放器都可以使用,譬如:电脑端:VLC等;手机端:Vitamio以及ijkplayer等。