范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

音视频开发浅析H。264编码格式

  在学习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.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) :负责以网络所要求的恰当的方式对数据进行打包和传送; 1.2 IDR(I帧)
  IDR(Instantaneous Decoding Refresh):即时解码刷新 。一个序列的第一个图像叫做IDR 图像(立即刷新图像),IDR 图像都是I 帧图像(关键帧)。
  H.264引入 IDR 图像是为了解码的重同步, 当解码器解码到IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列 。
  这样,如果前一个序列出现重大错误,在这里可以获得重新同步的机会。IDR图像之后的图像永远不会使用IDR之前的图像的数据来解码。 SPS(Sequence Parameter Sets):序列参数集, 作用于一系列连续的编码图像。 PPS(Picture Parameter Set):图像参数集 ,作用于编码视频序列中一个或多个独立的图像。 SEI(Supplemental Enhancement Information):附加增强信息 ,包含了视频画面定时等信息,一般放在主编码图像数据之前,在某些应用中,它可以被省略掉。 P帧:前向预测编码帧。 P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,它P帧是I帧后面相隔1~2帧的编码帧,其没有完整画面数据,只有与前一帧的、画面差别的数据。 B帧:双向预测内插编码帧。 B帧记录的是本帧与前后帧的差别,它是由前面的I或P帧和后面的P帧来进行预测的。 1.3 H.264与X.264区别
  H.264是需要付费的编码格式,而x264是符合H.264标准的一个开源项目,是免费的,也就是H264的一个简化版,不支持某些高级特性 。
  但x264非常优秀,并不比H264的商业编码器差。H264采用的核心算法是帧内压缩和帧间压缩,帧内压缩是生成I帧的算法,帧间压缩是生成B帧和P帧的算法。 2.H.264数据组织形式
  通常,数据的组织形式从大到小排序是:序列(sequence)、图像(frame/field-picture)、片组(slicegroup)、片(slice)、宏块(macroblock)、块(block)、子块(sub-block)、像素(pixel)。
  在H.264码流中图像是以序列为单位进行组织的,一个序列是由多帧图像被编码后的数据流,以I帧开始,到下一个I帧结束;
  一帧图像可以分成一个或多个片(slice),片由宏块组成,宏块是编码处理的基本单位,当片编码之后会被打包进一个NALU,也就是一帧图像对应于一个NALU。
  NALU是H.264编码数据存储或传输的基本单位,它除了容纳片还可以容纳其他数据,如SPS、PPS、SEI等。
  根据H.264编码原理可知,一个序列是一段内容差异不太大的图像编码生成的一串数据流。
  当运动变化比较少时,一个序列可以很长,这是由于运动变化少就代表图像画面的内容变动就很小,所有就可以编一个I帧,然后后面一直P帧、B帧 ;当运动变化较大,可能这个序列就比较短,因为图像画面的内容变动大,所以P帧、B帧就相对减少。
  总之,一个序列总是以I帧为开始,到下一个I帧结束,序列包含的图像帧的数量与画面变化情况有关。
  相关视频推荐
  音视频开发必备基础知识及如何用好开源项目_哔哩哔哩_bilibili
  音视频学习最佳实践—从FFmpeg到流媒体服务器开发_哔哩哔哩_bilibili
  学习地址:【免费】FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发-学习视频教程-腾讯课堂
  需要更多ffmpeg/webrtc..音视频流媒体开发学习资料加群 812855908 领取
  3.H.264中的NAL技术
  从H.264的介绍可知, NAL是H.264/AVC编码框架中的网络抽象层,即NetworkAbstract Layer,它主要负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的有效传输。
  由于实际中的信息传输系统可靠性、封装方式、服务质量等特征的多样化,NAL提供了一个视频编码器和传输系统的友好接口,使得编码后的视频数据能够有效地在各种不同的网络环境中传输。
  在NAL层中, NALU(Network Abstract Layer Unit,网络抽象层单元) 是 H.264编码存储或传输的基本单位,在H.264码流中每一帧数据就是一个NALU(注:SPS、PPS、SEI不属于帧)。
  每个NALU都包含一个头结构,这个头结构占1个字节(8位),它标明了该NAL单元的是否可丢弃、重要性指示和NALU类型,结构如下:
  其中: 禁止位: 当网络发现NALU存在错误时,该位将被设置为1以方便接收方丢弃该NALU; 重要性指示: 用于标志该NALU用于重建时的重要性,其值越大表示越重要; NALU类型: 用于判断该NALU是否为PPS、SPS、I(关键)/P/B帧等,一般H.264码流
  最开始的两个NALU是SPS和PPS,第三个NALU是IDR(I帧)。 NALU类型是判断帧类型重要工具,至于如何去利用它来实现SPS、PPS和I/P/B帧等信息的检测,我们接下来会举例详细介绍,以下是相关值与NALU类型的映射关系图:
  从上图可知, 当NALU类型=5时,说明该NALU是关键帧(I帧);当NALU类型=6时,说明该NALU是附加增强信息;当NALU类型=7时,说明该NALU是序列参数集(SPS);当NALU类型=8时,说明该NALU是图像参数集(PPS),依次类推 。 4.H.264中SPS、PPS、I/P/B帧检测与解析4.1 H.264码流分层结构
  在分析SPS、PPS、I/P/B帧之前,我们先了解下H.264码流分层的结构。从外往里看, H.264码流实际是由多个NALU组成的码流序列集合 (如第一层所示),而一个序列是以I帧开始,以下一个I帧结束。
  NALU是H.264编码存储或传输的基本单元,NALU由NALU 头部和NALU主体组成(如第二层所示) ,其中,NALU头部占1个字节,H.264中的SPS、PPS、I/P/B帧的检测正是通过NALU头部中的NALU类型来实现的。
  H.264码流分层结构如下图所示:
  4.2 H.264文件解析
  一般来说, 编码器编出的首帧数据为SPS与PPS,接着为I帧(关键帧) ,再后面就是P帧、B帧…。
  而 对于H.264码流而言,每帧图像的界定符为0x00000001、0x000001,也称起始码 ,它们分别占4个字节或3个字节,而起始码的后的一个字节便是NALU头,通过这个字节我们就可以很简单的找到所需的SPS、PPS、I/P/B帧。
  这里,我们通过分析一个H.264文件来进行讲解,使用H.264 Video ES Viewer工具打开一个test.264文件,至于h264文件的生成,我将再下一篇博文进行详细介绍,H264码流结构如下图:
  从上图可知, 每一行表示一帧图像(除SPS、PPS除外),每一行包括四列,其中第一列为该帧图像存储的逻辑地址 ;第二列为该帧图像数据所占字节长度,由于H264的编码原理可以知道,H264码流中的每一帧图像并不是实际上的一帧图像,而是多帧图像的集合;
  第三列表示图像帧的起始码,均为0x00000001;第四列表示的是NAL类型,由图可知,H264编码器编出的首帧数据为SPS与PPS,接着为I帧(关键帧),再后面就是P帧或B帧(非I帧)… 4.3 SPS、PPS、I/P/B帧检测
  有了前面的理论和分析基础,再来判断H.264码流中的(3) SPS、PPS、I/P/B帧,那就显得非常容易了。
  我们知道, H.264码流中的一帧数据总是以0x00000001或0x000001开始的,起始码的下一位就是NALU头 ,比如第一帧数据NALU头为0x67,我们截取码流中的前几帧数据进行分析:    第一帧:0000 00 01 **67** 42 80 1F DA 02 D0 28 68 ….(占17个字节)    第二帧:0000 00 01 **68** CE 06 E2 (占8个字节)    第三帧:0000 00 01 **65** B8 40 F7 8F FC EB 04 …. (占31872个字节)    第四帧:0000 00 01 **41** E2 01 10 EA 4E 9F … (占3408字节)    第五帧:0000 00 01 **41** E4 01 10 EC 7B DF 13 … (占2096个字节)
  由于NALU类型由NALU头的后五位决定的,即字节下标的3-7位,我们只需要得到这五位的十进制值,再与NAL类型对照表进行比较就可以知道该帧图像是否为SPS、PPS或I帧(关键帧)等。
  在编码过程中,我们可以通过将每帧数据起始码的下一个字节与0x1F相与取得NAL头的后五位即可得到该帧的类型,比如:    0x67& 0x1F = (0110 0111) & (0001 1111) =(0000 0111)=7(十进制)–> SPS    0x68& 0x1F = (0110 1000) & (0001 1111) =(0010 1000)=8(十进制)–> PPS    0x65& 0x1F = (0110 0101) & (0001 1111) =(0000 0101)=5(十进制)–> 关键帧(I帧)    0x41 & 0x1F = (01000001) & (0001 1111) =(0000 0001)=1(十进制) –> 非关键帧(I帧)

