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

时间:2017-04-19 22:38:37

标签: javascript raspberry-pi video-streaming h.264 decoding

我在覆盆子pi上从相机上读取H.264流。我试图通过websockets将其传递给Broadway以在网页中呈现。

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

虽然进入the parsing code I've based this on但似乎期待第5个字节(在开始前缀代码之后)是:

  • 0x65 - 一个I帧
  • 0x41 - 一个P帧
  • 0x67 - SPS帧
  • 0x68 - PPS帧

我在其他地方也看到过很多这方面的提及。我所经历的所有单位似乎都是从(按顺序)开始的:

  • 0x27 0x64(第一单位)
  • 0x28 0xEE(第二单位)
  • 0x25 0x88(第3单元,然后间歇性地稍后)
  • 0x21 0x9A(流中的每个其他单位)

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

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

1 个答案:

答案 0 :(得分:1)

这是一个红色的鲱鱼:这里的实际问题是,一些现有的帧丢弃逻辑意味着我没有在流中的前几帧传递百老汇,而且它无法渲染。为所有新连接重播SPS和PPS帧并确保它们永不丢弃已经很好地解决了这个问题。

我也确定了这些字节是什么,这有帮助,并可能对其他人有用,以供参考:

{{1}}

特别感谢Jaromanda X - NAL单位文章[此处]和nal_ref_idc文章使这项工作变得更加容易。