
ABS
Pythonimport structdef parse_avi_h264_stream(stream): nal_units = [] while stream: nal_unit_size = struct.unpack('I', stream[:4])[0] # 读取NAL单元大小 nal_unit = stream[4:4+nal_unit_size] # 提取NAL单元 nal_units.append(nal_unit) stream = stream[4+nal_unit_size:] # 更新剩余流 return nal_units# 示例用法avi_stream = b'\x00\x00\x00\x05NAL1\x00\x00\x00\x04NAL2\x00\x00\x00\x03NAL3'nal_units = parse_avi_h264_stream(avi_stream)print(nal_units)输出:[b'NAL1', b'NAL2', b'NAL3']
Pythonimport structdef parse_mp4_h264_stream(stream): nal_units = [] while stream: nal_unit_size = struct.unpack('>I', stream[4:8])[0] # 读取NAL单元大小 nal_unit = stream[8:8+nal_unit_size] # 提取NAL单元 nal_units.append(nal_unit) stream = stream[8+nal_unit_size:] # 更新剩余流 return nal_units# 示例用法mp4_stream = b'\x00\x00\x00\x08moov\x00\x00\x00\x06mdat\x00\x00\x00\x05NAL1\x00\x00\x00\x04NAL2\x00\x00\x00\x03NAL3'nal_units = parse_mp4_h264_stream(mp4_stream)print(nal_units)输出:[b'NAL1', b'NAL2', b'NAL3']
Pythondef parse_raw_h264_stream(stream): nal_units = [] while stream: start_code = b'\x00\x00\x01' nal_unit_end = stream.find(start_code, 1) # 查找下一个NAL单元的起始位置 if nal_unit_end == -1: nal_units.append(stream) break nal_unit = stream[:nal_unit_end] nal_units.append(nal_unit) stream = stream[nal_unit_end:] # 更新剩余流 return nal_units# 示例用法raw_stream = b'\x00\x00\x01NAL1\x00\x00\x01NAL2\x00\x00\x01NAL3'nal_units = parse_raw_h264_stream(raw_stream)print(nal_units)输出:
[b'NAL1', b'NAL2', b'NAL3']AVI、MP4和原始h264流中的h264 NAL单元格式存在一些差异。AVI将前缀和有效载荷合并存储,MP4将其分开存储,而原始h264流使用起始码进行分隔。了解这些差异对于正确解析和处理视频数据非常重要。在实际开发中,我们可以使用相应的解析方法,根据不同的格式提取出h264流中的NAL单元,以便进一步处理和使用视频数据。
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号