碎片整理H264 NAL流(原始1722个avb数据包)
任务在手:
通过以太网端口捕获1722个AVB视频数据包并在Android中作为实时视频播放。 视频分组是NAL H.264流。
什么已经可用:
从以太网端口读取数据并捕获数据包的代码已准备就绪。 总之,我有我的有效载荷数据。
我在找什么:
我想上面的过程叫做去碎片。 一旦解除碎片化,我会将这个视频帧发送到android视频视图并将它们显示在屏幕上。
任何有用的资源将非常感激。
首先,我假设你的分析将在NAL单元上进行。 下表显示了NAL单元类型的部分列表。 在主要的H264编码器实现中,您只能找到NAL单元类型1,5,6,7和8。 您可能很少会发现其他NAL单元。
访问单元分隔符:
如果流的NAL单元号为9,即访问单元分隔符,则您的问题更容易解决。 所有NAL单元,位于2个访问单元开发者NAL单元之间,属于单个视频帧。 由于此NAL单元类型是可选的,因此大多数编码器通常会跳过嵌入此NAL单元。 所以。 您很可能在您的流中找不到此NAL单元
NAL单位 - 6和7:
这3个NAL单元不直接参与解构分解,但它们需要解码操作。 在大多数情况下,这两种类型在一个序列中只出现一次,即在视频序列的开始处。
NAL单位 - 1和5:
这些是对拆分至关重要的NAL单元。 对于给定的视频帧,所有的NAL单元应该携带相同的NAL单元,即1或5个。这些NAL携带帧的切片。 由于ASO(任意片顺序)支持在编码器中非常罕见,因此我假定片顺序排列。 该帧的第一个切片带有一个标志,表示它是视频帧的开始。
以上图片由H264标准结合2个部分表格(仅此处相关)组成。
一旦你解码NAL头(1字节的信息),你会发现它是NAL类型1还是5(片NAL单元)。 一旦找到NAL作为切片单元,解析流为“first_mb_in_slice”符号(该信息在NAL头信息的1个字节后立即出现)。 如果这个标志被设置,那么这是视频帧的第一部分。 以下NAL单元将该标志设置为零直到当前视频帧的最后一个分段。 如果发现片段NAL单元的“first_mb_in_slice”标志被设置,那意味着这个新片段属于下一个视频帧并且是下一个视频帧的开始。
我希望这些细节将有助于解决您的问题
链接地址: http://www.djcxy.com/p/92799.html上一篇: Defragment H264 NAL stream (Originally 1722 avb packets)