音视频入门——H.264编码(宏块+片+帧)浅析

(1)图像冗余信息:空间冗余、时间冗余
(2)视频编码关键点:压缩比、算法复杂度、还原度
(3)H.264的2大组成部分:视频编码层VCL和网络抽象层面NAL Network Abstract Layer,

(1)宏块 MB macroblock
(2)片 slice
(3)帧 frame
(4)I帧、B帧、P帧

(5)帧率 fps
(6)像素->宏块->片->帧->序列->码流

我们了解了什么是宏快,宏快作为压缩视频的最小的一部分,需要被组织,然后在网络之间做相互传输。

H264更深层次 —》宏块 太浅了

如果单纯的用宏快来发送数据是杂乱无章的,就好像在没有集装箱 出现之前,货物总是随意被堆放到船上。

上货(编码),下货是非常痛苦的。 当集装箱出现之后,一切都发生了改变,传输效率大大增高。

集装箱可以理解成H264编码标准,他制定了相互传输的格式,将宏快 有组织,有结构,有顺序的形成一系列的码流。这种码流既可 通过 InputStream 网络流的数据进行传输,也可以封装成一个文件进行保存

H264: H264/AVC是广泛采用的一种编码方式 。 主要作用是为了传输

组成H264码流的结构中 包含以下几部分 ,从大到小排序依次是

NAL层:(Network Abstraction Layer,视频数据网络抽象层): 它的作用是H264只要在网络上传输,在传输的过程每个包以太网是1500字节,而H264的帧往往会大于1500字节,所以要进行拆包,将一个帧拆成多个包进行传输,所有的拆包或者组包都是通过NAL层去处理的。
VCL层:(Video Coding Layer,视频数据编码层): 对视频原始数据进行压缩

H264是一种码流 类似与一种不见头,也不见尾的一条河流。如何从和流中取到自己想要的数据呢,

在H264的标砖中有这样的一个封装格式叫做"Annex-B"的字节流格式。 它是H264编码的主要字节流格式。

几乎市面上的编码器是以这种格式进行输出的。起始码0x 00 00 00 01 或者 0x 00 00 01 作为分隔符。

两个 0x 00 00 00 01之间的字节数据 是表示一个NAL Unit

切片头:包含了一组片的信息,比如片的数量,顺序等等

H264中,以16x16的宏块为编码最小单元,一个宏块可以被分成多个4x4或8x8的块
同一个宏块内,像素的相似程度会比较高,若16x16的宏块中,像素相差较大,那么就需要继续细分

当然,像素块越小,编码的复杂度也会随之增加,编码效率自然就会降低。但是这样是值得的,因为图像的压缩效率有了显著提高,也就是编码后得到的相同质量的图像,H.264的压缩比更大,占用的空间及带宽更小。

不合理的分块会出现块效应,即块与块之间色差明显
海思在3559之后有deblock的接口可以应对块效应,3519上用的很多

在I帧中,全部宏块都采用帧内预测的方式,所以解码时仅用I帧的数据就可重构完整图像,不须要参考其余画面而生成。web

H.264中规定了两种类型的I帧:普通I帧(normal Iframes)和IDR帧(InstantaneousDecoding Refresh, 即时解码刷新)。 IDR帧实质也是I帧,使用帧内预测。IDR帧的做用是当即刷新,会致使DPB(Decoded Picture Buffer参考帧列表)清空,而I帧不会。因此IDR帧承担了随机访问功能,一个新的IDR帧开始,能够从新算一个新的Gop开始编码,播放器永远能够从一个IDR帧播放,由于在它以后没有任何帧引用以前的帧。若是一个视频中没有IDR帧,这个视频是不能随机访问的。全部位于IDR帧后的B帧和P帧都不能参考IDR帧之前的帧,而普通I帧后的B帧和P帧仍然能够参考I帧以前的其余帧。IDR帧阻断了偏差的积累,而I帧并无阻断偏差的积累。算法

一个GOP序列的第一个图像叫作 IDR 图像(当即刷新图像),IDR 图像都是 I 帧图像,但I帧不必定都是IDR帧,只有GOP序列的第1个I帧是IDR帧。缓存

