H264(NAL简介与I帧判断)

From: http://blog.csdn.net/jefry_xdz/article/details/8461343

1、NAL全称Network Abstract Layer, 即网络抽象层。
         在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。因此我们平时的每帧数据就是一个NAL单元(SPS与PPS除外)。在实际的H264数据帧中,往往帧前面带有00 00 00 01 或 00 00 01分隔符,一般来说编码器编出的首帧数据为PPS与SPS,接着为I帧……

如下图:

图一
2、如何判断帧类型(是图像参考帧还是I、P帧等)?

     NALU类型是我们判断帧类型的利器,从官方文档中得出如下图:

                                                  图二
我们还是接着看最上面图的码流对应的数据来层层分析,以00 00 00 01分割之后的下一个字节就是NALU类型,将其转为二进制数据后,解读顺序为从左往右算,如下:
(1)第1位禁止位,值为1表示语法出错
(2)第2~3位为参考级别
(3)第4~8为是nal单元类型

例如上面00000001后有67,68以及65

其中0x67的二进制码为:
0110 0111
4-8为00111,转为十进制7,参考第二幅图:7对应序列参数集SPS

其中0x68的二进制码为:
0110 1000
4-8为01000,转为十进制8,参考第二幅图:8对应图像参数集PPS

其中0x65的二进制码为:
0110 0101
4-8为00101,转为十进制5,参考第二幅图:5对应IDR图像中的片(I帧)

 

所以判断是否为I帧的算法为: (NALU类型  & 0001  1111) = 5   即   NALU类型  & 0x1F = 5

比如0x65 & 0x1F = 5


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

让VS2010添加新类时自动添加public关键字(来自dudu博文)

以下是dudu 老大的详细步骤: http://www.cnblogs.com/dudu/archive/2011/08/30/2159894.html 里面有一个重要步骤,如何修改模板class.cs文件,请看下面截图 1、下载一个解压软件7-zip_9.25Alpha(本人是win7 64位,不支持…

H.264视频编码在VC++.Net中的实现

From: http://blog.csdn.net/xwchen/article/details/5052981 引言:H.264编码技术是俱乐部在过去一段时间内研究的一个方向,对该编码技术进行过实际的开发和应用,并取得了很大的收获。下面将重点介绍H.264视频编码在VC.Net中的实现。 1. H.264编码的介…

React开发(265):ant design InputNumber

## 所有输入价格的地方&#xff0c;都使用InputNumber 组件javascript // formatter 和 parser <InputNumberstyle{{ width: 100% }}value{baseInfo.minRepeatedlyAmount}onChange{(value) > this.handleChangeFormData(value, minRepeatedlyAmount)}formatter{(value) &…

总结一下php5.2.16与apache2.0的C++扩展开发整个过程

开发环境&#xff1a;ubuntu 11&#xff08;虚拟机环境&#xff09; 开发平台&#xff1a; php-5.2.16.tarapache2.0 PHP API 20041225 PHP Extension 20060613 Zend Extension 220060519 说明一下为什么要用这么旧的版本&#xff0c;没原因&#xff0c;因为公司官方服务器是…

TCP/IP ---封装与分用

封装 当应用程序用T C P传送数据时&#xff0c;数据被送入协议栈中&#xff0c;然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息&#xff08;有时还要增加尾部信息&#xff09;&#xff0c;该过程如图1 - 7所示。T C P传给I P的数…

深入了解crc32算法

From: http://blog.csdn.net/isadream/article/details/2072760 由于项目需要&#xff0c;解决一个流媒体文件的crc32校验码。网上查了很多的资料&#xff0c;发现了此校验码和生成多项式以及算法本身都有关系。对于不同类型的文件所使用的多项式以及算法不同&#xff0c;对于不…

React开发(271):UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated e

原因&#xff1a;没有进行promise的差错处理 解决方案&#xff1a;加一个catch语句 .catch(err > {console.log(err);})

远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您的系统管理员或者技术人员来获得帮助...

