做网站怎么调用栏目,android开发技术,沈阳网站制作优化推广,企业建设H5响应式网站的5大好处6From: http://blog.csdn.net/zqnihao917/article/details/7760170 图像、帧、片、NALU 是学习 H.264的人常常感到困惑的一些概念#xff0c;我在这里对自己的理解做一些阐述#xff0c;欢迎大家讨论#xff1a;H.264 是一次概念的革新#xff0c;它打破常规#xff0c;完全…From: http://blog.csdn.net/zqnihao917/article/details/7760170 图像、帧、片、NALU 是学习 H.264的人常常感到困惑的一些概念我在这里对自己的理解做一些阐述欢迎大家讨论H.264 是一次概念的革新它打破常规完全没有 I 帧、P帧、B 帧的概念也没有 IDR帧的概念。对于 H.264中出现的一些概念从大到小排序依次是序列、图像、片组、片、NALU、宏块、亚宏块、块、像素。这里有几点值得说明 1、在 H.264协议中图像是个集合概念顶场、底场、帧都可以称为图像本文图像概念时都是集合概念。因此我们可以知道对于H.264 协议来说我们平常所熟悉的那些称呼例如I 帧、P 帧、B帧等等实际上都是我们把图像这个概念具体化和细小化了。我们在 H.264里提到的“帧”通常就是指不分场的图像 2、如果不采用FMO灵活宏块排序 机制则一幅图像只有一个片组 3、如果不使用多个片则一个片组只有一个片 4、如果不采用DP数据分割机制则一个片就是一个NALU一个 NALU 也就是一个片。 否则一个片由 三个 NALU 组成即标准“表7-1”中 nal_unit_type 值为2、3、4 的三个 NALU 属于 一个片 2编码条带数据分割块A slice_data_partition_a_layer_rbsp() 3 编码条带数据分割块Bslice_data_partition_b_layer_rbsp( ) 4 编码条带数据分割块Cslice_data_partition_c_layer_rbsp( ) 5、以上所述的片和 NALU的大小关系并不是抽象概念上的从属关系。从概念的从属关系上来看NALU其实又是片的一个集合概念例如标准“表7-1”中nal_unit_type 值为 5 的 NALU 包括 I 片或者 SI片。 一幅图像根据组成它的片类型来分可以分为标准“表7-5”中的 8种类型。我们平常应用中所最常见到的其实是这些类型的特例。例如我们平常所谓的“I帧”和“IDR 帧”其实是 primary_pic_type 值为 0的图像我们平常所谓的“P帧”其实是 primary_pic_type 值为 1的图像的特例我们平常所谓的“B帧”其实是 primary_pic_type 值为 2的图像的特例。 一幅图像根据概念来分可以分为两种IDR 图像和非 IDR图像。一幅图像是否是 IDR 图像是由组成该图像的 NALU决定的如果组成该图像的 NALU 为标准“表7-1”中 nal_unit_type 值为 5 的NALU则该图像为 IDR 图像否则为非 IDR图像。这里也有几点值得说明 1、nal_unit_type 值为 5 的 NALU 只会出现在 IDR 图像中而 IDR图像中的所有 NALU 都是nal_unit_type 值为 5 的NALU 2、我们以组成一幅图像的片的类型来区分该图像是否是IDR 图像是错误的。 例如一幅图像中的所有片都是 I 片并不代表这幅图像就是 IDR 图像。因为 I片也可以从属于 nal_unit_type 值为 1 的 NALU 也即非IDR图像有可能全部包含I片。只不过我们平常最常见到的形式是所有片都是 I片的图像就是 IDR 图像。其实这个时候 IDR 图像的概念也被我们具体化和细小化了。但IDR图像必定全部包含I片或SI片不过只有用NALU的类型才能判断是不是IDR图像 一幅图像由 1N个片组组成而每一个片组又由一个或若干个片组成一个片由一个NALU或三个NALU假如有数据分割组成。图像解码过程中总是按照片进行解码然后按照片组将解码宏块重组成图像。从这种意义上讲片实际是最大的解码单元。 一个片又包含哪些类型的宏块呢 标准“表7-10”做了最好的说明。 一个 I 宏块又分为哪些类型呢 标准“表7-11”做了最好的说明。 一个 P 宏块又分为哪些类型呢 标准“表7-13”做了最好的说明。 一个 B 宏块又分为哪些类型呢 标准“表7-14”做了最好的说明。 一个 P 宏块的亚宏块又分为哪些类型呢 标准“表7-17”做了最好的说明。 一个 B 宏块的亚宏块又分为哪些类型呢 标准“表7-18”做了最好的说明。 怎么区分H.264视频流的I frame 和 Pframe 收藏 怎么区分H.264视频流的I frame 和 P frame 我是新手前些天自己看那H.264规范文档及其他资料寻找答案时 还有几个概念的关系还没能理解清楚望达人指点一二 NAL、Slice与frame意思及相互关系 NALnal_unit_type中的1非IDR图像的编码条带、2编码条带数据分割块A、3编码条带数据分割块B、4编码条带数据分割块C、5IDR图像的编码条带种类型 与 Slice种的三种编码模式I_slice、P_slice、B_slice 还有frame的3种类型I frame、P frame、 B frame之间有什么映射关系么 最后NAL nal_unit_type中的6SEI、7SPS、8PPS属于什么帧呢 --------------------------------------------------------------------------- 1 frame的数据可以分为多个slice. 每个slice中的数据在帧内预测只用到自己slice的数据 与其他slice数据没有依赖关系。 NAL 是用来将编码的数据进行大包的。 比如每一个slice 数据可以放在NAL 包中。 I frame 是自己独立编码不依赖于其他frame 数据。 P frame 依赖 I frame 数据。 B frame 依赖 I frame, P frame 或其他 B frame 数据。 ---------------------------------------------------------------------------- 那NAL nal_unit_type中的哪几种类型是Iframe现在只能确定nal_unit_type5IDR图像的编码条带是I frame sps、pps、SEI算不算I frame呢 还有 属于编码条带分割的DPA、DPB、DPC呢 能给个从视频流中提取I frame 和P frame的方法么 ----------------------------------------------------------------------------------------------- 一个frame是可以分割成多个Slice来编码的而一个Slice编码之后被打包进一个NAL单元不过NAL单元除了容纳Slice编码的码流外还可以容纳其他数据比如序列参数集SPS ------------------------------------------------------------------------------------------------ // H.264 NAL type enum H264NALTYPE { H264NT_NAL 0, H264NT_SLICE, //P 帧 H264NT_SLICE_DPA, H264NT_SLICE_DPB, H264NT_SLICE_DPC, H264NT_SLICE_IDR, // I 帧 H264NT_SEI, H264NT_SPS, H264NT_PPS, }; // 0x00 0x00 0x00 0x01 0x65(0x45) 前四个字节为帧头0x65 是关键帧 //0x00 0x00 0x01 0x65(0x45) 也为关键帧 H264GetNALType(unsigned char * pBSBuf, const int nBSLen) { if ( nBSLen 5 ) // 不完整的NAL单元 return H264NT_NAL; unsigned char * pBS (unsigned char *)pBSBuf; int nType pBS[4] 0x1F; // NAL类型在固定的位置上 if ( nType H264NT_PPS ) return nType;// nTYPE 为5 表示关键帧 return 0; } ------------------------------------------------------------------------------------------------ 其中 H264NT_SLICE_IDR 是关键帧H264NT_SLICE 是P帧 ------------------------------------------------------------------------------------------------ 一个frame是可以分割成多个Slice来编码的而一个Slice编码之后被打包进一个NAL单元不过NAL单元除了容纳Slice编码的码流外还可以容纳其他数据比如序列参数集SPS。 ------------------------------------------------------------------------------------------------ 1、NAL、Slice与frame意思及相互关系 NAL指网络提取层里面放一些与网络相关的信息 Slice是片的意思264中把图像分成一帧frame或两场field而帧又可以分成一个或几个片Slilce片由宏块MB组成。宏块是编码处理的基本单元。 2、NALnal_unit_type中的1非IDR图像的编码条带、2编码条带数据分割块A、3编码条带数据分割块B、4编码条带数据分割块C、5IDR图像的编码条带种类型 与 Slice种的三种编码模式I_slice、P_slice、B_slice NAL nal_unit_type 里的五种类型代表接下来数据是表示啥信息的和具体如何分块。 I_slice、P_slice、B_slice表示I类型的片、P类型的片B类型的片.其中I_slice为帧内预测模式编码P_slice为单向预测编码或帧内模式B_slice中为双向预测或帧内模式。 3、还有frame的3种类型I frame、P frame、 Bframe之间有什么映射关系么 I frame、P frame、 B frame关系同I_slice、P_slice、B_sliceslice和frame区别在问题1中已经讲明白。 4、最后NALnal_unit_type中的6SEI、7SPS、8PPS属于什么帧呢 NAL nal_unit_type为序列参数集SPS、图像参数集PPS、增强信息SEI不属于啥帧的概念。表示后面的数据信息为序列参数集SPS、图像参数集PPS、增强信息SEI。 h.264解码中首先过滤码流获得参数集参数集是H.264标准的一个新概念是一种通过改进视频码流结构增强错误恢复能力的方法。众所周知一些关键信息比特的丢失如序列和图像的头信息会造成解码的严重负面效应而H.264把这些关键信息分离出来凭借参数集的设计确保在易出错的环境中能正确地传输。这种码流结构的设计无疑增强了码流传输的错误恢复能力。 H.264的参数集又分为序列参数集Sequence parameter set和图像参数集Pictureparameterset。其中序列参数集包括一个图像序列的所有信息即两个IDR图像间的所有图像信息。图像参数集包括一个图像的所有分片的所有相关信息包括图像类型、序列号等解码时某些序列号的丢失可用来检验信息包的丢失与否。多个不同的序列和图像参数集存储在解码器中编码器依据每个编码分片的头部的存储位置来选择适当的参数集图像参数集本身也包括使用的序列参数集参考信息。 参数集具体实现的方法也是多样化的1通过带外传输这种方式要求参数集通过可靠的协议在首个片编码到达之前传输到解码器2通过带内传输这需要为参数集提供更高级别的保护例如发送复制包来保证至少有一个到达目标3在编码器和解码器采用硬件处理参数集。 序列参数集以及图像参数集要在解码前传输在解码的过程中被激活。一旦被激活则上一个序列参数集或者图象参数集就失效了。图象参数集是被使用它的slice data或者使用它的A分割的Nalu激活的。而序列参数集是被使用它的图象参数集或者包括缓冲期消息的SEInalu所激活。同一个IDR图象的序列参数集有相同的seq_parameter_set_id直到一个图象的最后一个accessunit或者包括缓冲期消息的SEI Nalu这时需要出现下一个图象的序列参数集。下一个图象的序列参数集被SEInalu激活。如果序列参数集和图象参数集是通过其他传输管道发送的则要保证以上的传输顺序。 ------------------------------------------------------------------------------------------------ H.264视频流是以NAL单元传送的。。。但在一个NAL单元里面可能既存放I-SliceP-Slice或B-Slice同事也可能存放图像的其他信息 那么 是不是说 I frame P frameB frame是把收到的NAL单元中的VCL的信息先提取出然后按内容进行I、P、Bframe分类 而我们只能通过NAL nal_unit_type来判别NAL单元中数据的类型哈~~~ 呵呵 不好意思 还没有完全理解~~ NAL单元中首先会有一个H.264 NAL type根据这个可以判断是啥信息。如果是 H264NT_SLICE_DPA,H264NT_SLICE_DPB,H264NT_SLICE_DPC,H264NT_SLICE_IDR视频数据相关的里面还会有Slicehead头信息根据这个头信息可以判断属于I-SliceP-Slice或B-Slice之后对于每个宏块都会有MB head信息根据宏块头信息可以判断块模式。 H264就是这样以分层的方式组织信息的。不知道你理解没有。