H.264码流结构 (H.264 Data Structure)

1、Why ?

相信在你的电脑里,一定存有一些已经下载好的视频文件,如果你硬说没有,那我相信你曾经总有吧?曾经也没有?那我想对你说曾经免费的时候你不下载,直到电影都收费才后悔那些年错过下载的大片。

好了,言归正传,在日常我们一定见过很多后缀为avi, mp4, rmvb, flv等格式的视频文件。而很少有人真正挖掘这些文件到底是什么?其实以上格式都是封装视频的封装格式。

什么是封装格式 ?

把音频数据和视频数据打包成一个文件的规范。不用封装格式差距不大, 各有千秋。

从视频播放器播放一个互联网上的视频文件

需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,其他步骤相同。

  • 解协议:流媒体协议的数据,解析为标准的相应的封装格式数据

  • 解封装:将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。

  • 解码:就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。

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

为什么要对视频数据进行编码

视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成视频码流,从而降低视频的数据量。举个例子:比如当前手机的屏幕分辨率是1280 * 720(即我们平时在视频软件中可选的720P),假设一秒钟30帧(即1秒钟传输30张图片),那么一秒钟的数据为 1280 * 720(位像素)*30(张) / 8(1字节8位)(结果B),也就是一秒钟的数据量为3.456M数据量,一分钟就是207.36M,那么我们平常看一部电影就是大约18G的流量,试想下如果是这样对于存储即网络传输是件多么恐怖的事情。

正是因为以上原因,我们需要对视频数据进行编码,以最小程序减小清晰度与最大程序降低数据量,而H264正是目前广泛使用的一种编码格式,下面我们将主要介绍下H264的码流结构。

2、码流结构

刷新图像概念

在我们的印象中,一张图片就是一张图像,而在H264中图像是个集合的概念。

帧、顶场、底场都可以称为图像。一帧通常就是一幅完整的图像。当采集视频信号时,如果采用逐行扫描,则每次扫描得到的信号就是一副图像,也就是一帧。当采集视频信号时,如果采用隔行扫描(奇、偶数行),则扫描下来的一帧图像就被分为了两个部分,这每一部分就称为「场」,根据次序分为:「顶场」和「底场」。「帧」和「场」的概念又带来了不同的编码方式:帧编码、场编码。逐行扫描适合于运动图像,所以对于运动图像采用帧编码更好;隔行扫描适合于非运动图像,所以对于非运动图像采用场编码更好。

H264原始码流

  • 结构:由一个接一个的 NALU 组成的,而它的功能分为两层,VCL(视频编码层)和 NAL(网络提取层).

    • VCL:包括核心压缩引擎和块,宏块和片的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值