美文网首页
音视频基础知识

音视频基础知识

作者: 南歌ccc | 来源:发表于2020-09-03 17:23 被阅读0次

    基础概念

    一般情况下,视频流从加载都准备播放是需要经过解协议、解封装、解编码这样的过程,其中协议指的就是流媒体协议;封装是的是视频的封装格式;编码又分为视频编码和音频编码。

    • 视频播放器播放一个互联网上的视频文件,要经过以下步骤:
      • 解协议 --> 解封装 --> 解码音视频 --> 音视频同步
    • 播放本地文件则不需要解协议
      • 解协议 --> 解封装 --> 解码音视频

    场景

    1. 本地播放 :先保存为文件,再使用本地播放器播放
    2. 在线观看 :在线观看又分为 直播(直播即实时视频,只要终端接收流就从那一刻开始)和 点播(点播即编辑好的视频文件,存放在服务区或云上,被观众任意观看)。

    视频概念

    • 封装格式 也叫 容器 ,就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,也就是说仅仅是一个外壳。对于本地播放,每个视频都有自己的格式( .MP4,.RMVB, .AVI )等,这些格式代表的是 封装格式。简称视频格式,也叫做 容器

      • 视频封装协议 在线观看其实是一种视频协议。也就是只有在有网络时通过浏览器或者移动端APP才能看到的视频。常见的直播流协议有:RTMP、RTSP、HTTP 等;常见的点播协议有:MP4、FLV、HLS 等。在连接视频协议时,除了音视频频流和metadata之外,可能还会携带播放的信令。
      • 也有文章会把 视频协议 归入 视频封装格式。这么分类也有其道理:视频协议 和 视频封装格式 都同时携带了音视频和metadata,以及协议/格式需要的其他信息。以 FFMpeg 为例,并不区分视频格式和视频协议;但是 GStreamer 的话,还时需要指定 视频协议,但是不区分视频封装格式。
    • 解协议
      解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。

    • 解封装
      解封装的作用,就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。

    • 解编码
      定义了原有媒体数据进行压缩(编码)或解压缩(解码)的标准。为了便于存储和传输,原始的音频和视频会通过编码压缩体积,然后在需要播放的时候再逆向解码还原。Codec规定了编解码过程中的细节(数字存储空间、帧速率、比特率、分辨率等)标准。

    • 视音频同步
      视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

    我们在了解几个概念:

    1. 码率
      即传输码率/比特率(bps,Bit Per Second),每秒传输压缩后的数据的比特数。一般媒体的信号质量和体积取决于两个方面:采样率和压缩比,其中采样率直接影响传输码率。
      通常来说,一个视频包含了画面和声音。例如一个RMVB的视频文件,里面包含了视频信息和音频信息,音频及视频都有各自不同的采样方式和比特率,也就是说,同一个视频文件音频和视频的比特率并不是一样的。而我们所说的一个视频文件码流率大小,一般是指视频文件中音频及视频信息码流率的总和。

    2. 采样率
      即采样速度或采样频率,定义了每秒从连续信息好提取并组成离散信息的采样个数,单位赫兹(Hz)。

    3. 分辨率
      即屏幕每一帧图像的像素分布矩阵,同个屏幕上分辨率越高图像越大显示越细腻,反之越小越模糊。

    4. 帧率
      即帧速率(FPS,Frames Per Second),即每秒显示的帧数,影响画面流畅。

    5. 清晰度
      即肉眼感知画面的清晰程度。受码率与分辨率的影响。

    接下来介绍下 音频编码视频编码

    • 音频编码
      指的是音频数据的编码方式,常见的如:MP3、 PCM、WAV、AAC、AC-3 等,因为音频的原始数据大小一般不适合直接传入,比如原始大小一般可以按照:
      音频大小 = 采样率 x 声道数 x 样本格式
      去计算。假设前面那个 MOV 的音频采样率是 44100 、样本格式是 16 bit 、单声道、24 秒,那么它原始音频大小应该是:
      44100 * 16 * 1 * 24 / 8 ≈ 2MB
      而实际将音频信息提取出来的大小则要小的多,这就是音频编码的作用。
      所以一般都会音频传输会采用各种编码格式进行压缩和去冗余,其中比如 WAV/PCM 编码的音频质量比较好,但是体积会比较大;MP3 有损压缩能在音频质量还可以的情况下压缩音频的体积;AAC 也是有损压缩,但是又有分有 LC-AAC、HE-AAC等。

    • 视频编码
      视频编码指的就是画面图像的编码压缩方式,一般有 H263、H264、HEVC(H265)、MPEG-2 、MPEG-4 等,其中H264 是目前比较常见的编码方式。
      通常情况下我们理解的画面是 RGB 组合出来,而目前视频领域可能更多使用 YUV 格式,其中 Y 表示的是亮度(灰度),而 U 和 V表示的是色度(饱和度)。
      YUV 是对 RGB 的特殊处理和叠加来获取颜色,比如 YUV420 可以理解对色度以 2:1 的抽样率进行存储,然后亮度透过色度来显示画面,更多 YUV 的这里就不展开讨论,而为什么使用 YUV 其中有一点因素就是为了兼容以前的黑白电视。
      这里假设一个1080x1920的mov视频直接使用 YUV420 的格式,那么一帧的大小就会是:
      1080 * 1920 * 1 + 1080 * 1920 * 0.5 = 2.9MB
      如果在这个基础上,算上帧率(30)和一个视频的时长(一小时),那一部视频原始大小就会是天文数字,这样的情况明显不符合网络传输,所以才有了视频编码用于压缩图像。

      • 解视频编码流程:
        采集样本 -> 编码压缩 -> 数据传输 -> 数据接收 -> 解压解码

      • 采样率和码率的关系:
        假设存在一张60分钟的CD,其采样率为44.1 kHZ,两个声道且每个声道取样为13位PCM编码。则这张CD的比特率计算为:
        44100 * 2 * 13 = 1146600 bps 表示每秒采样44100次,每次采样数据26Bit。

      • 帧率、 分辨率、 码率、清晰度的关系
        举个栗子,帧率30fps,分辨率为1920 * 1080,每个像素点2字节,则压缩前每秒数据量为:
        30 * 1920 * 1080 * 2 * 8 / 1024 / 1024 = 1492992000 Bit ≈ 1423.8 Mbit
        这意味着每秒要传输大约1424Mb的数据,这不压缩根本不可能在线播放,所以视频传输的时候必定需要压缩处理。故存在:
        帧率 * 分辨率 = 压缩前每秒所需传输的数据量(单位比特)
        而压缩视频之后经过进行传输,则存在:
        压缩比 = 压缩前每秒所需传输的数据量 / ( 码率 * 1s) * 100 %
        在码率一定的情况下,分辨率与清晰度是反比关系。这里的分辨率指的是传输前的媒体的分辨率,越高则意味着压缩前每秒所需传输的数据量越大,失真程度越大。
        在分辨率一定的情况下,码率与清晰度是正比关系。码率越高,意味着压缩比约接近1,失真越不明显,图像越清晰。

      • 帧率是不是越高越好
        假定固定一个码率 800kbps,则每秒传输接收的数据固定,若帧率越高,则每秒的图像越多,单张图像的压缩比则会变大,也就是通过降低画质来承载更多的帧数。

      • 码率是不是越大越好
        假定码率不做大小限制,帧率固定分辨率越高,则码率变大画质会更细腻;分辨率固定则帧率变大,则码率变大视频更流畅。这可能消耗更多的流量。

      • 视频压缩相关概念

        • IPB 帧是一种常见的帧压缩方法,其中 I 帧属于关键帧是每个画面的参考帧;P 帧是前向预测帧B 帧是双向预测帧。简单来说就是 I 帧自己就可以得到一个完整画面,而 P 帧需要前面的 I 帧或者 P 帧来帮助解码得到一个完整画面,而 B 帧则需要前面的 I/P 帧或者后面的 P 帧来协助形成一个画面。

        • 所以 I 帧是很关键的存在,压缩 I 帧就可以很容易压制掉空间的大小,而压缩 P/B 帧可以压缩掉时间上的冗余信息。所以在视频 seek 的时候,I 帧很关键,如果视频 seek 之后发生往前的跳动,那很可能就是你的视频压缩得太厉害了。

        • 还有一个叫 IDR 帧的概念,因为 H264 采用的是多帧预测,导致 I 帧不能作为独立的观察条件,所以多出一个叫 IDR 帧的特殊 I 帧用于参考,IDR 帧最关键的概念就是:在解码器过程中一旦收到 IDR 帧,就会立即清空参考帧缓冲区,并将 IDR 帧作为被参考帧。

        • 在视频解码里还有一个叫 DTS(Decoding Time Stamp)和 PTS(Presentation Time Stamp)的存在,DTS主要用于视频的解码,PTS主要用于在解码阶段对视频进行同步和输出。 因为视频包里面数据解码不是连续的,而是需要通过解码数据源得到的 DTS,才能 决定了包应该在什么时候被解码,而得到的PTS 决定了解码后的图片什么时候被绘制

        • GOP(Group Of Picture)就是两个 I 帧之间的距离,一般 GOP 设置得越大,画面的效果就会越好,到那时需要解码的时间就会越长。所以如果码率固定而 GOP 值越大,P/B帧 数量会越多,画面质量就会越高。

    参考资料:

    视频封装格式与视频协议
    移动开发者的音视频基础知识
    I帧,P帧,B帧

    相关文章

      网友评论

          本文标题:音视频基础知识

          本文链接:https://www.haomeiwen.com/subject/nzdosktx.html