H264帧

对于H.264而言,每帧的界定符为00 00 00 01 或者00 00 01。

例如下面是一个H264的文件片段
00 00 00 01 67 42 C0 28 DA 01 E0 08 9F 96 10 00
00 03 00 10 00 00 03 01 48 F1 83 2A 00 00 00 01
68 CE 3C 80 00 00 01 06 05 FF FF 5D DC 45 E9 BD
E6 D9 48 B7 96 2C D8 20 D9 23 EE EF …

第一帧是00 00 00 01 67 42 C0 28 DA 01 E0 08 9F 96 10 00 00 03 00 10 00 00 03 01 48 F1 83 2A
第二帧是00 00 00 01 68 CE 3C 80
第三帧是00 00 01 06 05 FF FF 5D DC 45 E9 BD E6 D9 48 B7 96 2C D8 20 D9 23 EE EF ..

帧类型有:

NAL_SLICE = 1 非关键帧
NAL_SLICE_DPA = 2
NAL_SLICE_DPB = 3
NAL_SLICE_DPC =4
NAL_SLICE_IDR =5 关键帧
NAL_SEI = 6
NAL_SPS = 7 SPS帧
NAL_PPS = 8 PPS帧
NAL_AUD = 9
NAL_FILLER = 12

SPS 对于H264而言,就是编码后的第一帧,如果是读取的H264文件,就是第一个帧界定符和第二个帧界定符之间的数据的长度是4

PPS 就是编码后的第二帧,如果是读取的H264文件,就是第二帧界定符和第三帧界定符中间的数据长度不固定。

测试

http://samples.mplayerhq.hu/V-codecs/h264/
下载名为:H264_artifacts_motion.h264 的源文件
测试放在vlc中可以直接播放
使用sublimeText可直接打开查看二进制文件:

QQ20151126-0@2x.png

NALU

  • 有时并不能直接得到NALU,文件中也没有ox00000001 分隔符:
  1. 从图中可以发现,packet中的数据起始处没有分隔符(0x00000001), 也不是0x65、0x67、0x68、0x41等字节,所以可以肯定这不是标准的nalu。
  2. 前4个字0x000032ce表示的是nalu的长度,从第5个字节开始才是nalu的数据。所以直接将前4个字节替换为0x00000001即可得到标准的nalu数据
  • 获取pps和sps
  1. pps及sps不能从packet获得,而是保存在AVCodecContext的extradata数据域中
  2. 一般情况下,extradata中包含一个sps、一个pps 的nalu, 从h264_mp4toannexb_bsf.c代码中容易看出extradata的数据格式
  3. 分析后的sps及pps依然储存在extradata域中,并添加了起始符

H264 帧、pps 、sps相关推荐

  1. H264帧的分析sps pps

    帧格式 H264帧由NALU头和NALU主体组成. NALU头由一个字节组成,它的语法如下: +---------------+       |0|1|2|3|4|5|6|7|       +-+-+ ...

  2. H264中的SPS、PPS提取与作用

    From: http://blog.csdn.net/sunnylgz/article/details/7680262 牛逼的视频会议网站:http://wmnmtm.blog.163.com/blo ...

  3. ffmpeg 推流 在H264中插入SPS、PPS 头

    1. SPS PPS头的重要性 SPS PPS 头在编解码H264时非常重要,里面不仅包含了许多关于视频流的相关信息:比如宽高等.还标志着一个视频流的开头. 一般视频流前开头第一帧是SPS 第二帧是P ...

  4. H264编解码SPS、PPS参数说明

    H264编解码参数说明 一.H264码流分层 1.NAL层 ①.如何判断帧类型(是图像参考帧还是I.P帧等)? ②. 帧格式 ③. [SPS格式解析代码分析 ParseAndRewriteSps方法 ...

  5. RTP中H264封装NALU(SPS,PPS等)

    NAL的英文全称为Network  Abstract Layer,即网络抽象层,在H264/AVC视频编解码标准中,整个系统框架分为两个层面,视频编解码层面(VCL)和网络抽象层面(NAL).VCL负 ...

  6. 从nginx-rtmp中提取一帧h264帧

    摘要:一为什么要提取h264帧?  因为我们经常需要从事实流中截取一些画面,用于变动的封面,安全,鉴黄等用处.二从nginx_rtmp中怎么提取一帧h264帧呢?  前面我们讲过如何提取sps和pps ...

  7. 音视频学习-H264帧基础知识

    一组图像 GOP 所谓GOP就是1组图像Group of Picture,在这一组图像中有且只有1个I帧,多个P帧或B帧,两个I帧之间的帧数,就是一个GOP. GOP一般设置为编码器每秒输出的帧数,即 ...

  8. ffmpeg h264解码器分析sps(二)

    ffmpeg h264解码器解析sps下半部分 sps->mb_width = get_ue_golomb(gb) + 1; /*以宏块为单位的宽度*/ sps->mb_height = ...

  9. gstreamer读取USB摄像头H264帧并用rtmp推流

    文章目录 gstreamer命令行实现rtmp推流 gstreamer代码实现rtmp推流 因为要在嵌入式端使用rtmp推流,目前我知道的有三种办法,ffmpeg.gstreamer.librtmp, ...

最新文章

  1. C++程序中常用的sprintf
  2. 英伟达宣布最新自动驾驶芯片!GTC 黄教主精彩报告
  3. Java 笔试题集锦
  4. 如何保护你的 Python 代码—— 定制 Python 解释器
  5. 在.Net framework中动态加载Assembly的loadFromRemoteSources配置
  6. [TODO]Python拾遗(三)
  7. linux6.8安装图形桌面,图形/文本界面安装CentOS 6.8系统详解
  8. canvas转盘-拯救选择困难
  9. oracle数据库怎么锁表,oracle数据库表锁住
  10. 创建模板_在 GNOME 中创建文档模板 | Linux 中国
  11. Altium Designer画元器件封装三种方法
  12. Linux下如何编写和使用自定义的Shell函数和函数库
  13. dmx512 java_DMX512控制协议及其实现
  14. 计算机基础知识图谱,基于深度学习的大学计算机基础知识图谱构建方法与流程...
  15. 超弦计算机,物理学四大神兽——拉普拉斯妖
  16. 明解C语言 入门 课后习题练习答案 第四章(1)
  17. Matlab 乱码问题解决方法
  18. 小学计算机京剧脸谱教案,小学脸谱教案
  19. 57.音乐播放器的进度条
  20. Python创建一定长度的列表_一定维度的列表_综合最快

热门文章

  1. hdu 4355 Party All the Time
  2. HP刀片服务器C7000-Cisco网络模块配置指南
  3. pku1157-------LITTLE SHOP OF FLOWERS(简单动态规划题:摆放鲜花使审美价值达到最高)...
  4. 机器学习--线性回归2(共线性问题、岭回归、lasso算法)
  5. zb_system login.php,zblog后台登录地址怎么修改?
  6. Jquery.dataTables分页排序参数详解
  7. Javascript加号的作用、数据类型、输入用户的输入第四课
  8. 使用php进行财务统计,基于php的基金财务数据接口调用代码实例
  9. Java 跑酷游戏 rush,翻转跑酷游戏安卓下载|翻转跑酷最新版(Flip Rush)下载v1.0.5-乐游网安卓下载...
  10. 软件工程第一次作业-谢旭军