常见的 NAL 单元类型及其含义
未指定(Unspecified):
NAL Type 0:未指定的类型,在标准中未定义其具体用途,通常不应该使用。
片层(Slice Layer):
NAL Type 1:非 IDR 图像的片(Non-IDR Slice),包含图像的一部分,是非关键帧的一部分,需要参考前面的图像帧进行解码。
NAL Type 2:片数据分区 A(Slice Data Partition A),是片数据的一种分区,用于将片数据划分为不同部分以适应不同的传输特性或处理需求。
NAL Type 3:片数据分区 B(Slice Data Partition B),也是片数据的一种分区。
NAL Type 4:片数据分区 C(Slice Data Partition C),同样是片数据的一种分区。
NAL Type 5:IDR 图像的片(IDR Slice),是关键帧的一部分,属于可独立解码的片,可作为解码的起始点,不需要参考其他帧。
序列参数集(Sequence Parameter Set,SPS):
NAL Type 7:包含了关于整个视频序列的参数信息,如视频的分辨率、帧率、图像格式(如 YUV 格式)等。SPS 对于解码过程非常重要,因为解码器需要这些信息来设置初始解码参数。在 H.264 流中,通常会在视频开始时发送一个或多个 SPS。
图像参数集(Picture Parameter Set,PPS):
NAL Type 8:包含了关于单个图像的参数信息,例如图像的量化参数、熵编码模式等。PPS 通常在 SPS 之后发送,并且每个图像可能有自己的 PPS,解码器需要 PPS 来正确解码相应的图像。
补充增强信息(Supplemental Enhancement Information,SEI):
NAL Type 6:包含了一些辅助信息,这些信息可以用来提供额外的增强功能,例如时间码、版权信息、画面的显示信息等。SEI 是非必需的,但是可以为解码或显示过程提供有用的补充信息。
序列结束(End of Sequence):
NAL Type 10:表示一个序列的结束,用于通知解码器当前视频序列的结束,后续可能会有新的序列开始。
码流结束(End of Stream):
NAL Type 11:表示整个码流的结束,告诉解码器整个视频码流已经结束。

uint8_t nalType = nalHeader & 0x1F; // 获取 NAL 类型
std::cout << "NAL Type: " << static_cast<int>(nalType) << " ";
switch (nalType) {
            case 0: std::cout << "Unspecified"; break;
            case 1: std::cout << "Non-IDR Slice"; break;
            case 2: std::cout << "Slice Data Partition A"; break;
            case 3: std::cout << "Slice Data Partition B"; break;
            case 4: std::cout << "Slice Data Partition C"; break;
            case 5: std::cout << "IDR Slice"; break;
            case 6: std::cout << "Supplemental Enhancement Information (SEI)"; break;
            case 7: std::cout << "Sequence Parameter Set (SPS)"; break;
            case 8: std::cout << "Picture Parameter Set (PPS)"; break;
            case 9: std::cout << "Access Unit Delimiter"; break;
            case 10: std::cout << "End of Sequence"; break;
            case 11: std::cout << "End of Stream"; break;
            default: std::cout << "Other"; break;
        }
本文链接地址:https://const.net.cn/824.html

标签: none

添加新评论