H.264¥ý¶iµø°T½s¸Ñ½X¼Ð·Ç
(¥»¤å¨ú¦Û¼Æ¦ìµø°T¤ë¥Z¡Aì¤å¥Z¸ü¦b¡Ghttp://www.dvo.org.tw/publication/20050403.html)
³¢¨ä©÷/¤u¬ã°|¹q³q©Ò1. «e¨¥
¦b2001¦~12¤ë¡AITU-T VCEG»PISO MPEG¦@¦P²Õ¦¨Áp¦Xµø°T¤p²Õ(Joint Video Term¡AJVT)¨Ó¬ãq·sªºµø°TÀ£ÁY®æ¦¡¡A¦¹·s®æ¦¡¦bITU-T²Õ´¤¤ºÙ¬°H.264¡A¦bISO²Õ´¤¤«h¯Ç¤JMPEG-4 Part-10 (ISO/IEC 14496-10)¨Ã©R¦W¬°Advanced Video Coding (AVC)¡A³q±`¦X¨ÖºÙ¬°H.264/AVC [1]¡A¨ä°ê»Ú¼Ð·Çªº²Ä¤@ª©©ó2003¦~¤½§G¡A¦Ó¼Wתº²Ä¤Gª©¤]©ó2005¦~3¤ë©w®×¡C¬ÛÃö¬ã¨sÅã¥ÜH.264/AVC»PMPEG-2¤ÎMPEG-4¬Û¸û¤§¤U¡AµL½×¬OÀ£ÁY²v©Îµø°T«~½è¬Ò¦³¤j´Tªº´£¤É[2]¡A¦Ó¥BH.264/AVC¤]º¦¸±Nµø°T½s½X¼h(Video Coding Layer¡AVCL)»Pºô¸ô´£¨ú¼h(Network Abstraction Layer¡ANAL)ªº·§©À²[»\¶i¨Ó¡A¥H©¹µø°T¼Ð·ÇµÛ«ªº¬OÀ£ÁY®Ä¯à³¡¤À¡A¦ÓH.264/AVC¥]§t¤@Ó¤º«ØªºNALºô¸ô¨ó©w¾AÀ³¼h¡AÂÇ¥ÑNAL¨Ó´£¨Ñºô¸ôªºª¬ºA¡A¥i¥HÅýVCL¦³§ó¦nªº½s¸Ñ½X¼u©Ê»PªÈ¿ù¯à¤O¡A¨Ï±oH.264/AVC«D±`¾A¥Î©ó¦h´CÅé¦ê¬y(multimedia streaming)¤Î¦æ°Ê¹qµø(mobile TV)ªº¬ÛÃöÀ³¥Î¡C¦b²Ä¤@ª©ªº¼Ð·Ç³W½d¤¤¡AH.264/AVC®Ú¾Ú¨Ï¥Îªº½s½X¤u¨ãºØÃþ¨Ó´£¨Ñ¤TºØ½s½X³W¼Ò(Profile)¡A¦pªí1©Ò¥Ü¤À§O¬°Baseline Profile¡BMain Profile¡BExtension Profile¡A¦Ó¬Û¹ïÀ³ªº¼v¤ù¤Ø¤o»P¦ì¤¸²vµ¥¯Å¥ÑLevel 1¦ÜLevel 5.1¡A²[»\¤pµe±»P°ª¸ÑªR«×µe±ªºÀ³¥Î½d³ò¡CBaseline Profile¥Dn¬OµÛ²´©ó§C¦ì¤¸²vªºÀ³¥Î(¨Ò¦p¡G¼v¹³³q°T)¡A¦Ó¥B¨ä¹Bºâ½ÆÂø«×§C¡A©Ò¥H¤]¾A¦XÀ³¥Î©óÓ¤HÀH¨ªº¦h´CÅé¼·©ñ¾÷¡FMain Profile¦]¬°¦³¤ä´©¥æ¿ù¦¡¼v¤ù(interlaced content)ªº½s½X¡A©Ò¥H¾A¦XÀ³¥Î©óHDTV¼Æ¦ì¹qµø¼s¼½¡A¦Ó¥B«D±`®e©ö¾ã¦X¦b¶Ç²ÎªºMPEG-2 Transport/Program Stream¤W¨Ó¶Ç°eH.264/AVC¦ì¤¸¬y¡F¹ï©óIP-TV©Î¬OMOD (Multimedia On Demand)µ¥À³¥Î¡A¨Ï¥Î¥]§t°ª§Ü¿ù©Ê½s½X¤u¨ã(error resilient tools)ªºExtension Profile§Y¥i¥Hº¡¨¬³o¨Ç»Ý¨D¡CµM¦Ó¡A·L³n—û¤½¥q¦b2003¦~±N¨äµø°TÀ£ÁY§Þ³N¦V¬ü°êªº¹q¼v¹qµø¤uµ{®v¨ó·|(Society of Motion Picture and Television Engineers¡ASMPTE)´£¥X¤½¶}¼Ð·Ç¤Æªº¥Ó½Ð¡A¨Ã¥HVC-1 (Video Codec 1)¬°¦¹·s¼Ð·Çªº©R¦W[3]¡A¥Ñ©óVC-1¦b°ª¸ÑªR«×¼v¤ù¤Wªºªí²{¥X¦â¡A¾ÉPH.264/AVC¦bDVD Forum»PBlu-ray Disc Associationªº°ª¸ÑªR«×DVD¼v¤ù´ú¸Õ¤¤±Ñ°}¤U¨Ó¡A¨ä¥Dnì¦]¬OH.264/AVC¨Ï¥Î¸û¤p¤Ø¤oªºÂà´«¤½¦¡»PµLªk½Õ¾ãªº¶q¤Æ¯x°}¡A³y¦¨¤£¯à§¹¾ã«O¯d¼v¹³ªº°ªÀW²Ó¸`¸ê°T¡A¦]¦¹H.264/AVC©ó2004¦~®i¶}¼Ð·Ç¼Wתº°Q½×¡A¨Ó¯Ç¤JºÙ¤§¬°Fidelity Range Extensions (FRExt) [4]ªº·s½s½X¤u¨ã¡A¨Ã¥H¥ý«eMain Profile¬°°ò¦¨ÓÂX¥R¼W¥[4Ó·sªºµ¥¯Å(Table 1)¡A´Á±æ¯à°÷¦b°ª¸ÑªR«×¼v¤ùªºÀ³¥Î¤W§æ¦^¦H¶Õ¡A¥Ø«e¼WתºH.264/AVC²Ä¤Gª©¼Ð·Ç¤w©ó2005¦~3¤ëµoªí¡C¥»¤å«á¬q±N±´°Qºô¸ô´£¨ú¼hªº¬ÛÃö¯S©Ê¡A±µµÛ¨Ó»¡©úµø°T½s½X¼hªºì²z¡A³Ì«á¨Ã°Q½×H.264/AVCªºÀ³¥Î²{ªp¡C
2. ºô¸ô´£¨ú¼h (Network Abstraction Layer¡ANAL)
H.264/AVC¼Ð·Çªº¯S¦â¬O±Nºô¸ô´£¨ú¼hªº·§©À²[»\¶i¨Ó¡A¥ç§Y¥HNAL«Ê¥]¬°³æ¦ìªº¤è¦¡¨Ó°µ¬°VCL½s¸Ñ½Xªº¹Bºâ³æ¦ì¡A³o¼Ë¶Ç¿é¼h®³¨ìNAL«Ê¥]¤§«á¤£»Ýn¦A¶i¦æ¤Á³Î¡A¥u»Ýªþ¥[¸Ó¶Ç¿é¨ó©wªºÀÉÀY¸ê°T(adding header only)´N¥i¥H¥æ¥Ñ©³¼h¶Ç°e¥X¥h¡A¦p¹Ï1©Ò¥Ü¡A¥i¥H±NNAL·í¦¨¬O¤@Ó±M§@«Ê¸Ë(packaging)ªº¼Ò²Õ¡A¥Î¨Ó±NVCLÀ£ÁY¹Lªºbitstream«Ê¸Ë¦¨¾A·í¤j¤pªº«Ê¥]³æ¦ì(NAL-unit)¡A¨Ã¦bNAL-unit Header¤¤ªºNAL-unit TypeÄæ¦ì°O¸ü¦¹«Ê¥]ªº«¬¦¡¡A¨CºØ«¬¦¡¤À§O¹ïÀ³¨ìVCL¤¤¤£¦Pªº½s¸Ñ½X¤u¨ã¡CNAL¥t¥~¤@Ó«nªº¥\¯à¬°·íºô¸ôµo¥Í¾Ã¶ë¦Ó¾ÉP«Ê¥]¿ù»~©Î±µ¦¬¦¸§Ç¿ù¶Ã(out-of-order)ªºª¬ªp®É¡A¶Ç¿é¼h¨ó©w·|¦bReference Flag§@³]©wªº°Ê§@¡A±µ¦¬ºÝªºVCL¦b¦¬¨ì³oºØNAL«Ê¥]®É¡A´Nª¾¹Dn¶i¦æ©Ò¿×ªºªÈ¿ù¹Bºâ(error concealment)¡A¦b¸ÑÀ£ÁYªº¦P®É¤]·|¹Á¸Õ±N¿ù»~×¥¿¦^¨Ó¡C¦p¹Ï2©Ò¥Ü¡A¤@Ó§¹¾ãªºH.264/AVC bitstream¬O¥Ñ¦hÓNAL-units©Ò²Õ¦¨ªº¡A©Ò¥H¦¹bitstream¤]ºÙ¤§¬°NAL unit stream¡A¤@ÓNAL unit stream¤º¥i¥H¥]§t¦hÓÀ£ÁYµø°T§Ç¦C(coded video sequence)¡A¤@Ó³æ¿WªºÀ£ÁYµø°T§Ç¦C¥Nªí¤@³¡µø°T¼v¤ù¡A¦ÓÀ£ÁYµø°T§Ç¦C¤S¬O¥Ñ¦hÓaccess units©Ò²Õ¦¨¡A·í±µ¦¬ºÝ¦¬¨ì¤@Óaccess unit«á¡A¥i¥H§¹¾ã¦a¸Ñ½X¦¨³æ±iªºµe±¡A¦Ó¨CÓÀ£ÁYµø°T§Ç¦Cªº²Ä¤@Óaccess unit¥²¶·¬°Instantaneous Decoding Refresh (IDR) access unit¡AIDR access unitªº¤º®e¥þ¬O±Ä¥Îintra-prediction½s½X¡A©Ò¥H¦Û¤v¥»¨§Y¥i§¹¥þ¸Ñ½X¡A¤£¥Î°Ñ¦Ò¨ä¥Laccess unitªº¸ê®Æ¡Caccess unit¥ç¬O¥Ñ¦hÓNAL-units©Ò²Õ¦¨¡A¼Ð·Ç¤¤Á`¦@³W½d12ºØªºNAL-unit«¬¦¡¡A³o¨Ç¥i¥H¶i¤@¨B¤ÀÃþ¦¨VCL NAL-unit¤Înon-VCL NAL-unit¡A©Ò¿×ªºVCL NAL-unit¯Âºé¬OÀ£ÁY¼v¹³ªº¤º®e¡A¦Ó©Ò¿×ªºnon-VCL NAL-unit«h¦³¨âºØ¡GParameter Sets»PSupplemental Enhancement Information (SEI)¡ASEI¥i¥H¦s©ñ¼v¤ù²¤¶¡Bª©Åv«Å§i¡B¨Ï¥ÎªÌ¦Û¦æ©w¸qªº¸ê®Æ¡Kµ¥¡FParameter Sets¥Dn¬O´yz¾ãÓÀ£ÁYµø°T§Ç¦Cªº°Ñ¼Æ¡A¨Ò¦p¡Gªø¼e¤ñ¨Ò¡B¼v¹³Åã²{ªº®É¶¡ÂI(timestamp)¡B¬ÛÃö¸Ñ½X©Ò»Ýªº°Ñ¼Æ¡Kµ¥¡A³o¨Ç¸ê°T«D±`«n¡A¸U¤@¦b¶Ç°eªº¹Lµ{¤¤µo¥Í¿ù»~¡A·|¾ÉP¾ã¬q¼v¤ùµLªk¸Ñ½X¡A¥H©¹¹³MPEG-2/-4³£§â³o¨Ç¸ê°T©ñ¦b¤@¯ëªºpacket header¡A©Ò¥H«Ü®e©öÀHµÛpacket loss¦Ó®ø¥¢¡A²{¦bH.264/AVC±N³o¨Ç¸ê°T¿W¥ß¥X¨Ó¦¨¬°¯S®íªºparameter set¡A¥i¥H±Ä¥Î©Ò¿×ªºout-of-bandªº¤è¦¡¨Ó¶Ç°e¡A¥H«K±Nout-of-band channel¥Î³Ì°ª¼h¯Åªº³q¹D½s½X(channel coding)«OÅ@¾÷¨î¡A¨Ó«OÃҶǿ骺¥¿½T©Ê¡C
![]()
3. µø°T½s½X¼h (Video Coding Layer¡AVCL)
µø°TÀ£ÁYªºì²z¬O§Q¥Î¼v¹³¦b®É¶¡»PªÅ¶¡¤W¦s¦³¬Û¦ü©Ê¡A³o¨Ç¬Û¦üªº¸ê®Æ¸g¹LÀ£ÁYºtºâªk³B²z¤§«á¡A¥i¥H±N¤H²´µLªk·Pª¾ªº³¡¤À©âÂ÷¥X¨Ó¡A³o¨ÇºÙ¬°µøÄ±¤¾¾l(visual redundancy)ªº³¡¤À¦b¥h°£¤§«á¡A´N¥i¥H¹F¨ìµø°TÀ£ÁYªº¥Øªº¡C¦p¹Ï1©Ò¥Ü¡AH.264/AVCªºµø°T½s½X¾÷¨î¬O¥H¹Ï¶ô(block-based)¬°°ò¦³æ¤¸¡A¤]´N¬O»¡¥ý±N¾ã±i¼v¹³¤À³Î¦¨³\¦h¯x§Îªº¤p°Ï°ì¡AºÙ¤§¬°¥¨¹Ï¶ô(macroblock¡AMB)¡A¦A±N³o¨Ç¥¨¹Ï¶ô¶i¦æ½s½X¡A¥ý¨Ï¥Îµe±¤º¹w´ú(intra-prediction)»Pµe±¶¡¹w´ú(inter-prediction)§Þ³N¡A¥H¥h°£¼v¹³¤§¶¡ªº¬Û¦ü©Ê¨Ó±o¨ì©Ò¿×ªº®t¾l¼v¹³(residual)¡A¦A±N®t¾l¼v¹³¬I¥HªÅ¶¡Âà´«(transform)»P¶q¤Æ(quantize)¨Ó¥h°£µøÄ±¤¾¾l¡A³Ì«áµø°T½s½X¼h·|¿é¥X½s½X¹Lªº¦ì¤¸¬y(bitstream)¡A¤§«á¦A¥]¸Ë¦¨ºô¸ô´£¨ú¼hªº³æ¤¸«Ê¥](NAL-unit)¡A¸g¥Ñºô¸ô¶Ç°e¨ì»·ºÝ©ÎÀx¦s¦bÀx¦s´CÅ餤¡CH.264/AVC¤¹³\µø°T¼v¤ù¥Hframe©Î¬O¥Hfiledªº¤è¦¡¨Ó¶i¦æ½s½X¡A¨âªÌ¥i¥H¦@¦s¡A¦Óframe¥i¥H¬Oprogress©Î¬Ointerlace§Î¦¡¡A¹ï¦P¤@¬q¼v¤ù¨Ó»¡¤]¥i¨Ï¥Î¨âªÌ¨Ó²V¦X½s½X¡A³oÓ¯S©Ê»PMPEG-2¬Û¦P¡C¦Ó¦b¼v¹³¦â±m®æ¦¡ªº¤ä´©¤W¡AH.264/AVC²Ä¤@ª©ªº¼Ð·Ç¥u¤ä´©YCrCb 4:2:0¨ú¼Ëªº¤è¦¡¡A¦Ó¦b¼Wתº²Ä¤Gª©¼Ð·Ç¤¤¼W¥[4:2:2»P4:4:4¨ú¼Ë®æ¦¡¡A³q±`³o¨Ç®æ¦¡·|³Q¼Æ¦ì¹q¼v©ÎHDTV¼v¤ù©Ò±Ä¥Î¡C
3.1 H.264/AVC¼v¹³®æ¦¡¶¥¼h¬[ºc
H.264/AVCªº¶¥¼h¬[ºc¥Ñ¤p¨ì¤j¨Ì§Ç¬Osub-block¡Bblock¡Bmacroblock¡Bslice¡Bslice group¡Bframe/field-picture¡Bsequence¡C¹ï¤@ӱĥÎ4:2:0¨ú¼ËªºMB¦Ó¨¥¡A¥¦¬O¥Ñ16x16ÂIªºLuma»P¬Û¹ïÀ³ªº2Ó8x8ÂIChroma¨Ó²Õ¦¨¡A¦Ó¦bH.264/AVCªº³W½d¤¤¡AMB¥i¦A¤À³Î¦¨¦hÓ16x8¡B8x16¡B8x8¡B8x4¡B4x8¡B4x4®æ¦¡ªºsub-blocks¡C©Ò¿×ªºslice¬O³\¦hMBªº¶°¦X¡A¦Ó¤@±i¼v¹³¬O¥Ñ³\¦hslice©Ò²Õ¦¨(¹Ï3)¡Aslice¬°H.264/AVC®æ¦¡¤¤ªº³Ì¤p¥i¸Ñ½X³æ¦ì(self-decodable unit)¡A¤]´N¬O»¡¤@Óslice³æ¾a¥»¨ªºÀ£ÁY¸ê®Æ´N¯à¸Ñ½X¡A¦Ó¤£¥²¨Ì¾a¨ä¥Lslice¡A³o¼Ëªº¦n³B¬O·í¶Ç°e¨ì»·ºÝ®É¡A¨C±µ¦¬§¹¤@µ§sliceªºÀ£ÁY¸ê®Æ´N¯à°¨¤W¸Ñ½X¡A¤£¥Îµ¥«Ý¾ã±iªº¸ê®Æ±µ¦¬§¹«á¤~¯à¶}©l¡A¦Ó¥B¸U¤@¶Ç°eªº¹Lµ{¤¤µo¥Í¸ê®Æ¿ò¥¢©Î¿ù»~¡A¤]¥u¬O¼vÅT¸Óµ§slice¡A¤£·|¹ï¨ä¥Lslice¦³©Ò¼vÅT¡A¦ý¸òMPEG-2ªºslice¤£¦P³B¦b©ó¥¦¤¹³\sliceªº½d³ò¥i¥H¶W¹L¤@¦æMB¡A¤]´N¬O»¡H.264/AVC¤¹³\¾ã±i¼v¹³¥u¥Ñ³æ¤@Óslice²Õ¦¨¡CH.264/AVCªºslice¬[ºcÁÙ¦³¤@¶µ¯S©ÊºÙ¬°Flexible Macroblock Ordering (FMO)¡A¤]´N¬O»¡²Õ¦¨sliceªºMB¥i¥H¤£¥²«]©ó´`§Ç±½´y(raster scan)ªº±Æ¦C¤è¦¡¡A¨Ò¦p¡G¹Ï3³Ì¥k°¼ªº±Æªk´N«D±`¾A¥Î©ó¦hÓ«e´º(foreground) slice groups»P¤@Ó¿W¦ÛªºI´º(background) slice group¡A¦n³B¬O¹ï¤£¦Pªºslice group¥i¥H¥Î¤£¦P«~½èªºÀ£ÁY°Ñ¼Æ¡A¨Ò¦p¡G¹ï©ó«e´ºª«¥ó³q±`¬O¤H²´¸û·P¿³½ìªº°Ï°ì¡A¥i¥H¥Î¸û¤pªºÀ£ÁY²v¨Óºû«ù¸û¦nªº«~½è¡C
3.2 Sliceªº½s½X¼Ò¦¡
H.264/AVCªºslice¨Ì·Ó½s½XªºÃþ«¬¥i¥H¤À¦¨¤U¦CºØÃþ¡G(1) I-slice: sliceªº¥þ³¡MB³£±Ä¥Îintra-predictionªº¤è¦¡¨Ó½s½X¡F(2) P-slice: slice¤¤ªºMB¨Ï¥Îintra-prediction©Minter-predictionªº¤è¦¡¨Ó½s½X¡A¦ý¨C¤@Óinter-prediction block³Ì¦h¥u¯à¨Ï¥Î¤@Ó²¾°Ê¦V¶q¡F(3) B-slice: »PP-sliceÃþ¦ü¡A¦ý¨C¤@Óinter-prediction block¥i¥H¨Ï¥Î¤GÓ²¾°Ê¦V¶q¡C¤ñ¸û¯S§Oªº¬OB-sliceªº¡¥B¡¦¬O«üBi-predictive¡A»PMPEG-2/-4 B-frameªºBi-directional·§©À¦³«Ü¤jªº¤£¦P¡AMPEG-2/-4 B-frame³Q©w¥u¯à¥Ñ«e¤@±i©M«á¤@±iªºI(©ÎP)-frame¨Ó°µinter- prediction¡A¦ý¬OH.264/AVC B-slice°£¤F¥i¥Ñ«e¤@±i©M«á¤@±i¼v¹³ªºI(©ÎP¡BB)-slice¥~¡A¤]¯à±q«e¤G±i¤£¦P¼v¹³ªºI(©ÎP¡BB)-slice¨Ó°µinter- prediction¡A¦ÓH.264/AVC¥t¥~¼W¥[¨âºØ¯S®ísliceÃþ«¬¡G(1) SP-slice: §Y©Ò¿×ªºSwitching P slice¡A¬°P-sliceªº¤@ºØ¯S®íÃþ«¬¡A¥Î¨Ó¦ê±µ¨âÓ¤£¦Pbitrateªºbitstream¡F(2) SI-slice: §Y©Ò¿×ªºSwitching I slice¡A¬°I-sliceªº¤@ºØ¯S®íÃþ«¬¡A°£¤F¥Î¨Ó¦ê±µ¨âÓ¤£¦Pcontentªºbitstream¥~¡A¤]¥i¥Î¨Ó°õ¦æÀH¾÷¦s¨ú(random access)¨Ó¹F¨ìºô¸ôVCRªº¥\¯à¡C³o¨âºØ¯S®íªºslice¥Dn¬O¦Ò¶q·í¶i¦æVideo-On-Demand streamingªºÀ³¥Î®É¡A¹ï¦P¤@Óµø°T¤º®eªº¼v¤ù¨Ó»¡¡Aserver·|¹w¥ý¦s©ñ¤£¦PbitrateªºÀ£ÁY¼v¤ù¡A¦Ó·íÀW¼e§ïÅܮɡAserver´N·|°e¥X¾A¦X·í®ÉÀW¼e¦ì¤¸²vªº¼v¤ù¡A¶Ç²Îªº°µªk¬O»Ýnµ¥¨ì¾A·íªº®É¶¡ÂI¨Ó¶Ç°e·sªºI-slice (®e¶q¸ûP-slice¤j¤W³\¦h)¡A¦ý¦]¬°ÀW¼eÅܤp¾ÉP»Ýn¸û¦hªº®É¶¡¨Ó¶Ç°eI-slice¡A¦p¦¹·|ÅýclientºÝªº¼v¹³¦³©Ò©µ¿ð¡A¬°¤FÅý¬Û¦Pcontent¦ý¤£¦Pbitrateªºbitstream¥i¥H¸û¥¶¶¦a¦ê±µ¡A¨Ï¥ÎSP-slice·|«Ü®e©ö¨Ó¹F¦¨(¹Ï4)¡A¤£¶È¥i¥Hª½±µ°e¥X·sªºbitstream¡A¤]¦]¬°¶Ç°eªºP-sliceªº®e¶q¸û¤p¡A©Ò¥H¤£·|¦³®É¶¡©µ¿ðªº±¡§Î¥X²{¡C·íclientºÝªº¨Ï¥ÎªÌn¤Á´«¨ì·sªº±µ¦¬ÀW¹D(channel)®É¡A¦]¬°»P¥Ø«e¶Ç°eªºbitstream¤£¦ý¤º®e¤£¦P³s¦ì¤¸²v¤]¤£¦P¡A¶Ç²Îªº°µªk»ÝÅýclient«·s½w½Ä(buffering)¤@¬q·sÀW¹Dªº¤º®e(¹Ï5)¡A¦¹®É¬O¬°¤Fn±µ¦¬·sÀW¹DbitstreamªºI-slice¡AµM«á¦A¶}©l¶Ç°e·sÀW¹Dbitstream«áÄòªºP-slice¡A¦p¦¹client¤]·|µo¥Í©µ¿ð±µ¦¬ªº²{¶H¡A¦Ó¥B·íclientn¶i¦æ©Ò¿×ªº§ÖÂà¡BËÂà¡BÀH¾÷¦s¨ú(random access)ªº°Ê§@®É¡A¶Ç²Îªº°µªkµLªk¹F¨ì§Y®Éªº¤ÏÀ³¡AH.264/AVC§Q¥ÎSI-slice´N¥i¥H»´©ö¦a¹F¨ì¥Øªº¡C
![]()
3.3µe±¤º¹w´ú§Þ³N(Intra-frame Prediction)
¥H©¹ªºÀ£ÁY¼Ð·Ç¦b¶i¦æintra-prediction®É¡A¦h¥b¥u¬O±NÂà´««Y¼Æ°µ®tȽs½X¡A¦ÓH.264/AVC¦bªÅ¶¡»â°ì(spatial domain)¨Ó¶i¦æ¹³ÂI¤§¶¡ªº¹w´ú¡A¦Ó¤£¬O¥ÎÂà´«¹Lªº«Y¼Æ¡A¥¦´£¨Ñ¨âºØintra-predictionªº«¬¦¡¡Gintra_4x4¤Îintra_16x16¡A©Ò¿×ªºintra_4x4¬O¥HLuma 4x4 sub-block¬°³æ¦ì¡A§ä¥X¥¦ªº°Ñ¦Ò¹ï¶H(predictor)«á¡A¦A±N¨ä»P°Ñ¦Ò¹ï¶H¬Û´î«á©Ò²£¥Íªº®t¾l¼v¹³(residual)°e¤JÂà´«ºtºâªk¡A¦Ó´M§ä°Ñ¦Ò¹ï¶Hªº¼Ò¦¡¦@¦³9ºØ¹w´úªº¤è¦V(¹Ï6)¡A¥Hmode 0 (vertical)¬°¨Ò¡A{a,e,i,m}¡B{b,f,j,n}¡B{c,g,k,o}¡B{d,h,l,p}ªº°Ñ¦Ò¹ï¶H¤À§O¬°A¡BB¡BC¡BD¡FLuma intra_16x16»PChromaªº¼Ò¦¡¸òLuma intra_4x4Ãþ¦ü¡A¸Ô²Óªº¹Bºâ¤½¦¡¥i¥H°Ñ¦Ò[1]¡C
3.4µe±¶¡¹w´ú§Þ³N(Inter-frame Prediction)
¦Ü©ó¾î¸ó¨C±iµe±¤§¶¡ªº¹w´ú§Þ³N¡AH.264/AVC´£¨Ñ¤F§óÂ×´Iªº½s½X¼Ò¦¡¡Ap¦³¤Uz´XºØ°Ï¶ô¤À³Î(partition)ªº¤èªk¡G16x16¡B16x8¡B8x16¡B8x8¡B8x4¡B4x8¡B4x4¡A¦h¼Ëªº¤À³Î¤è¦¡¥i¥HÅý²¾°Ê¦V¶qªº¹w´ú§ó·Ç½T¡A¦p¹Ï7©Ò¥Ü¡Aµe±¤¤¦³¨Ç²¾°Êªº°Ï°ì¨Ã¤£¬O¥¿¤è§Î¡A¨Ï¥Îªø¤è§Î©Î¸û¤pªº4x4¤À³Î¨Ó°µ¹w´úªº°Ï°ì¡A¥i¥H¤j´T°§C®t¾l¼v¹³ªº¼ÆÈ¨Ó¼W¥[¤FÀ£ÁY¤ñ¡A¦ý¤]¦]¦¹P-slice¤¤ªºMB³Ì¦h¥i¦³16Ó²¾°Ê¦V¶q(motion vector)¡A¦ÓB-slice¤¤ªºMB³Ì¦h¥i¾Ö¦³32Ó²¾°Ê¦V¶q¡AÁöµM³o¨Ç·|¼W¥[²¾°Ê¦V¶qÀÉÀY(header)ªº®e¶q¡A¦ý¾ãÅé¨Ó»¡¹ïÀ£ÁY¤ñ¤´¦³¥¿±ªº¯q³B¡C¦AªÌ¡A¥H©¹ªºÀ£ÁY¼Ð·Ç©Ò¨Ï¥Îªº°ÊºA¦ô´ú(motion estimation)¡A¥u¦³¨Ï¥Î«e¤@±i¹Ï¹³¨Ó§@¬°¹w´úªº¹ï¶H¡AH.264/AVC´£¨Ñ¤F¦h«°Ñ¦Ò¹Ï¹³(multiple reference frames)ªº·§©À¡A¨Ï±o²¾°Ê¦V¶q¤£¦A¥u©ó«e«á¬Û¾Fªº¼v¹³¡A¦Ó¬O¥i¥H¸ó¹L¦h±i¼v¹³¡A¦p¹Ï8©Ò¥Ü¡A¦b®É¶¡ÂItªº¹Ï¶ô¡A¥i¥H¨Ï¥Ît-1¨ìt-2¹Ï¹³¤¤ªº¹Ï¶ô¨Ó§@¬°¹w´úªº¹ï¶H¡A·í¼v¤ù¦³¶g´Á«½Æ©Êªº¤º®e®É¡A¨Ò¦p¡GI´º¼v¹³¶g´Á©Êªº¥X²{©Î³Q¾B»\¡Bª«¥ó¦³¨Ó¦^¸õ°Êªº¦æ¬°¡B§Îª¬©¿¤j©¿¤p¡A©Î¬OÄá¼v¾÷¦b©çÄá®É¡A¦]¬°¦³¦h³Bªº¨ú´ºÂI¡A¨Ã¥BÄá¼vµe±¦b¨ú´ºÂI¤§¶¡¨Ó¦^²¾°Ê¡A³oºØ±¡§Î¦b²yÃþ¤ñÁÉÂ༽®É±`¥X²{¡A³o¨Çª¬ªp³£¯à±o¨ì¸û¦nªº°ÊºA¹w´úµ²ªG¡A¦]¦Ó´£°ª¤FÀ£ÁYªº®Ä¯à¡C
3.5 Âà´«¡B¶q¤Æ»Pæi½s½Xºtºâªk (Transform, Quantization, and Entropy Coding)
H.264/AVCªºÂà´«ºtºâªk±Ä¥Î©Ò¿×ªº4x4»P8x8¾ã¼ÆÂà´«¡A¸òMPEG-2/-4ªº8x8 DCT (Discrete Cosine Transform)¦³«Ü¤jªº¤£¦P¡A¦]¬°¬O¾ã¼Æ¹Bºâªº½t¬G¡A¤£¹³¤p¼Æ¹BºâªºDCT¦³«Y¼ÆÁÙì«áµLªk¤Ç°tªº°ÝÃD¡A¦Ó¥B¥H4x4ªº°Ï¶ô¤j¤p¨Ó¶i¦æÂà´«¤]¥i´î§C°Ï¶ô®ÄÀ³ªºµ{«×¡C¦b¶q¤Æ§Þ³N¤è±¡AH.264/AVC¥u¨Ï¥Î¥[ªk»P¼ªk¦Ó¨S¦³°£ªk¹Bºâ¡A¦³§Q©ó¿nÅé¹q¸ôªº¹ê²{¡C¸ò¥H©¹MPEG-2/-4ªºæi½s½X§Þ³N(entropy coding)¤£¦Pªº¬O¡AH.264/AVC°w¹ï¶q¤Æ¹LªºÂà´««Y¼Æ»P«DÂà´««Y¼Æ¸ê®Æ(ÀÉÀY¸ê®Æ¡B²¾°Ê¦V¶q¡Kµ¥)¡A¤À§O¨Ï¥Î¤GÓ¤£¦Pªº½s½Xªk«h¡C«DÂà´««Y¼Æ¸ê®Æ¨Ï¥Î³æ¤@Óªº½s½Xªí¡A¦n³B¬O¥i¥H¸`¬Ù½s½Xªí©Ò¦û¥Îªº°O¾ÐÅéªÅ¶¡¡F°w¹ï¶q¤Æ¹LªºÂà´««Y¼Æ¸ê®Æ¨Ó»¡¡A¤£¹³MPEG-2/-4¹ï¨CºØ¼v¹³³£¨Ï¥Î©T©wªº½s½Xªí¡AH.264/AVC¨Ï¥Î©Ò¿×ªº¤º®e¾AÀ³©Ê½s½X§Þ³N(context-adaptive)¡A¤]´N¬O·|®Ú¾Ú½s½Xªº¤º®e¨Ó²Îp¬Y¨Ç¥N½X(code-word)ªº¥X²{¾÷²v¡A¦Ó²£¥Í¤@ӳ̾A¦X©ó¥Ø«e¼v¹³ªº½s½Xªí¡A¦n³B¬O¯à°÷´£°ªÀ£ÁY¤ñ¡A¦ýn¨Ï¥ÎÃB¥~ªºÀW¼e¨Ó¶Ç°e³o¨Ç½s½Xªí¡CH.264/AVC¤º®e¾AÀ³©Ê½s½X§Þ³N¦³¨âºØ¡GContext Adaptive Variable Length Coding (CAVLC)¥H¤ÎContext Adaptive Arithmetic Binary Coding (CABAC)¡ACAVLCªº°ò¥»ì²z¸òMPEG-2/-4ªºVLC¬Û¦P¡A¦ÓCABACªº½ÆÂø«×¤ñCAVLC°ª¡A¦ý«o¥i¥H´£¨Ñ¸û°ªªºÀ£ÁY¤ñ¡A¤×¨ä¬O¥Î¦bÀ£ÁY¥æ¿ù¦¡ªº¼Æ¦ì¹qµø¼v¤ù¡C3.6 ¤º´O¦¡¥h°Ï¶ô®ÄÀ³Âoªi¾¹(In-Loop De-blocking Filter)
¥ý«e¦³´£¨ìH.264/AVC¤]¬O¤@ºØblock-basedªºÀ£ÁY¤èªk¡A©Ò¥H·|¦³°Ï¶ô®ÄÀ³(blocking-effect)ªº²{¶H¡AÁöµM¥¦±Ä¥Î4x4Âà´«¥i¥Hµy´î°Ï¶ô®ÄÀ³ªºµ{«×¡A¦ý¬O¦b¼v¹³¸û¥·Æªº°Ï°ì¡A¤´»Ý¨Ì¾a¥h°Ï¶ô®ÄÀ³Âoªi¾¹¨Ó°µ¼v¹³«~½èªº×¸É¡C³q±`¥h°Ï¶ô®ÄÀ³Âoªi¾¹¤À¦¨¨âºØ¡Gpost filter¤Îin-loop filter¡A©Ò¿×post filter´N¬O¦b¸Ñ½Xªº¬yµ{¤§«á¦A¶i¦æªº¡A¦Ó¤£¦b¸ÑÀ£ÁY¼Ð·Çªº³W½d¤¤¡A¦n³B¬O¼t°Ó¥i¥H¨ÌÀ³¥Îªº½ÆÂø«×¡A¦³¼u©Ê¦a¨M©wÂoªi¾¹ªº¹ê²{¤è¦¡¡A¦Ó©Ò¿×ªºin-loop filter´N¬Oª½±µ³W½d¦b½s¸Ñ½Xªº¬yµ{¤¤¡AÁöµM·|¼W¥[½ÆÂø«×¡A¦ý¥Ñ©ó¸g¹LÂoªi¾¹³B²z«áªº¼v¹³«~½è¸û¦n¡AY¥H¦¹§@¬°µe±¶¡¹w´úªº°Ñ¦Ò¹Ï¹³¡A¨ä¹w´úºë½T«×·|¤j´Tªº´£¤É¡A¦]¦Ó¼W¥[¤FÀ£ÁY¤ñ¡C4. µ²½×
¥Ñ©óH.264/AVC¦bµø°T½s½Xºtºâªk¤Wªº§ï¶i¡A¨äÀ£ÁY¤ñ¤Îµø°T«~½è»PMPEG-2/-4¬Û¸û¤U¦³¤j´T«×ªº´£ª@¡A¦Ó¨äNAL·§©À¦³§U©ó¦b¦³ÀW¼eªº¶Ç¿é³q¹D¤W¨Ó¶Ç°e°ª«~½èªºµø°T¤º®e¡A¦¹¥~¡A¹ï©ó°ªµe½è¼Æ¦ì¹qµø©Î°ªµe½èDVD¡A¥HH.264/AVCªº½s½X§Þ³N³£¥i¥H«Ü»´©ö¦aº¡¨¬À³¥Î»Ý¨D¡A¦ý´N¥«³õ±¨Ó¬Ý¡AVC-1¼Ð·Ç¾ÌÂǵ۷L³n—û¦bPC¥¥xªºÀu¶Õ»P§C»ù±ÂÅvªºµ¦²¤¡A¤µ«á±N¦¨¬°H.264/AVC³Ì±j¤jªº¬D¾ÔªÌ¡C# pµe¬ÛÃö¸ê°T
¥»¤å¬°¤u¬ã°|¹q³q©Ò°õ¦æ¸gÀÙ³¡¸É§U¬ì±Mpµe¡u¦h´CÅ鼯¦ìµø°T§Þ³Nµo®i¡v¦¨ªG¤§¤@¡C# °Ñ¦Ò¤åÄm
[1] ¡§Draft ITU-T recommendation and final draft international standard of joint video specification (ITU-T Rec. H.264/ISO/IEC 14 496-10 AVC,¡¨ in Joint Video Team (JVT) of ISO/IEC MPEG and ITU-T VCEG, JVTG050, 2003.
[2] ¡§Special Issue on the H.264/AVC Video Coding Standard,¡¨ IEEE Trans. Circuits Syst. Video Tech., vol. 13, July 2003.
[3] ¡§Proposed SMPTE Standard for Television: VC-9 Compressed Video Bitstream Format and Decoding Process,¡¨ 2004-03-31.
[4] G.J. Sullivan, P. Topiwala, and A. Luthra, ¡§The H.264/AVC Advanced Video Coding Standard: Overview and Introduction to the Fidelity Range Extensions,¡¨ SPIE Conference on Applications of Digital Image Processing, Aug. 2004.