网站页面设计服务网站建设内容介绍
- 作者: 五速梦信息网
- 时间: 2026年03月21日 07:22
当前位置: 首页 > news >正文
网站页面设计服务,网站建设内容介绍,农业基本建设项目信息网站,wordpress水印前提#xff1a; 注意的是#xff1a;我们这里是从avframe转换成avpacket 后#xff0c;从avpacket中查看NALU。 在实际开发中#xff0c;我们有可能是从摄像头中拿到 RGB 或者 PCM#xff0c;然后将pcm打包成avframe#xff0c;然后将avframe转换成avpacket#xff0…前提 注意的是我们这里是从avframe转换成avpacket 后从avpacket中查看NALU。 在实际开发中我们有可能是从摄像头中拿到 RGB 或者 PCM然后将pcm打包成avframe然后将avframe转换成avpacket然后直接就通过网络传播avpacket了 那么在网络传输的过程中如何传送这个avpacket呢这就要用到 NALU 了。 关于NALU是啥可以参考这个 音视频开发14 FFmpeg 视频 相关格式分析 – H264 NALU格式分析-CSDN博客 为了方便在网络上传输的一种抽象层。一般网络上传输的数据包有大小限制而AVCH264的一帧大小远远大于网络传输的字节大小限制。因此要对AVC的数据流进行拆包将一帧数据拆分为多个包传输。和NAL层相对是VAL层即视频编码层Video Coding Layer NALU就是经过分组后的一个一个数据包。 发I帧之前⾄少要发⼀次SPS和PPS。当分辨率变化的时候要重新发送一次SPS和PPS类似在视频网站上我们将分辨率从720p变成1080p的时候 这个很重要如果遇到我们显示不了图片或者视频的时候应该第一个检查的就是 SPS 和PPS是否有正确的发送。 SPS序列参数集SPS中保存了⼀组编码视频序列(Coded video sequence)的全局参数。 PPS图像参数集对应的是⼀个序列中某⼀幅图像或者某⼏幅图像的参数。 I帧帧内编码帧可独⽴解码⽣成完整的图⽚。 P帧: 前向预测编码帧需要参考其前⾯的⼀个I 或者B 来⽣成⼀张完整的图⽚。 B帧: 双向预测内插编码帧则要参考其前⼀个I或者P帧及其后⾯的⼀个P帧来⽣成⼀张完整的图⽚。 每个NALU StartCode 由一个1字节的NALU头部 一个包含控制信息或编码视频数据的字节流组成。 NALU 结构单元的主体结构如下所示⼀个原始的 H.264 NALU 单元 通常由 [StartCode] [NALU Header] [NALU Payload] 三部分组成。 Start Code ⽤于标示这是⼀个 NALU 单元的开始 必须是00 00 00 01 或 00 00 01 H.264 标准指出当数据流是储存在介质上时在每个 NALU 前添加起始码 0x000001 或 0x00000001 ⽤来指示⼀个 NALU 的起始和终⽌位置 在这样的机制下在码流中检测起始码作为⼀个 NALU 得起始标识当检测到下⼀个起始码时当前NALU 结束。 3 字节的 0x000001 只有⼀种场合下使⽤就是⼀个完整的帧被编为多个 slice ⽚的时 候包含这些 slice 的 NALU 使⽤ 3 字节起始码。其余场合都是 4 字节 0x00000001 的。 NALU Header NALU Header占位8Bit其中三个字段分别为 F 为禁⽌位占 1bit forbidden_zero_bit 在 H.264 规范中规定了这⼀位必须为 0。 R为重要性指示位占 2个 bit nal_ref_idc 取 00~11, 似乎指示这个 NALU 的重要性 , 如 00 的 NALU 解码器可以丢弃它⽽不影响图像的回放,0 3 取值越⼤表示当前 NAL 越重要需要优先受到保护。如果当前 NAL是属于参考帧的⽚或是序列参数集或是图像参数集这些重要的单位时本句法元 素必需⼤于0 。 T 为负荷 数据类型 占 5 bit nal_unit_type这个 NALU 单元的类型 ,1 12 由 H.264 使⽤ 24 31 由 H.264 以外的应⽤ 其值如下重点是 5,6,7,8 5 Coded slice of an IDR picture VCL IDR图像的编码条带(⽚) slice_layer_without_partitioning_rbsp( ) 6 Supplemental enhancement information (SEI) non-VCL 辅助增强信息 (SEI)sei_rbsp( ) 7 Sequence parameter set non-VCL 序列参数集 seq_parameter_set_rbsp( ) 8 Picture parameter set non-VCL 图像参数集 pic_parameter_set_rbsp( ) 0 Unspecified non-VCL未指定 1 Coded slice of a non-IDR picture VCL⼀个⾮IDR图像的编码条带slice_layer_without_partitioning_rbsp() 2 Coded slice data partition A VCL编码条带数据分割块A slice_data_partition_a_layer_rbsp() 3 Coded slice data partition B VCL编码条带数据分割块B slice_data_partition_b_layer_rbsp( ) 4 Coded slice data partition C VCL编码条带数据分割块C slice_data_partition_c_layer_rbsp( ) 5 Coded slice of an IDR picture VCLIDR图像的编码条带(⽚) slice_layer_without_partitioning_rbsp( ) 6 Supplemental enhancement information (SEI) non-VCL辅助增强信息 (SEI)sei_rbsp( ) 7 Sequence parameter set non-VCL序列参数集 seq_parameter_set_rbsp( ) 8 Picture parameter set non-VCL图像参数集 pic_parameter_set_rbsp( ) 9 Access unit delimiter non-VCL访问单元分隔符 access_unit_delimiter_rbsp( ) 10 End of sequence non-VCL序列结尾 end_of_seq_rbsp( ) 11 End of stream non-VCL流结尾end_of_stream_rbsp( ) 12 Filler data non-VCL填充数据filler_data_rbsp( ) 13 Sequence parameter set extension non-VCL序列参数集扩展seq_parameter_set_extension_rbsp( ) 14 Prefix NAL unit non-VCLNAL 单元前缀 15 Subset sequence parameter set non-VCL子集序列参数集 16 Depth parameter set non-VCL深度参数集 17..18 Reserved non-VCL保留 19 Coded slice of an auxiliary coded picture without partitioning non-VCL未分割的辅助编码图像的编码条带slice_layer_without_partitioning_rbsp( ) 20 Coded slice extension non-VCL编码切片扩展 21 Coded slice extension for depth view components non-VCL深度视图组件的编码切片扩展 22..23 Reserved non-VCL保留 24..31 Unspecified non-VCL未定义 这里只是将之前的博客弄了一部分过来请完全阅读。 从一个avpacket中获取 NALU解析NALU头部。 我们这里从传递的avpacket中获取NALU并获取头部。要研究的是通过 h264编码器后avpacket中NALU 的头部信息看是否发送了 PPS 和 SPS 等重要信息。 如下代码中打印的 nal_unit_type 就是每个NALU 头部字节的后5位得到这个值就可以对比5,6,7,8看发送的是啥有没有发送PPS,SPS等。 ///通过h264编码器后的avpacket解析avpacket里面的NALU///第一个问题是 如何从 avpacket如何分离出 每个 NALU呢/// 一个avpacket 的NALU 和 下一个avpacket 的NALU 是以 0001间隔/// 但是一个avpacket中是有多个 NALU组成的一个avpacket之内是以 001间隔的。avpacketcount;//计算总共有多少个avpacketunsigned char naluheader *(avpacket-data 4);//跳过0001个字节/// naluheader这一个字节 8位是这样的第一位是禁用位; 2,3位表示该NALU的重要性4-7位标识是个啥类型的NALU:SPS,PPS,IDR 等int nal_unit_type naluheader 0X1F;cout nal_unit_type nal_unit_type;//然后呢一个 avpacket中可能有多个 NALU以001间隔开的还需要找到这些头部for (int i 4; i avpacket-size - 4; i) //一个data中由多条nalu{if (avpacket-data[i] 0 avpacket-data[i 1] 0 avpacket-data[i 2] 1) { ///001nal_unit_type avpacket-data[i 3] 0x1f;avpacketcount;cout ( nal_unit_type ) flush;}}
相关文章
-
网站页面设计方案怎么写中企动力企业邮箱手机登录入口
网站页面设计方案怎么写中企动力企业邮箱手机登录入口
- 技术栈
- 2026年03月21日
-
网站页面设计方案怎么写教育网站建设网
网站页面设计方案怎么写教育网站建设网
- 技术栈
- 2026年03月21日
-
网站页面设计的网址广州优化公司哪家好
网站页面设计的网址广州优化公司哪家好
- 技术栈
- 2026年03月21日
-
网站页面设计工作流程邯郸信息港二手房出售
网站页面设计工作流程邯郸信息港二手房出售
- 技术栈
- 2026年03月21日
-
网站页面设计工作流程免费企业一键建站网站
网站页面设计工作流程免费企业一键建站网站
- 技术栈
- 2026年03月21日
-
网站页面设计模板代码无极网络平台
网站页面设计模板代码无极网络平台
- 技术栈
- 2026年03月21日
