zoukankan      html  css  js  c++  java
  • H264防止竞争机制

    H264附录B指明一种简单高效的方案解决解码器分辨每个NAL的起始位置和终止位置-当数据流存储在介质中时,在每个NAL前添加:0x000001

    在某些类型的存储介质中,为了寻址方便,要求数据流在长度上对齐,或必须是某个常数的倍数。考虑到这种情况,H264建议在起始码前添加若干字节的0来填充,直到该NAL的长度符合要求。

    在这样的机制下,解码器在码流中检测起始码,作为一个NAL的起始标志,当检测到下一个起始码时当前NAL结束。H264规定当检测到0x000000时也可以表征当前NAL的结束,这是因为连着的3个字节的0中任何一个字节的0要么属于起始码,要么是起始码前面的0。

    但是如果NAL内部出现了0x000001或0x000000的序列怎么办?解决办法如下:

    0x000000------------->0x00000300

    0x000001-------------->0x00000301

    0x000002-------------->0x00000302

    0x000003-------------->0x00000303

    就是在0000后面加上03;

    有人问:如果原序列中本来就有个0x00000303呢?会不会导致歧义?

    答案肯定是不会的,假设原序列:0x00 00 03 03 ....

    那么经过转换之后变成: 0x00 00 03 03 03.....

    解码之后:0x00 00 03 03

    解码之后的数据和原序列一样。所以不用担心产生歧义。

  • 相关阅读:
    Git的Patch功能
    Android系统进程Zygote启动过程的源代码分析
    Android深入浅出之Zygote
    Android Ams浅析
    Handle机制详解
    详解Android中AsyncTask的使用
    将博客搬至CSDN
    Titanium studio安装
    Titanium studio介绍
    Android WebView useragent
  • 原文地址:https://www.cnblogs.com/micoblog/p/13630602.html
Copyright © 2011-2022 走看看