采集:
是视频直播开始的第一个环节,用户可以通过不同的终端采集视频,比如 iOS、Android、Mac、Windows 等。
前处理:
主要就是美颜美型技术,以及还有加水印、模糊、去噪、滤镜等图像处理技术等等。
编码:
就是音视频数据的压缩,便于传输,一般有软编码和硬编码,软编码有 x264、x265、openh264等,硬编码有 iOS 的 VideoToolBox、Android 的 mediacodec,Windows 的QSV 和NVIDIA等等。
推流:
就是数据传输从主播端到服务端的过程,推流需要不同的网络协议支持,如 RTMP 等。
转码:
为了让采集端的流适配各个平台端不同协议,一般都会在服务端进行转码处理,将视频文件转成不同格式,支持 RTMP、HLS 和 FLV 等不同的协议。
分发:
应对视频应用的高并发需求,采用 CDN(Content Delivery Network,即内容分发网络) 进行内容分发加速,实现高并发等能力。
拉流与解码:
拉流即使视频数据从服务端到观众端的过程,解码就是渲染播放,让观众看到主播的视频画面。
一般造成直播卡顿的原因主要有设备、视频流、网络三个方向。
方向 | 原因 |
---|---|
设备 | 设备硬件配置太差、播放器问题等 |
视频流 | 时间戳问题、编码参数、编码码率等 |
网络 | 推流端网络太差、播放端网络太差、服务端传输压力过大等 |
延迟主要指推流端到拉流端的时间差,在音视频生产消费过程中,在不同阶段都会产生延迟,如下表所示。
分类 | 产生原因 |
---|---|
设备端上延迟 | 采集、前处理、编码、解码、渲染播放都可能产生延迟 |
设备端与服务端之间的延迟 | 推流端到服务端的延迟,服务端到拉流端的延迟 |
服务端与服务端之间的延迟 | 服务端的数据传输、数据排队、数据的处理等延迟 |
阿里云技术介绍一片直播延迟的源头,如下图:
声网技术介绍了直播延迟的不同程度所适应的应用场景,如下图:
分辨率是用于度量图像内数据量多少的一个参数,通常表示成ppi。一般直观表现出视频的画面细腻程度。常见的分辨率如下表。
首屏耗时,指第一次点播播放后,肉眼看到画面所等待的时间。技术上指播放器解码第一帧渲染显示画面所花的耗时。通常所说的“秒开”,指点击播放后,一秒内即可以看到播放画面。首屏打开越快,说明用户体验越好。首屏耗时原因主要有DNS 解析、缓存获取首帧内容
、网络延迟
、播放器缓存策略
等。
花屏与绿屏由不同原因造成的,主要如下脑图罗列。
观看视频直播最大的痛点主要包括:卡顿
、模糊
、延迟
、内容
等。
流媒体是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网络上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送,因此称为流媒体。
如果不使用此技术,就必须在使用前下载整个媒体文件。流媒体的本质上是原始画面,经过视频采集设备,然后通过编码器编码压缩,生成点播文件或者直播流,经过网络的传输,在各种终端进行解压解码,然后播放器进行画面渲染,最终展示在用户眼前。
流媒体可以分为点播和直播。
直播是有实时性的要求,直播的数据都是存在内存中,过时的数据会被丢掉。视频直播,一定是一个**“边生产,边传输,边消费”**的过程.
如果需要持久化的视频数据,就必须对直播流进行录制,转化为视频文件保存起来,这样就可以转化为点播的内容。
点播的内容源是静态的,直播的数据源是动态的。
实现点播需要解决视频转码
和流媒体下载
两个问题;而实现直播本质需要解决视频数据编解码
和视频数据网络传输
两个问题。
RTC的一个具体应用是直播场景中的直播连麦(或PK),也就是低延时直播。普通直播,一般采用TCP协议(RTMP),使用CDN进行内容分发,会有几秒甚至十几秒的延时,主播和观众的互动只能通过文字短消息或送礼来进行。
而直播连麦,使用UDP协议(QUIC),内容实时传输,主播和观众可以进行音视频连麦互动,实时沟通,延时一般低至几百毫秒。
因此直播和 RTC 最大的区别主要体现再协议的使用以及音视频处理技术策略等。
项目 | RTMP | RTP/RTCP |
---|---|---|
传输协议 | TCP | UDP |
延迟程度 | 高 | 低 |
使用场景 | 普通直播 | RTC/连麦直播 |