流媒体开发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音视频基础的主要内容,如果未能解决你的问题,请参考以下文章

c/c++程序员的黄金发展方向:音视频开发

流媒体开发17FFmpeg基础入门API结构体

流媒体开发17FFmpeg基础入门API结构体

音视频开发10. 使用ffmpeg 流媒体视频流截图jpg实践

JavaCV音视频开发宝典:无需流媒体服务也无需转码,使用JavaCV和springBoot实现http-flv转封装直播服务,浏览器网页flv.js直接播放rtprtsprtmp实时视频

JavaCV音视频开发宝典:无需流媒体服务也无需转码,使用JavaCV和springBoot实现http-flv转封装直播服务,浏览器网页flv.js直接播放rtprtsprtmp实时视频