2014-05-01 57 views
2

我需要将h264流从annex-b格式转换为AVCC格式。需要将h264流从annex-b格式转换为AVCC格式

我试过这个从h264 annex-b转换到AVCC: 我从附件流中提取了SPS和PPS并创建了附加数据。 然后我在流中查找了0x00 0x00 0x00 0x01(它应该是每个Nal的开始)并继续寻找另一个0x00 0x00 0x00 0x01(这将是Nal的结尾)然后减去Nal长度,然后将第一个0x00 0x00 0x00 0x01替换为0x00 0x00 0x00 [NulSize],但似乎这不会产生有效的流。 然后我发现NUL可以用0x00 0x00 0x01开始/结束,所以我有点困惑。

无论如何,我希望有人能够写我功能,从annex-b转换为AVCC。

谢谢。

回答

3

起始码不是固定大小,可以是3或4个字节。在这里阅读更多:https://stackoverflow.com/a/24890903/660982

+0

已经知道了。 这没有帮助。 例如,如果我看到0 0 1,然后尝试隐藏,但大小超过3个字节,我应该怎么做?我可以在这种情况下只写3个字节 - 我应该添加字节吗? – user3592107

+0

您是否阅读过链接?您需要在每个NALU前写入NALULengthSizeMinusOne + 1个字节。所以,是的。您可能需要插入或删除字节,具体取决于您在NALULengthSizeMinusOne中设置的内容。 – szatmary

+0

这不是我的意思。 我写的长度总是4字节。 现在如果我看到0x00 0x00 0x00 0x01 ... 4字节... 0x00 0x00 0x00 0x01 然后我将它转换为0x00 0x00 0x00 0x04 ... 4字节.... 0x00 0x00 0x00 0x01 对不对? I.E这是我唯一需要做的事情吗? – user3592107

7

NALU是基本单位。

然后,

annexb格式:

([start code] NALU) | ([start code] NALU) |

AVCC格式:

([extradata]) | ([length] NALU) | ([length] NALU) |

在annexb,[start code]可以是0x0000010x00000001

在AVCC,的[length]字节取决于NALULengthSizeMinusOneavcc extradata,的[length]值取决于以下NALU的尺寸和在两个annexb and avcc格式中,NALUs并没有什么不同。

+0

你的权利,thx! – Joey