H.264起始码

1. H.264起始码
在网络传输h264数据时,一个UDP包就是一个NALU,解码器可以很方便的检测出NAL分界和解码。但是如果编码数据存储为一个文件,原来的解码器将无法从数据流中分别出每个NAL的起始位置和终止位置,为此h.264用起始码来解决这一问题。
H.264编码时,在每个NAL前添加起始码 0x000001,解码器在码流中检测到起始码,当前NAL结束。为了防止NAL内部出现0x000001的数据,h.264又提出'防止竞争 emulation prevention"机制,在编码完一个NAL时,如果检测出有连续两个0x00字节,就在后面插入一个0x03。当解码器在NAL内部检测到 0x000003的数据,就把0x03抛弃,恢复原始数据。
0x000000 >>>>>> 0x00000300
0x000001 >>>>>> 0x00000301
0x000002 >>>>>> 0x00000302
0x000003 >>>>>> 0x00000303

 

附上h.264解码nalu中检测起始码的算法流程

  1. for(;;)    
  2. {    
  3. if next 24 bits are 0x000001    
  4. {    
  5. startCodeFound = true    
  6. break;    
  7. }    
  8. else    
  9. {    
  10. flush 8 bits    
  11. }    
  12. }// for(;;)     
  13.     
  14. if(true == startCodeFound)    
  15. {    
  16. //startcode found     
  17. // Flush the start code found     
  18. flush 24 bits    
  19. //Now navigate up to next start code and put the in between stuff     
  20. // in the nal structure.     
  21. for(;;)    
  22. {    
  23. get next 24 bits & check if it equals to 0x000001    
  24. if(false == (next 24 bits == 000001))    
  25. {    
  26. // search for pattern 0x000000     
  27. check if next 24 bits are 0x000000    
  28. if(false == result)    
  29. {    
  30. // copy the byte into the buffer     
  31. copy one byte to the Nal unit    
  32. }    
  33. else    
  34. {    
  35. break;    
  36. }    
  37. }    
  38. else    
  39. {    
  40. break;    
  41. }    
  42. }//for(;;)     
  43. }   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值