H264(NAL简介与I帧判断)

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类型  & 31 = 5

比如0x65 & 31 = 5

时间: 2024-08-28 21:49:00

H264(NAL简介与I帧判断)的相关文章

x264编码设置-x264编码--使用nal单元分割一帧h264数据

问题描述 x264编码--使用nal单元分割一帧h264数据 在x264编码中,想要编码出来每一帧数据中含有多个nal单元(比如00 00 01或者00 00 00 01) 分割,并且可以设置每个nal单元的最大字节数(想以最大字节数进行分割nal) 请问怎么设置x264参数. 数据格式如下: 00 00 00 01 ...........................00 00 00 01....................00 00 00 01....(这是一帧数据) 解决方案 顶起!

SURF+视频帧判断 总是崩溃

问题描述 SURF+视频帧判断 总是崩溃 2C 想用SURF特征点来检测视频两帧间的差别,进而判断出场景转变的位置,可是每次到转场帧的时候就崩溃 附上代码 谢谢各位了! //---------------------------------[头文件.命名空间包含部分]----------------------------// 描述:包含程序所使用的头文件和命名空间//----------------------------------------------------------------

H264 帧结构分析、帧判断

http://blog.csdn.net/dxpqxb/article/details/7631304 H264以NALU(NAL unit)为单位来支持编码数据在基于分组交换技术网络中传输. NALU定义了可用于基于分组和基于比特流系统的基本格式,同时给出头信息,从而提供了视频编码和外部世界的接口. H264编码过程中的三种不同的数据形式: SODB 数据比特串-->最原始的编码数据,即VCL数据: RBSP 原始字节序列载荷-->在SODB的后面填加了结尾比特(RBSP trailing

FFmpeg解码H264及swscale缩放详解

本文概要:         本文介绍著名开源音视频编解码库ffmpeg如何解码h264码流,比较详细阐述了其h264码流输入过程,解码原理,解码过程.同时,大部分应用环境下,以原始码流视频大小展示并不是最佳方式,因此,开发者不仅仅需要对视频流解码,并且需要缩放图像以展示于不同窗体下.         综上,本文除介绍ffmpeg解码h264,同时阐述如何使用swscale缩放视频流.                文章使用的开发环境Ubuntu12.04..交流邮箱:leoluopy@gmail

判断远程图片是否存在的JavaScript代码

代码简介: 用JavaScript判断远程图片是否存在,不存在话则替换指定的图片,指定图片可以是你网站的LOGO或其它图片,或显示提示信息.没想到用JS还能干这种活,以前都是用笨方法,也就是用ASP/PHP程序去判断,这下可好了,省了很多事. 代码内容: <html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title

js/jquery 批量修改样式

问题描述 js/jquery 批量修改样式 <div><p id="1">aa</p></div> <div><p id="2">aa</p></div> <div><p id="32">aa</p></div> <div><p id="44">aa</p

ONVIF、RTSP/RTP、FFMPEG的开发实录

前言 本文从零基础一步步实现ONVIF协议.RTSP/RTP协议获取IPC实时视频流.FFMPEG解码.开发环境为WIN7 32位 + VS2010. 最终成功获取浩云.海康.大华的IPC实时视频流. 如果要了解本文更多细节,或者用本文作设计指导,那最好把文中提到的连接都打开,与本文对照着看. 前期准备 1.准备一个ONVIF服务器 既然开发的是客户端,那必需要有服务端了.我这里大把的IPC,好几个品牌的,就随便拿了一个. 如果没有IPC,倒是可以用 VLC media player 搭建一下.

网上作品防抄一法

有人说:"上了网的作品就没有版权",这话虽有些偏激,但也不无道理.毕竟上了网的作品,特别是普通文字作品更容易被人转抄,只要点击Ctrl+C→Ctrl+V就行了.要在网上发布作品,又不想被人随意转抄看起来似乎是一个两难的选择.现在提供一种解决上述问题的办法,希望能起到抛砖引玉的效果.其解决办法所用的工具就是Macromedia的网上动画制作软件Flash 5. 下面是使用Flash 5来保护作品的步骤: 1.新建一个Flash 5文档,把Layer 1改名为protect: 2.指定第1

Flash MX 2004 ActionScript图文教程(十)

教程 2.3帧事件 2.3.1帧事件简介 帧事件和前面介绍的鼠标事件以及键盘事件的主要区别在于,帧事件并不是一个交互式的事件.每当影片播放指定的帧时,帧事件内部的代码就会被执行.在Flash的开发环境中,帧事件在时间线上会有一个"a"标记. 在具体的设计中,帧事件的用处是非常多的.比方说影片的第1帧总是受到垂青的,因为我们一般总是要在这一帧当中对程序进行一些初始化操作,比方说定义变量.函数等等.再比如,在很多交互式的程序中,我们一般要在需要等待用户输入(比如单击一个按钮)的时候,选择恰