库克郭台铭没预料到,将生产线撤离中国后,员工离职工厂停工如果非要评价一下,为什么苹果能在中国的手机市场占一定的主导地位,其实,除了它本身发达的技术和优秀的配置之外,还与它快速的生产效率有着莫大的关系。苹果在中国建立了多条生产线,还与代加芯片垄断并不可怕,美企开始尝到苦果,新领域面临技术断供01不给华为芯片作为了我们的国货之光,华为之所以能够拥有今天的成就,和他们自身的强大技术实力有着非常大的关系。光是5G方面的专利就高达3247项,这点在5G领域中也是冠绝全球的。随华为鸿蒙可能改名?无论如何,我们也只认华为鸿蒙云将东游,过扶摇之枝,而适遭鸿蒙。鸿蒙寓意混沌状的远古时代的世界。鸿蒙华为曝光鸿蒙的时候正在多重打压之中,为了给中国自主科研带来更多的市场信心。华为扛住压力屏住呼吸。硬件主推麒麟芯2021年最新华为麒麟处理器全系列性能排行榜华为麒麟芯片是华为旗下的海思半导体公司的产品,海思专注于设计和开发芯片,经过多年的苦心研究,麒麟芯片现已成为华为手机最为重要的保障。可以说华为的成功离不开麒麟处理器的贡献,时至今日盖茨夫妇分割财产再上热搜,中国版的天价分手费也不少近日,美国微软联合创始人比尔盖茨与妻子梅琳达宣布离婚的消息震惊全球媒体,引发了社会各界的广泛讨论。5月15日,随着有媒体爆料盖茨创立的投资公司向梅琳达名下转移了大量股份,有关两人财今天我们聊聊你想知道的币圈背后的逻辑炒币现在已经不是什么新闻了,只是很多人并未参与其中,对炒币这种行为和流程并不熟悉和理解,但是看到一夜暴富的新闻后,估计很多人更想掀开帘子看看这里面到底是什么。那币是什么东西呢?首先美团,会不会倒下?昨天写的文章,大家反响很激烈,一边倒地支持美团完蛋,还没看的小伙伴可以去看看美团们,手下留情吧其实,写这篇文章的时候,我尽可能地压制住自己的情绪,阐述一个现状和事实,甚至没有想过通华为鸿蒙系统可能妥协改名?多年铺垫难道为别人做了嫁衣?提起华为大家太熟悉了,对于这个国产品牌大家也越来越青睐,很多国人现在购买手机的时候都会考虑华为手机。华为也不负大家的期待,在各种困难下,都迎难而上,不断地推出新品。但近期大家对于华台积电新计划,赴美建芯片厂,剑指3nm,真建厂?还是假投资?这段时间,争议最大的事就是台积电在中国大陆建置28nm生产线的事。很多人质疑台积电到南京建置28nm产能是为了抢占国内中低端制程芯片,打压国产芯片行业的崛起,垄断大陆中端芯片订单。青桔与哈啰加码后,共享电动车市场再迎三国杀从行业初期的色彩大战,到押金风波后的一地鸡毛,共享单车领域无疑也已经经历了大起大落的发展历程,并在最后仅仅只剩下了寥寥无几的头部平台,也使得其行业格局由此趋于稳定。而在这其中,包括OPPOFindX3Pro评测直面争议,和藏在色彩里的秘密什么样的手机才是旗舰手机?旗舰每年各家品牌能发布好几十台,但似乎,很少有厂商愿意去定义和解释一千个人眼里有一千个哈姆雷特。在维基百科上旗舰的释义是指挥舰,是海军舰队或是舰队司令官所
荣耀X20Max发布在即,为何国产机宁愿搞超大屏Max,也不做mini?感谢您的阅读!你看到iPhone12mini,你也看到了iPhone13mini,可是你真的会喜欢这些手机吗?我们知道小屏手机有好处,因为能够让我们更好的去握持手机,能够更好的去携曝AMDRX6600显卡本周上市国行价格2499元AMD有段时间没有更新显卡了。来自ChannelGate视博合聚的爆料称,AMDRX6600显卡的发布时间敲定在10月13日晚21点,官方指导价2499元,比RX6600XT便宜5oppoK9pro和红米K30S价格差别不大,该如何选?根据买新不买旧的原则,小芳个人是会更加推荐大家购oppoK9pro买这款手机的。不过话又说回来,每个人的需求是会存在差异的。那么做出的最终购机决定也是会有所不同的。鉴于这个情况小芳一种新型太阳能净水热水装置获实用新型专利近日,由山东一建物贸科技公司自主研发的一种新型太阳能净水热水装置科技成果顺利通过国家知识产权局审批,获得实用新型专利授权。一种新型太阳能净水热水装置,是在现有的太阳能热水器的基础上iQOOz5和荣耀play5相比较,买哪款好?这两款手机之间,大家完全不用考虑直接入手iQOOz5这款手机就可以了,因为iQOOz5这款手机的性价比完全是能够吊打荣耀play5这款手机的。不过为了让我小芳这个论述更加具有说服力荣耀Note20悄悄备货,5500mAh7。2寸大屏,没想到赵明留了后手从用户的对手机尺寸的喜爱度方面来讲,目前大家最感兴趣还是6。5英寸左右的机型,有手机厂商尝试着发布大屏手机或者更小尺寸的小屏手机,但市场反响都不是很好。比如在iPhone13系列中荣耀Note20已备货,7英寸大屏5500mAhTurbo加速,堪称电竞机皇荣耀最近动作不断,被曝光了注册了magicX的商标,之前也有业内人士说荣耀在生产2590mAh的单块电芯,就是荣耀最新的折叠屏手机,对标的就是华为的mateX折叠手机,预计年底上线144Hz旦用难回荣耀详解MagicBook16Pro综合体验才是真的好在推出荣耀V40荣耀50及全能科技旗舰Magic3系列手机之后,荣耀今年也大力发展了PC产业线,9月底的发布会上推出了高端笔记本MagicBookV14荣耀MagicBook16系旗舰轻薄本中的白月光荣耀MagicBookV14评测猛堆料诞下的性能怪兽2021年9月的荣耀新品发布会上,除了大屏轻薄本荣耀MagicBook16Pro锐龙版之外,还迎来了荣耀首款旗舰级轻薄笔记本荣耀MagicBookV14。作为一台高质量轻薄本,荣耀人工智能厨师发明智能厨师是一套先进的后厨智能设备,不同于现在的德国美善品炒菜锅,德国美善品只能将菜炒熟,却保证不了口味的标准性智能厨师能够完美地制作出标准的,特级厨师的每一道菜。这套设备的出现,将车机控制保温杯?聊聊咖啡智能新动作前两天,小鹏汽车发布了可骑乘的机器马,不禁让人想起了小米推出的吉姆尼遥控车。前者将品牌的智能化传播到了孩子圈,后者在去年疫情期间,成了红极一时的手机周边产品。两家企业靠不务正业给自