故障&#xff1a;“远程计算机需要网络级别身份验证&#xff0c;而您的计算机不支持该验证&#xff0c;请联系您的系统管理员或者技术人员来获得帮助” 故障症状&#xff1a;当您使用Windows XP“远程桌面连接”工具去连接Windows Vistas或Windows Server 2008的远程桌面、终端…

CRC32算法详细推导(1)

From: http://blog.csdn.net/sparkliang/article/details/5671510 CRC算法详解&#xff08;1&#xff09; 作为blog再次发出来&#xff0c;详细描述一下CRC32算法的推导过程。 CRC 算法的数学基础 CRC 算法的数学基础就不再多啰嗦了&#xff0c;到处都是&#xff0c;简单提一…

前端javascript面试题目录汇总

【JS】 [js] 请使用js实现一个秒表计时器的程序 [js] 模拟 localStorage 时如何实现过期时间功能 [js] 请使用js实现商品的自由组合&#xff0c;并说说你的思路 [js] js中的undefined和 ReferenceError: xxx is not defined 有什么区别&#xff1f; [js]JavaScript Number…

React开发(272):try...catch..捕获

//通过接口获取listhandleSearchList async (url) > {try {const res await url();if (res.data && res.data.length > 0) {this.setState({thirdList: res.data,showThird: true,tabName: ,});}} catch (error) {}};

CRC32算法详细推导(2)

From: http://blog.csdn.net/sparkliang/article/details/5671977 CRC算法详解&#xff08;2&#xff09; 初见 Table-Driven 变换到上面的方法后&#xff0c;我们离 table-driven 的方法只有一步之遥了&#xff0c;我们知道一个字节能表示的正整数范围是 0~255&#xff0c;步…

iOS UIWebView加载网页、文件、HTML

UIWebView是用来加载加载网页数据的一个框架.UIWebView可以用来加载pdf,word,doc,等等文件,生成webview 有两种方法&#xff0c;1、通过storyboard 拖拽 2、通过alloc init 来初始化创建webview&#xff0c;下列文本中 _webView.dataDetectorTypes UIDataDetectorTypeAll; 是识…

nginx的upstream模块安装

下载连接&#xff1a;wget http://code.google.com/p/nginx-upstream-jvm-route/downloads/detail?namenginx-upstream-jvm-route-0.2.tar.gz&can1&q/nginx-upstream-jvm-route-0.2.tar.gz nginx_upstream_jvm_route 是一个 Nginx 的扩展模块&#xff0c;用来实现基于…

前端面试题Vue-cli目录汇总

【Vue-cli】 [vue-cli]vue-cli3你有使用过吗&#xff1f;它和2.x版本有什么区别&#xff1f; [vue-cli]vue-cli默认是单页面的&#xff0c;那要弄成多页面该怎么办呢 [vue-cli]不用vue-cli&#xff0c;你自己有搭建过vue的开发环境吗&#xff1f;流程是什么&#xff1f; [v…

CRC32算法详细推导(3)

From:http://blog.csdn.net/sparkliang/article/details/5671543 CRC32算法详细推导&#xff08;3&#xff09; 郁闷的位逆转 看起来我们已经得到 CRC-32 算法的最终形式了&#xff0c;可是、可是在实际的应用中&#xff0c;数据传输时是低位先行的&#xff1b;对于一个字节 …

WebService的学习

这篇文章不错&#xff0c;直接转了 http://blog.csdn.net/terryzero/article/details/5976638#comments 转载于:https://www.cnblogs.com/zhilu-doc/p/5291927.html

linux 用户行为审计

根据公司需求&#xff0c;整理了一个linux用户审计的脚本&#xff0c;现和大家分享&#xff01; 具体步骤如下&#xff1a; 一&#xff1a;配置调试 1.创建用户审计文件存放目录和审计日志文件 &#xff1b; mkdir -p /var/log/usermonitor/ 2.创建用户审计日志文件&#xff1…

前端面试题vue-element汇总

【Vue-element】 [vue-element] ElementUI是怎么做表单验证的&#xff1f;在循环里对每个input验证怎么做呢&#xff1f; [vue-element] 你有二次封装过ElementUI组件吗&#xff1f; [vue-element] ElementUI怎么修改组件的默认样式&#xff1f; [vue-element]ElementUI的穿…