视频原理
视频暂留:人眼在某个视像消失后,仍可使该物像在视网膜滞留0.1-0.4秒左右。电影胶片以每秒24格画面匀速转动,
视频中常用概念
帧率Frame Rate:视频中每秒包含的帧数, “fps” (Frames Per Second)。常见帧率24fps、30fps、60fps等。帧率越多,用户观看越流畅。
分辨率Resolution:视频画面的大小,“宽x高”像素。常见的视频分辨率有720p、1080p、4K、8K等。分辨率越高,画面细节越丰富。
像素Pixel:图像中最小的可见元素,由数字图像中的单个点组成。每个点有自己的颜色和亮度值。常见格式有YUV(1.5字节)、RGB(3字节)、RGBA(4字节)等。
压缩率Compression Radio:视频压缩后的大小与原始大小的比例,“%”。压缩率越高,视频文件越小,但画质越低。
码率Bitrate:视频每秒钟传输的数据量,“Mbps”(Megabits Per Second)。码率越高,视频画质越清晰,但文件大小会增大。一般情况,码率和帧率、分辨率成正比,和压缩率成反比。
屏幕分辨率:物理屏宽度上和高度上最多能显示的物理像素点个数。
我们平时观看影视作品时,看到的分辨率由图像分辨率和屏幕分辨率中较小者决定。
屏幕刷新率:显示器每秒绘制新图像的次数,“Hz”。60、73、144。例如,显示器刷新率为144Hz,指的是每秒钟会刷新图像144次。
我们平时观看影视作品时,刷新率由影片原始刷新率、系统渲染刷新率、屏幕刷新率中较小者决定。水桶效应
人眼分辨率的极限:乔布斯:距离手机10-12英寸(25-30cm,1英寸=2.54cm)时,326ppi的像素密度(每英寸326像素)是肉眼能分辨像素的极限,人眼察觉不出像素间隙。
DPI 图像每英寸长度内的像素大小。决定了图像的清晰度
人眼刷新率极限与眼睛到大脑的带宽有关,大部分是60Hz,VR显示器建议不低于90Hz。
位深:系统中存储色域用到多少字节,bit。JPEG:8bit,HDRI:32bit。
画质增强时域上,虚拟帧,增加帧率;空域上,分辨率增强;色域上,增加位深。
音频原理
声音是一种机械波,通过介质传播,最终被人或机器接收。声波的特征包括:频率、振幅、相位和波形。
频率决定声音的音调高低、振幅决定声音的响度大小、相位决定声音的相位差、波形决定声音的音色。
声音的传播速度340m/s,人耳感知声音频率20Hz-20kHz。
模拟音频信号:声波转换为电信号,通过模拟电路放大、滤波等处理后再转化为声波的过程。
数字音频信号:将模拟音频信号及逆行采样、量化、编码等处理后转化成数字信号,可以通过数字信号处理器(DSP)进行数字信号处理,再通过数字到模拟转换器(DAC)转换成模拟音频信号,最终再转换成声波。
采样:按照一定的时间间隔进行采样,将连续的模拟信号转化为离散的数字信号。采样频率越高,采样精度就越高,更还原。
量化:将连续的模拟信号转换成离散的数字信号的过程,将每个采样点的幅度值映射为一个离散的数字值。量化精度越高,越还原。
编码:量化后的数字信号编码,转化成二进制码。编码方式有很多,最常用的是脉冲编码调制(PCM)、AAC、MP3等。
数字音频信号的优点是可以避免模拟信号传输过程中的噪声和失真,同时方便进行数字信号处理和存储。
通道 不同通道中有声音大小和延迟等变化,单通道、双通道,多通道。
视频从采集到播放
采集:通过摄像头,麦克风等采集图像(yuv)和音频(pcm)原始数据。
处理:视频的旋转、防畸变、缩放、滤镜、裁剪、重采样等功能,音频的回声消除、降噪、增益等功能。
编码:将采集到音频和图像原始数据,编码压缩,降低数据大小,并尽可能的保留精度。视频常用的压缩算法有:h264/h265/h266/AVS,音频的有acc/opus
/amr/AudioVivid等。
封装:将编码后的数据,封装成文件分片如HLS/TS、DASH/MP4、FLV、TS,使用HTTP/HTTPS、RTMP、RTSP、RTP协议推送到直播服务端CDN。
RTMP/RTSP是以帧为单位的流传输,延时更低,HTTP/HTTPS是以HLS或DASH等分片为单位的分片传输,延时高。
分发:CDN(Content Delivery Network,内容分发网络)接收到流后,进行解封装和重封装,对外提供各种协议的下载服务。直播场景对时延要求比较高,因此一般采用流式协议,通过广播或单播的方式推流到各个端。
解封装:终端收到CDN下发的媒体流后,对分片进行解封装,分离出音视频编码后的数据。
解码:终端通过软解或硬解,将编码后的音视频数据进行解码得到视频(YUV)和音频(PCM)数据。一般在解码之前会根据pts/dts时间戳做音视频同步。
渲染:终端在解码后的YUV数据上使用端侧算力进行图像处理,如旋转、缩放、滤镜、美颜、剪裁、画质增强等,然后将处理后的图像送到显存。
推送到流媒体服务器
端侧播放
图像采集之成像原理
光学信号转化为电信号的过程。镜头、光圈、快门和滤镜等组成。
ISP (Image Signal Processer),影像处理器。负责对接收到的传感器原始信号进行运算处理,如线性矫正、噪点去除、坏点修复、颜色差值、白平衡校正、曝光矫正等处理后的结果。
图像处理
平移、缩放、旋转、滤镜、畸变矫正
图像编码
视频信号转化为数字信号。
- 预处理:对图像帧进行去噪、平滑和锐化等处理,以提高图像质量。
- 分块:将图像帧分成多个块。每个块包含一定数量的像素(H264 8x8~16x16 H265 8x8~64x64,slice>slice segment>ctu>cu, tile)。
优点:并行编码解码传输;缺点:没有压缩到极致。 - 变换:对每个块进行变换,以减少冗余信息,从空间域到频率域。常用方法包括离散余弦变换(DCT),离散小波变换(DWT)。
- 量化:将变换后的块中的系数进行量化,以减少数据量。量化过程中,一些系数被舍弃,从而进一步减少数据量。存在损失。
- 熵编码:帧间压缩,对连续的图量化后的系数进行熵编码,进一步减少数据量。常用方法包括霍夫曼编码和算数编码(零阶哥伦布指数编码,用于VPS SPS PPS SLCE 头部编码, CABAC(算数编码)主要用于数据和参数的编码)。
- 像帧进行差分编码,帧间压缩方法包括运动估计和运动补偿。
I帧:完全使用本帧内的数据进行编码,在编码过程中不需要进行运动估计和运动补偿
P帧:编码过程中使用前面的I帧或P帧作为参考图像的运动补偿,实际是对当前图像与参考图像的差值进行编码
B帧:编码过程中使用前面和后面的I帧或P帧进行预测,因为B帧的存在,所以才有DTS解码时间戳,和PTS渲染时间戳两个时间戳存在。
渲染是按顺序的,编码是先I帧和P帧然后再B帧,所以渲染和编码时间对于B帧不同,如果没有B帧,就相同
封装/解封装
编码后的音视频帧数据按照对应协议的格式要求封装成分片文件,方便端侧实现边下载边播放的功能。封装格式有MP4/TS/FLV/AVI等。
解封装,将输入的封装格式的数据,分离成音频流压缩编码数据和视频流压缩编码数据。
协议/解协议
封装后的格式数据以流媒体协议对外提供给下载服务,如HTTP、RTMP、RTSP/RTP等。这些协议在传输音视频的同时,也会传输一些信令数据。信令数据包括对给播放的控制(播放,暂停,停止等),或者对网络状态的描述等。
解协议,将流媒体协议数据,解析为标准的相应的封装格式数据。解协议的过程中,会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据没经过解协议操作后,输出FLV数据。
解码
解码是编码的反过程的,但是因为量化丢失了数据,要进行滤波来去除一些缝隙。
图层渲染
BufferQueue 生产者消费者
App 生产者 生产图像数据,包括Android UI Framework本身的软硬件绘制,使用播放器解码视频文件,从摄像头取出摄像数据,Flutter渲染等。
Surface Flinger 消费者 Buffer进行Layer合成。
HWComposer Layer送显到屏幕。
Choreographer和Vsync 共同解决生产者何时生产,消费者何时消费。