当消费者在中 FU-A 附加时, H264 depacketizer 会发出损坏的 IDR
作者: bhamiltoncx创建于 2026年9月13日更新于 2026年9月13日
`pkg/h264/rtp.go` `RTPDepay` 使用 `pion/rtp` `codecs.H264Packet` 重组 FU-A 片段。 pion 将 **每个** FU-A 片段附加到 `fuaBuffer` 中,无论开始位是否有效(`h264_packet.go`、`parseBody`、`case naluType == fuaNALUType`),当结束位到达时,它会合成一个 NAL 头部,并返回缓冲区。因此,在分段 NAL 正在传输时,连接的消费者会接收一个 NAL,它具有有效的 IDR 头(`0x65`),但其正文是片段的尾部。没有片段头,因此 ffmpeg 读取了垃圾(`非关键帧片段在 IDR NAL 单元中`)。当开始片段丢失时,也会发生同样的情况。因为 `IsKeyframe()` 只查看 NAL 类型,因此关键帧消费者会高兴地接受它并将其交给 ffmpeg。
内容来源: AlexxIT/go2rtc