Android直播开发之旅(2):深度解析H.264编码原理

Android直播:H.264编码原理深度解析
本文介绍了H.264编码原理,包括视频压缩的必要性、I帧、P帧、B帧的概念以及H.264编码框架。通过解析H.264数据组织形式,探讨了NAL技术,如NALU结构和NALU类型的含义,以及如何检测和解析SPS、PPS、I/P/B帧。

 

 (码字不易,转载请申明出处:http://blog.youkuaiyun.com/andrexpert/article/details/71774230 )

前 言

    在学习H.264编码之前,我们先了解一下在视频直播的过程中,如果Camera采集的YUV图像不做任何处理进行传输,那么每秒钟需要传输的数据量是多少?Camera采集的YUV图像通常为YUV420,根据YUV420的采样结构,YUV图像中的一个像素中Y、U、V分量所占比例为1:1/4:1/4,而一个Y分量占1个字节,也就是说对于YUV图像,它的一个像素的大小为(1+1/4+1/4)*Y=3/2个字节。如果直播时的帧率设置为30fps,当分辨率为1280x720,那么每秒需要传输的数据量为1280*720(像素)*30(帧)*3/2(字节)=39.5MB;当分辨率为1920x720,那么每秒需要传输的数据量接近60MB,而在现实网络中,这么高的上行宽带一般是很难达到的,因此,我们就必须在传输之前对采集的视频数据进行压缩编码。

1.    H.264简介

    H.264是MPEG-4的第十部分,是由VCEG和MPEG联合提出的高度压缩数字视频编码器标准,目前在多媒体开发应用中非常广泛。H.264具有低码率、高压缩、高质量的图像、容错能力强、网络适应性强等特点,它最大的优势拥有很高的数据压缩比率,在同等图像质量的条件下,H.264的压缩比是MPEG-2的两倍以上。

(1) H.264编码原理

    在H.264协议里定义了三种帧,完整编码的帧叫I帧(关键帧),参考之前的I帧生成的只包含差异部分编码的帧叫P帧,还有一种参考前后的帧编码的帧叫B帧。H.264编码采用的核心算法是帧内压缩和帧间压缩。其中,帧内压缩是生成I帧的算法,它的原理是当压缩一帧图像时,仅考虑本帧的数据而不用考虑相邻帧之间的冗余信息,由于帧内压缩是编码一个完整的图像,所以可以独立的解码显示;帧间压缩是生成P、B帧的算法,它的原理是通过对比相邻两帧之间的数据进行压缩,进一步提高压缩量,减少压缩比。通俗的来说,H.264编码的就是对于一段变化不大图像画面,我们可以先编码出一个完整的图像帧A,随后的B帧就不编码全部图像,只写入与A帧的差别,这样B帧的大小就只有完整帧的1/10或更小。B帧之后的C帧如果变化不大,我们可以继续以参考B的方式编码C帧,这样循环下去。

 

     H.264编码框架分两层:

     VCL(Video Coding Layer):负责高效的视频内容表示;

     NAL(Network Abstraction Layer):负责以网络所要求的恰当的方式对数据进行打包和传送;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值