流媒体开发1音视频基础
Posted 叮咚咕噜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了流媒体开发1音视频基础相关的知识,希望对你有一定的参考价值。
1、音视频录制原理
音视频录制分为:
- 视频:
- 采集:视频通过摄像头AD芯片采集到数据,转化为YUV输出,根绝相机制式的不同输出的帧率也是不同的;
- 图像处理:对采集到数据进行处理,修改亮度、色度、饱和度、锐度、降噪等;
- 编码:图像处理之后的数据会放到待编码队列中,等待编码线程去获取,编码是对图像数据进行压缩存盘;
- 音频
- 采集:拾音器采集到音频之后,AD转换输出PCM数据到后级,根据采样率、位宽确定每帧的大小(音频实际是没有帧的概念的,只是我们把1s的数据分包,一包算定成1帧)
- 音频处理:变音、降噪、滤波
- 复用器:
- 可以理解成按照一定的规则对音频和视频数据进行封装,播放的时候可以按照这种规则再解除封装
- 时钟:
- 为了音视频同步,数据采集的时候会将音频帧和视频帧都打上一个时间戳,这个时钟源是公用的,这样才能保证时间戳的有效性,做到音视频同步。
- 为了音视频同步,数据采集的时候会将音频帧和视频帧都打上一个时间戳,这个时钟源是公用的,这样才能保证时间戳的有效性,做到音视频同步。
2、音视频播放原理
- 解复用: 播放其实是录制的一个逆向解析过程,解复用器,剥离出音频帧和视频帧,如果是flv格式,则按照flv的封装方式解封装。
- 队列作用: 播放之前需要音视频同步,所以先将音频帧和视频帧缓存起来,音视频同步了才去播放(像海思等arm平台做音视频业务都是这个原理)
- 同步: 音视频同步一般是放在最尾端的,同步完之后直接输出
3、颜色空间格式
3.1RGB
-
组成:
- 红光(R)
- 绿光(G)
- 蓝光(B)
-
大小计算:
- 每个像素用8bit表示,以RGB_888为例,一张图片的大小1280×720 * 3 = 2.637 MB,4分钟就达到了15G的容量。假如是一部90分钟的电影,每秒25帧,则一部电影为2.637MB90分钟60秒*25FPS= 347.651GB,显然
-
缺点:
- RGB格式占用了大量内存,所以引入了YUV
3.2YUV
-
引出: 人眼对亮度敏感,多色度不敏感,因而可以将亮度信息和色度信息分离并对色度信息采用更“狠”一点的压缩方案,从而提高压缩效率
-
组成: “Y”表示明亮度(Luminance或Luma),也称 灰阶值;“U”和“V”表示的则是色度(Chrominance或Chroma),uv作用是描述影像色彩及饱和度,uv值多一些,图像看起来色彩更加浓郁更加饱和,用于指定像素的颜色
-
YUV格式: 有两大类:planar和packed。
-
planar: 先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
-
packed: 每个像素点的Y,U,V是连续交*存储的。
-
-
YUV其他格式
- YUV 4:4:4采样,每一个Y对应一组UV分量
- YUV 4:2:2采样,每两个Y共用一组UV分量
- YUV 4:2:0采样,每四个Y共用一组UV分量
具体参考:【数据与封装格式】YUV和RGB
-
大小:
- yuv420为例:宽 * 高 * 3 / 2 = 一帧大小,但实际上这还是很大的,所以还需要再次进行压缩
- 视频的压缩一般的都是使用yuv420作为源输入
4、视频的主要概念
- 视频码率: kb/s,是指视频文件在单位时间内使用的数据流量,也叫码流率。码率越大,说明单位时间内取样率越大,数据流精度就越高,占用的硬盘空间也越大。 我们可以基于264/265编码的原理,加大静止画面的qp值,提升码率,在图像效果不变的基础下降低码率,节省存盘空间。
- 视频帧率: fps,通常说一个视频的25帧,指的就是这个视频帧率,即1秒中会显示25帧。帧率越高,给人的视觉就越流畅。
- 视频分辨率: 分辨率就是我们常说的640x480分辨率、1920x1080分辨率,分辨率影响视频图像的大小。
- I 帧(Intra coded frames): I帧不需要参考其他画面而生成,解码时仅靠自己就重构完整图像;
- I帧图像采用帧内编码方式;
- I帧所占数据的信息量比较大;
- I帧图像是周期性出现在图像序列中的,出现频率可由编码器选择; (不同的编码类型也是不同的svc和smart的I帧间隔是不同的)
- I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);
- I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧; (新的一个GOP开始,那么解码的时候前面的所有帧都可以丢弃了,后面都参考当前I帧即可)
- I帧不需要考虑运动矢量;
- P 帧(Predicted frames): 需要参考前面最靠近它的I帧或P帧来解码。
- B 帧(Bi-directional predicted frames): B 帧图像采用双向时间预测,可以大大提高压缩倍数。
5、常用视频压缩算法
- MPEG2 MPEG阵营
- H264 MPEG阵营
- H265 MPEG阵营
- AVS 中国阵营
- VP8 Google阵营
- VP9 Google阵营
以上是关于流媒体开发1音视频基础的主要内容,如果未能解决你的问题,请参考以下文章
音视频开发10. 使用ffmpeg 流媒体视频流截图jpg实践
JavaCV音视频开发宝典:无需流媒体服务也无需转码,使用JavaCV和springBoot实现http-flv转封装直播服务,浏览器网页flv.js直接播放rtprtsprtmp实时视频
JavaCV音视频开发宝典:无需流媒体服务也无需转码,使用JavaCV和springBoot实现http-flv转封装直播服务,浏览器网页flv.js直接播放rtprtsprtmp实时视频