H.264 解码无法解析异常帧 headers

H.264 decoding failing to parse unusual frame headers

我正在从 raspberry pi 上的摄像头读取 H.264 流。我正在尝试通过 websockets 将其传递给 Broadway 以在网页中呈现。

流包含 NAL 单元,我在 [0,0,0,1] 开始前缀代码上将其分块,以单独发送然后解码 NAL 单元。我认为这很好,但百老汇无法解码我最终得到的结果。

尽管深入 the parsing code I've based this on,但似乎期望第 5 个字节(紧接在开始前缀代码之后)是:

我在其他地方也看到了很多关于这些的提及。我通过的所有单元似乎都以(按顺序)开头:

这些 headers 在 H.264 流中是什么意思?他们是否建议我需要做什么才能符合百老汇的期望?

(如果完整代码有助于更好地理解这一点,请参阅 https://github.com/pimterry/pi-cam/tree/d801de9b

这是一个转移注意力的问题:对我来说,这里的实际问题是一些现有的丢帧逻辑意味着我没有在流中的前几帧通过百老汇,并且无法呈现。为所有新连接重放 SPS 和 PPS 帧并确保它们永远不会丢失已经很好地解决了这个问题。

虽然我也弄清楚了这些字节是什么,这有帮助,并且可能对其他人有用以供参考:

Hex    Binary     NAL type  Meaning
0x65 = 11 00101 = type 5    Coded slice of an IDR picture (I-frame)
0x41 = 10 00001 = type 1    Coded slice of a non-IDR picture (P-frame)

0x27 = 01 00111 = type 7    Sequence parameter set (B-frame)
0x28 = 01 01000 = type 8    Picture parameter set (B-frame)
0x25 = 01 00101 = type 5    Coded slice of an IDR picture (B-frame)
0x21 = 01 00001 = type 1    Coded slice of a non-IDR picture (B-frame)

特别感谢 Jaromanda X though - the NAL units article [here] and the nal_ref_idc 文章让解决这个问题变得容易多了。