亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2046 | 回復(fù): 1
打印 上一主題 下一主題

H264和MPEG4起始碼(startcode) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-07-01 20:05 |只看該作者 |倒序?yàn)g覽

                                                                                1. H.264起始碼
  在網(wǎng)絡(luò)傳輸h264數(shù)據(jù)時(shí),一個(gè)UDP包就是一個(gè)NALU,解碼器可以很方便的檢測出NAL分界和解碼。但是如果編碼數(shù)據(jù)存儲為一個(gè)文件,原來的解碼器將無法從數(shù)據(jù)流中分別出每個(gè)NAL的起始位置和終止位置,為此h.264用起始碼來解決這一問題。

  H.264編碼時(shí),在每個(gè)NAL前添加起始碼 0x000001,解碼器在碼流中檢測到起始碼,當(dāng)前NAL結(jié)束。為了防止NAL內(nèi)部出現(xiàn)0x000001的數(shù)據(jù),h.264又提出'防止競爭 emulation prevention"機(jī)制,在編碼完一個(gè)NAL時(shí),如果檢測出有連續(xù)兩個(gè)0x00字節(jié),就在后面插入一個(gè)0x03。當(dāng)解碼器在NAL內(nèi)部檢測到0x000003的數(shù)據(jù),就把0x03拋棄,恢復(fù)原始數(shù)據(jù)。
   0x000000  >>>>>>  0x00000300
   0x000001  >>>>>>  0x00000301
   0x000002  >>>>>>  0x00000302
   0x000003  >>>>>>  0x00000303

附上h.264解碼nalu中檢測起始碼的算法流程  
for(;;)
{
    if next 24 bits are 0x000001
    {
        startCodeFound = true
        break;
    }
    else
    {
        flush 8 bits  
    }
}// for(;;)
if(true == startCodeFound)
{
     //startcode found
     // Flush the start code found
     flush 24 bits  
     //Now navigate up to next start code and put the in between stuff
     // in the nal structure.
     for(;;)
     {
         get next 24 bits & check if it equals to 0x000001
         if(false == (next 24 bits == 000001))
         {
             // search for pattern 0x000000
             check if next 24 bits are 0x000000
             if(false == result)
             {
                 // copy the byte into the buffer
                 copy one byte to the Nal unit              
             }
             else
             {
                 break;
             }
          }
          else
          {
              break;
          }
       }//for(;;)
   }

  2. MPEG4起始碼
        MPEG4的特色是VOP,沒有NALU的概念,仍使用startcode對每幀進(jìn)行分界。MPEG4的起始碼是0x000001. 另外MPEG4中很多起始碼也很有用,比如video_object_sequence_start_code 0x000001B0 表示一個(gè)視頻對象序列的開始,VO_start_code 0x000001B6 表示一個(gè)VOP的開始. 0x000001B6之后的兩位,是00表示 I frame, 01 表示 P frame, 10 表示 B frame.
               
               
               
               
               
               

本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u2/77292/showart_1983315.html

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2013-04-01 18:28 |只看該作者
H264中,每個(gè)nal的起始碼有三個(gè)字節(jié)的,有四個(gè)字節(jié)的,請問各有什么區(qū)別?樓主是否想過這個(gè)問題,統(tǒng)一起來,解包時(shí)豈不是更方便
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP