(一) 音视频基础_Mpeg4封装格式音视频编码格式_解封装解码_像素格式_PCM音频-采样率-通道-planar_MP4标准和h264格式的NAL的GOP分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huanghuangjin/article/details/81779391
封装:从文件中把音视频读出来
解码:将音视频解压出来
重采样:将音视频转换成声卡显卡支持的格式,视频需要做像素格式的转换

MPEG(或叫MPEG-4)是一套用于音频﹑视频信息压缩的编码标准。
MPEG-4 Part 14 MPEG-4文件格式   Part 15 AVC文件格式
压缩算法:H264(AVC Part10)

常用封装格式:AVI(当中可以存放任意压缩标准的音视频文件,甚至不压缩)
              FLV ts(电视) 等流媒体格式
              ASF(微软支持的点播格式)
              mp4

常见编码格式:视频 H264(AVC Part10), wmv(H264与wmv编码有上下帧的关系,有关键帧), XviD(Part2), mjpeg(摄像机,每一帧都是独立的,seek时不用算关键帧,很快,坏处就是压缩比例低) 几乎都是有损压缩
              音频 aac MP3(aac与mp3都是有损压缩) ape(无损压缩) flac

解封和解码过程:
NAL:网络提取层,包含信息比如是否为关键帧﹑SPS﹑PPS,视频帧包含 I帧(关键帧) B帧(是相对于前一帧于后一帧的变化) P帧(是相对于前一帧的变化)
VCL:视频编码层
这里写图片描述
硬解码速度比软解快,但硬解的帧率都是固定的比如60帧,软解码可以控制帧率,在性能好的CPU上甚至能解200帧每秒,但软解的缺陷就是很耗电。

像素格式:
    BGRA
    RGBA        在内存中一般以B G R的顺序存放,需要注意的是:计算机为了对齐,分配的内存长度一般都是4的倍数
    ARGB32
    RBG32       一个颜色用10bit表示,能表示的真彩色空间更大
    YUV420      所有视频的压缩算法都是在YUV基础上的,一个像素值只需要12bit。Y表示明亮度(灰度),U和V表示色度
        R = Y + 1.4075*(V-128);
        G = Y - 0.3455*(U-128) - 0.7169*(V-128);    GPU的浮点运算速度远远快于CPU的,但压解缩速度一般
        B = Y + 1.779*(U-128);
        RGB与YUV互转的公式由很多种

        YUV420P     P表示YUV平面方式存放,即内存中先把所有的Y存下来,再把所有的UV存下来
            RGB的平面存放方式就是内存中先存所有R,再存所有G,再存所有B。   音频也存在平面存放方式

这里写图片描述

PCM音频参数:(无损音频数据)
    采样率:sample_rate 44100 (CD,DVD是48000) 表示1秒采集44100次声音,最后化成一个音存下来,大小可以16、24、32bit等
    通道:channels (左右声道,模拟的两个人耳,每个通道采样率都是44100)
    样本大小(格式):sample_size
        - AV_SAMPLE_FMT_S16 (两个字节存放一次音)
        - AV_SAMPLE_FMT_FLTP (float存放,32位,aac重采样时,基于浮点运算的)
    样本类型:planar
        AV_SAMPLE_FMT_S16   在内存中的格式为:c1,c2,c1,c2...
        AV_SAMPLE_FMT_S16P  即平面存放方式,在内存中的格式为:c1,c1,c1,...,c2,c2,c2,...

MP4格式分析:(可以去看MPEG-4说明文档)
这里写图片描述

H.264/AVC视频编码标准:
    视频编码层面:VCL
        - 存放视频数据的内容
    网络抽象层面:NAL
        - 格式化数据并提供头信息
    NAL单元:
        平时的每帧数据就是一个NAL单元(SPS与PPS除外)。在实际的H264数据帧中,往往帧前面带有 00 00 00 01 或 00 00 01 分隔符,
            一般来说编码器编出的首帧数据为PPS与SPS,接着为I帧。

这里写图片描述

GOP:一组数据(可以独立播放的),即表示说这组数据有一个关键帧,其他所有的帧数据都可以由这关键帧开始推出来。
I帧(关键帧) 存放的是一帧视频的完整数据。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/huanghuangjin/article/details/81779391