疑问:按照GOP、IDR帧、I帧的解释,若是一个GOP出现除去第一个IDR帧以外的I帧,是不存在的,那这样的话,就不存在非IDR的I帧了,但是为何还要说明非IDR的I帧呢。svg

解答:H264编码存在多种编码方式CBR、VBR、CVBR、ABR等等,VBR编码模式下图像内容变化差别很大时,会动态调整I帧的数量,所以GOP的概念须要修正:两个IDR帧之间的间隔为一组GOP,一组GOP中能够出现非IDR的I帧。编码

P帧:前向预测编码帧。P帧表示的是这一帧跟以前的一个关键帧(或P帧)的差异,解码时须要用以前缓存的画面叠加上本帧定义的差异,生成最终画面,P帧没有完整画面数据,只有与前一帧的画面差别的数据。P帧的压缩率20code

B帧:双向预测内插编码帧。B帧是双向差异帧,也就是B帧记录的是本帧与先后帧的差异,要解码B帧,不只要取得以前的缓存画面,还要解码以后的画面,经过先后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,约为50,可是解码时CPU会比较累。orm

通常能够输出H264帧的USB摄像头,使用的是BP-Baseline Profile,只有I帧与P帧。视频

而slice呢,也是对宏块的划分

本文简单叙述了;音视频中的H264编码中的,宏块、帧、片。音视频还有更深入的学习,知识范围很广,需要一套很详细的学习资料与路线。我推荐上面的一套入门到精通资料辅佐。

  • 銆闊宠棰寮鍙戙H264缂栫爜鍩虹
    绛旓細H264缂栫爜锛屼綔涓闊宠棰寮鍙戜腑鐨勫叧閿妧鏈紝閫氳繃绮惧瘑绠楁硶瀹炵幇浜嗛珮鏁堢殑鏁版嵁鍘嬬缉锛屼互鍑忓皬浼犺緭閲忋傚畠宸у鍦板埄鐢ㄧ┖闂淬佹椂闂淬佺粨鏋勩佽瑙夊拰鐭ヨ瘑鍐椾綑锛屽疄鐜颁簡甯у唴棰勬祴锛堟秷闄ょ┖闂村啑浣欙級鍜屽抚闂撮娴嬶紙娑堥櫎鏃堕棿鍐椾綑锛夌殑鍙岄噸绛栫暐銆侷甯т綔涓哄叏甯у唴缂栫爜鐨勫熀鐭筹紝P甯у拰B甯у垯鍙兘閲囩敤娣峰悎缂栫爜锛岀伒娲诲簲瀵逛笉鍚屽満鏅殑闇姹傘傛牳蹇冪紪鐮...
  • 闊宠棰寮鍙(鍗佷竷):瑙嗛缂栫爜H.264銆乂P8鐨勫墠涓栦粖鐢
    绛旓細娣卞叆鎺㈢储闊宠棰戠紪鐮锛欻.264涓嶸P8鐨勫墠涓栦粖鐢熷湪鎺㈢储闊宠棰戝紑鍙戠殑鏃呯▼涓紝鐞嗚В瑙嗛缂栫爜鑷冲叧閲嶈銆傝鎴戜滑涓璧疯蛋杩汬.264鍜孷P8鐨勪笘鐣岋紝瀹冧滑鍦ㄥ疄鏃堕氳鍜屼簰鑱旂綉濯掍綋涓殑瑙掕壊涓嶅蹇借銆備粠鍩虹鐞嗚鍒板疄闄呭簲鐢紝H.264锛MPEG-4 AVC锛夊拰VP8锛圚.265鍜孷P9锛夋槸鎴戜滑鐨勭劍鐐广侶.264 - 宸ヤ笟鏍囧噯鐨勯粍閲戞爣鍑 H.264鏄...
  • 闊宠棰瀛︿範浠庨浂鍒版暣-- H264鐮佹祦缁撴瀯
    绛旓細H264缁撴瀯涓紝涓涓瑙嗛鍥惧儚缂栫爜鍚庣殑鏁版嵁鍙仛涓甯э紝涓甯х敱涓涓墖锛坰lice锛夋垨澶氫釜鐗囩粍鎴愶紝涓涓墖鐢变竴涓垨澶氫釜瀹忓潡锛圡B锛夌粍鎴愶紝涓涓畯鍧楃敱16x16鐨剏uv鏁版嵁缁勬垚銆傚畯鍧椾綔涓H264缂栫爜鐨勫熀鏈崟浣 銆侶264缂栫爜鍒嗗眰,鍒嗕负浜2灞 .NAL 鍗曞厓鏄敱涓涓狽ALU澶撮儴+涓涓垏鐗.鍒囩墖鍙堝彲浠ョ粏鍒嗘垚"鍒囩墖澶+鍒囩墖鏁版嵁".鎴戜滑涔...
  • 闊宠棰 (涓) 鈥斺 H.264 涓殑 NAL 鎶鏈
    绛旓細闊宠棰 (涓) 鈥斺 H.264 涓殑 NAL 鎶鏈 闊宠棰 (浜) 鈥斺 H.264涓浉鍏冲弬鏁扮悊瑙 闊宠棰 (涓) 鈥斺 瑙嗛鐩稿叧鍙傛暟鐨勭悊瑙 NAL 鍏ㄧО Network Abstract Layer锛屽嵆缃戠粶鎶借薄灞傘傚湪 H.264/AVC 瑙嗛缂栫爜鏍囧噯涓紝鏁翠釜绯荤粺妗嗘灦琚垎涓 浜嗕袱涓眰闈:瑙嗛缂栫爜灞傞潰(VCL)鍜岀綉缁滄娊璞″眰闈(NAL)銆傚叾涓紝鍓嶈呰礋...
  • H264涔嬪抚缂栫爜鈥斺閫忔瀽(I甯+P甯+B甯х紪鐮)鍘熺悊涓庢祦绋
    绛旓細(5) 鐔缂栫爜锛屽鏋滄槸甯ч棿缂栫爜妯″紡锛岀紪鐮佽繍鍔ㄧ煝閲 Android闊宠棰戝伐绋嬪笀蹇呭銆婂叏濂闊宠棰戝叆闂鍒扮簿閫氭墜鍐屻婭甯у彧闇鑰冭檻鏈抚锛汸甯ц褰曠殑鏄笌鍓⼀甯х殑宸埆锛汢甯ц褰曠殑鏄墠⼀甯у強鍚⼀甯х殑宸埆,鑳借妭绾︽洿澶氱殑绌洪棿,瑙嗛⽂浠⼩浜,浣嗙浉瀵规潵璇瑙g爜鐨勬椂鍊欏氨⽐杈&...
  • 闊宠棰蹇鍏ラ棬
    绛旓細鐮佹祦璁$畻鏂瑰紡 RGB鐮佹祦=鍒嗚鲸鐜 3Byte 甯х巼 鍋囪褰撳墠鐨勫垎杈ㄧ巼 瀹戒负1920 楂樹负1080 鍍忕礌娣卞害涓篟GB涓夊師鑹3Byte 甯х巼涓1绉25甯 閭d箞璇ユ瘡绉掍骇鐢熺殑RGB鐮佹祦璁$畻鍏紡涓猴細渚嬪锛1920 1080 3*25=155520000绾155M銆俌UV鍘嬬缉 H264锛堟柊涓浠h棰戝帇缂缂栫爜鏍囧噯锛塅LV锛團lash Video锛塎P4 MP4 涓昏 BOX 闊宠棰鍚屾 AAC锛...
  • H264缂栫爜鍘熺悊(I甯甯甯)
    绛旓細娣卞叆瑙f瀽H264缂栫爜锛欼甯с丅甯т笌P甯х殑濂ョ鍦℉264缂栫爜鐨勪笘鐣屼腑锛屽抚鐨勭被鍨嬪喅瀹氫簡瑙嗛鍘嬬缉鐨勬晥鐜囧拰瀹炴椂鎬с備富瑕佹湁涓夌甯э細I甯с丳甯у拰B甯э紝瀹冧滑鍚勮嚜鎵紨鐫鍏抽敭鐨勮鑹层侷甯э紙Intraframe锛: 鍏抽敭鐨勫抚鍐呭帇缂㊣甯э紝鍙堢О涓篒DR甯э紝鏄抚鍐呭帇缂╃殑浠h〃锛屽叾鐗规у湪浜庢瘡涓涓狦OP锛圙roup of Pictures锛夌殑璧峰甯ч兘浼氭槸涓...
  • 闊宠棰鍘嬬缉:H264鐮佹祦灞傛缁撴瀯鍜孨ALU璇﹁В
    绛旓細鎵浠ョ幇鍦ㄦ垜浠渶瑕佷竴绉嶅帇缂╂柟寮忓噺灏忔暟鎹殑澶у皬.鍦ㄦ洿浣 姣旂壒鐜(bps)鐨勬儏鍐典笅渚濈劧鎻愪緵娓呮櫚鐨瑙嗛銆 H264: H264/AVC鏄箍娉涢噰鐢ㄧ殑涓绉缂栫爜鏂瑰紡銆傛垜浠繖杈逛細甯﹀ぇ瀹朵簡瑙c備粠澶у埌灏忔帓搴忎緷娆℃槸 搴忓垪,鍥惧儚,NALU,鐗,瀹忓潡,浜氬畯鍧,鍧,鍍忕礌銆 闂鑳屾櫙: 鍓嶉潰鍦ㄨ灏佽鏍煎紡杩囩▼涓,閮芥湁涓涓珷鑺傝瑙e浣曞皢H.264鐨凬ALU鍗曞厓...
  • 闊宠棰戠‖瑙g爜绡鈥斺旈煶瑙嗛鍩虹鐭ヨ瘑
    绛旓細H264鐨勭簿鍗庯細浣滀负涓绘祦缂栫爜鏍煎紡锛孒264閲囩敤鍔ㄦ佸帇缂╃瓥鐣ワ紝鍖呮嫭I甯с丳甯у拰B甯х殑缁勫悎銆傚叧閿抚濡侴OP锛堜竴缁勫彉鍖栬緝灏忕殑甯э級涓殑IDR甯э紝纭繚浜瑙g爜鐨勭ǔ瀹氭у拰閿欒瀹归敊銆侱TS/PTS鏄В鐮佸拰鎾斁鏃堕棿鎴筹紝瀹冧滑绮惧噯鎺у埗闊宠棰鐨勫悓姝ユ挱鏀撅紝淇濊瘉瑙傛劅娴佺晠銆傝壊褰╃┖闂存柟闈紝H264閲囩敤YUV缂栫爜锛屽父瑙佺殑瀛樺偍褰㈠紡鏈塸lanar鍜宲acked...
  • H.264/MPEG-4 AVC瀛︿範
    绛旓細鍦ㄦ暟鎹繚鎶ゆ柟闈紝H.264閲囩敤鍒嗙骇鐨勫潡淇濇姢锛岀‘淇濆叧閿暟鎹殑瀹夊叏銆傚紑婧愬疄鐜板OpenH264鍜寈264锛屽悇鏈変紭鍔垮拰灞闄愩侶EVC鐨勫埌鏉ワ紝灏界鍦ㄧ爜鐜囪妭鐪佷笂鏈変紭鍔匡紝浣咹.264鍦ㄧ紪鐮侀熷害涓婁緷鐒跺崰鎹笂椋庛侶.264鐨勫墠韬负H.261锛岃屽湪涓嶆柇鐨勬妧鏈凯浠d腑锛闊宠棰戠紪鐮鎶鏈兢739729163鏄涔犲拰鍒嗕韩璧勬簮鐨勫疂搴撱傛荤殑鏉ヨ锛孒.264/...
  • 扩展阅读:h 264编码怎么设置 ... h 264帧内编码 ... 编码器h.264 ... 音视频编码论坛 ... 音频base64编码 ... h 264编码转换 ... h264格式的mp4怎么转 ... h264怎么转换mp4 ... mp4视频的编码在哪看 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网