文件名称:NAL单元-深居浅出autocad二次开发
文件大小:6.01MB
文件格式:PDF
更新时间:2024-07-10 12:41:56
编解码 h.264
8.2 NAL单元 早期的视频压缩标准总是集中于比特流的概念,高层语法元素被编码分割,以允许比特流发生 误码时进行重同步。而在 H.264/AVC 标准中,NAL(Network Abstract Layer)则是以 NALU(NAL unit) 为单元来支持编码数据在基于包交换技术网络中的传输的;它定义了符合传输层或存储介质需求的 数据格式,同时提供头信息,从而提供了视频编码与外部世界的接口。网络层和传输层的 RTP 封装 只针对基于 NAL 单元的本地 NAL 接口,且每个 NAL 单元都只包含整数个字节。 8.2.1 NAL单元结构 一个 NAL 单元定义了可用于基于包和基于比特流系统的基本格式,区别这两种格式的方法在于 每个比特流传输层都有一个起始代码。在 NAL 解码器接口,它假定按传输顺序传递 NALU,同时, 在 NALU 的头部设置标识接收正确的、丢失的或错误的标识位,如果在有效载荷中包含位错误,则 通过标识位来标志。 一个 NAL 单元结构上是一个包含一定语法元素的可变长字节字符串,例如 NAL 单元可以携带 一个编码片,A、B、C 型数据分割或一个序列或图像参数集。每个 NAL 单元由一个字节的头和一 个包含可变长编码符号的字符串组成。头部含三个定长比特区,如图 8.3 所示:NALU 类型(T), NAL-REFERENCE-IDC(R)和隐藏比特位(F)。NALU 类型用 5bit 来代表 NALU 的 32 种中不同 类型特征,类型 1-12 是 H.264 的定义的,类型 24-31 是用于 H.264 以外的,RTP 负荷规范使用这 其中的一些值来定义包聚合和分裂,其他值为 H.264 保留。R 比特用于在重构过程中标记一个 NAL 单元的重要性,值为 0 表示这个 NAL 单元没有用于预测,因此可被解码器抛弃而不会有错误扩散, 值高于 0 表示此 NAL 单元要用于无漂移重构,且值越高,对此 NAL 单元丢失的影响越大。 后是 隐藏比特位,在 H.264 编码中默认置为 0,当网络识别到单元中存在比特错误时,可将其置为 1。F 位主要用于适应不同种类的网络环境(比如有线无线相结合的环境)。例如对于从无线到有线的网关, 一边是无线的非 IP 协议环境,一边是有线网络的无比特错误的环境。假设一个 NAL 单元到达无线 那边时,校验和检测失败,网关可以选择从 NAL 流中去掉这个 NALU 单元,,也可以把已知被破坏 的 NAL 单元前传给接收端。在这种情况下,智能的解码器将尝试重构这个 NAL 单元(已知它可能 包含比特错误)。而非智能的解码器将简单的抛弃这个 NAL 单元。 图 8.3 NALU 头结构 8.2.2 NAL单元解码过程 在进行 NAL 单元解码之前,首先或者通过 RTP 协议解析(采用 RTP 封装),或者通过起始码检 测(采用比特流方式),从传输码流中获取 NAL 单元数据。NAL 单元解码的总体流程是:首先从 NAL 单元中提取出 RBSP 语法结构,然后按照如图 8.4 所示的流程处理 RBSP 语法结构。因此对于 NAL 单元的解码过程,其输入是 NAL 单元,输出结果是经过解码的当前图像(CurrPic)的样点值。