H265帧类型判断

博客介绍了H264和H265在Nal Unit头方面的差异,H264的Nal Unit头是一个字节,H265则为两个字节。还给出了H265获取帧类型的代码,以及不同数值对应的帧类型,如0 - 9是P帧,16 - 21是关键(I)帧等。

H264的Nal Unit头是一个字节,265变成两个字节 

和H264的&0x1f不同。H265是 :
int type = (code & 0x7E)>>1;

0-9是P帧,16-21是关键(I)帧,32-40是VPS SPS PPS SUFFIX_SEI_NUT等

给定的参考引用中未提及在H.265编码中判断开始的方法。一般而言,在H.265编码里,判断开始可借助NAL单元(网络抽象层单元)的类型部信息来实现。 H.265码流由一系列NAL单元构成,每个NAL单元有特定的类型部。关键在于寻找视频参数集(VPS)、序列参数集(SPS)、图像参数集(PPS)以及切片(Slice Header)这些特殊的NAL单元类型。 VPS、SPS、PPS包含了视频序列的全局参数和配置信息,而切片则标志着一个新的或者切片的开始。在解析H.265码流时,会逐字节扫描码流,检测起始码(Start Code),通常是0x000001或者0x00000001。一旦检测到起始码,就提取NAL单元的部信息,从而确定NAL单元的类型。 当遇到切片类型的NAL单元时,就表明一个新的或者切片开始。以下是一个简单的Python示例代码,用于检测H.265码流中的起始码和NAL单元类型: ```python def detect_nal_units(h265_stream): start_code_3bytes = b'\x00\x00\x01' start_code_4bytes = b'\x00\x00\x00\x01' index = 0 while index < len(h265_stream): if h265_stream[index:index + 3] == start_code_3bytes: start_code_length = 3 elif h265_stream[index:index + 4] == start_code_4bytes: start_code_length = 4 else: index += 1 continue # 找到起始码,提取NAL单元部 nal_unit_header = h265_stream[index + start_code_length] nal_unit_type = (nal_unit_header >> 1) & 0x3F print(f"Found NAL unit of type {nal_unit_type} at index {index}") index += start_code_length # 找到下一个起始码或者码流结束 while index < len(h265_stream): if h265_stream[index:index + 3] == start_code_3bytes or h265_stream[index:index + 4] == start_code_4bytes: break index += 1 # 示例用法 with open('h265_stream.h265', 'rb') as f: h265_stream = f.read() detect_nal_units(h265_stream) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值