1、简介

H.264码流第一个 NALU是 SPS(序列参数集Sequence Parameter Set,对应H264标准文档 7.3.2.1 序列参数集的语法进行解析。

H.264码流第二个 NALU是 PPS(图像参数集Picture Parameter Set,对应H264标准文档 7.3.2.2 序列参数集的语法进行解析。

H.264码流第三个 NALU 是 IDR(即时解码器刷新),对应H264标准文档 7.3.3 序列参数集的语法进行解析。

SDP中的H.264的SPS和PPS串,包含了初始化H.264解码器所需要的信息参数,包括编码所用的profile,level,图像的宽和高,deblock滤波器等。

2、H2.64中I帧和IDR帧的区别

I和IDR帧都是使用帧内预测的。它们都是同一个东西而已,在编码和解码中为了方便,要首个I帧和其他I帧区别开,所以才把第一个首个I帧叫IDR,这样就方便控制编码和解码流程。IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始,重新算一个新的序列开始编码。而I帧不具有随机访问的能力,这个功能是由IDR承担,IDR会导致DPB(参考帧列表——这是关键所在)清空,而I不会。IDR图像一定是I图像,但I图像不一定是IDR图像。一个序列中可以有很多的I图像,I图像之后的图像可以引用I图像之间的图像做运动参考。

对于IDR帧来说,在IDR帧之后的所有帧都不能引用任何IDR帧之前的帧的内容,与此相反,对于普通的I-帧来说,位于其之后的B-和P-帧可以引用位于普通I-帧之前的I-帧。从随机存取的视频流中,播放器永远可以从一个IDR帧播放,因为在它之后没有任何帧引用之前的帧。但是,不能在一个没有IDR帧的视频中从任意点开始播放,因为后面的帧总是会引用前面的帧。

3、SPS和PPS的分离与添加

在分离H.264码流的时候,直接存储AVPacket后的文件可能是不能播放的。

如果视音频复用格式是TS(MPEG2 Transport Stream),直接存储后的文件是可以播放的。复用格式是FLV,MP4则不行。经过长时间资料搜索发现,FLV,MP4这些属于“特殊容器”,需要经过以下处理才能得到可播放的H.264码流:

分离某些封装格式(例如MP4/FLV/MKV等)中的H.264的时候,需要首先写入SPS和PPS,否则会导致分离出来的数据没有SPS、PPS而无法播放。H.264码流的SPS和PPS信息存储在AVCodecContext结构体的extradata中。需要使用ffmpeg中名称为“h264_mp4toannexb”的bitstream filter(比特流过滤器)处理。有两种处理方式:

(1)使用bitstream filter处理每个AVPacket(简单)

av_bitstream_filter_init(const char * name)
  • 输入参数:比特流过滤器的名字
  • 输出参数:根据比特流过滤器的创建并初始化一个比特流过滤器的上下文

(2)手工添加SPS,PPS(稍微复杂)

将AVCodecContext的extradata数据经过bitstream filter处理之后得到SPS、PPS,拷贝至每个IDR帧之前。通过查看FFMPEG源代码我们发现,AVPacket中的数据起始处没有分隔符(0x00000001), 也不是0x65、0x67、0x68、0x41等字节,所以可以AVPacket肯定这不是标准的nalu。其实,AVPacket前4个字表示的是nalu的长度,从第5个字节开始才是nalu的数据。所以直接将AVPacket前4个字节替换为0x00000001即可得到标准的nalu数据。

av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,AVCodecContext *avctx, const char *args,uint8_t **poutbuf, int *poutbuf_size,const uint8_t *buf, int buf_size, int keyframe)
  • 参数1:比特流过滤器的上下文
  • 参数2:avcodeccontext输出流的编码器上下文.。
  • 参数3:指定筛选器配置的参数,可能为空.
  • 参数4:指针被更新以指向过滤缓冲区.
  • 参数5:指针以字节形式更新到已过滤的缓冲区大小.
  • 参数6:包含数据到过滤器的缓冲区
  • 参数7:在字节缓冲区大小
  • 参数8:设置为非零,如果缓冲区对应于一个关键帧数据包

H.264中SPS、PPS和IDR相关推荐

  1. h264 sei信息 解码_关于H264编码数据中SPS,PPS,SEI,IDR等内容的问题

    群内的朋友们好! 我使用的平台是ipnc rdk 3.8 , 我在h264编码的有关NALU参数设置如下: staticParams->nalUnitControlParams.naluCont ...

  2. H.264中的SPS和PPS

    参考使用FFMPEG类库分离出多媒体文件中的H.264码流_雷霄骅的博客-CSDN博客 H.264码流第一个 NALU是 SPS(序列参数集Sequence Parameter Set) 对应H264 ...

  3. 视频【编码】原理(H.264 librtmp推流),图像编码中sps ,pps ,nalu ,frame ,silce ect

    视频编码格式:H264, VC-1, MPEG-2, MPEG4-ASP (Divx/Xvid), VP8, MJPEG 等.  音频编码格式:AAC, AC3, DTS(-HD), TrueHD, ...

  4. H.264中IDR帧和I帧区别

    IDR(Instantaneous Decoding Refresh)--即时解码刷新.       I和IDR帧都是使用帧内预测的.它们都是同一个东西而已,在编码和解码中为了方便,要首个I帧和其他I ...

  5. H264码流中SPS PPS

    转载地址:https://www.cnblogs.com/wainiwann/p/7477794.html 1 SPS和PPS从何处而来? 2 SPS和PPS中的每个参数起什么作用? 3 如何解析SD ...

  6. H.264中POC类型之探讨

    有 B 图像的场合.POC 表示的是图像显示顺序.由于POC对于参考序列的初始化,重排序及标记关系重大,所以做了如下的分析,以下讨论情况是针对帧编码. pic_order_cnt_type=0的时候: ...

  7. H.264 中很有用的一些概念

    Q:PSNR 峰值信噪比 是根据它来取qp是不是? A:不是 和QP没有直接关系但是QP的选择会影响到PSNR Q: 如果不用率失真最优化,为什么选择SATD+delta×r(mv,mode)作为模式 ...

  8. H.264中的一些易混淆概念

    Q:PSNR 峰值信噪比 Q:是根据它来取qp是不是? A:不是, 和QP没有直接关系, 但是QP的选择会影响到PSNR Q: 如果不用率失真最优化, 为什么选择SATD+delta×r(mv,mod ...

  9. H.264 中 SAD SATD及常见知识点

    H264标准只定义了码流的格式编码器实现是各公司自己的事,只要形成的码流符合标准就行解码器必须按照这个格式来,这样任何符合标准的码流都可以解出来 Q:什么是SAD,SAE,SATD,SSD,SSE,M ...

最新文章

  1. C# Socket Server 收不到数据
  2. Matlab绘制小波尺度函数和小波函数
  3. 一个人最重要的是跌倒了爬起来的能力
  4. python进行两个大数相加
  5. 数据合并之concat、append、merge和join
  6. 数据结构-----基于双数组的Trie树
  7. Spring_02_AOP初级总结
  8. django-视图函数 00
  9. UIKit 框架之UIControl
  10. Java图形编程实验总结_实验二java图形界面编程2015级.doc
  11. 苹果手机搭建php服务器,给自己搭建iPhone Installer软件源
  12. NB-IOT技术与发展问答
  13. 通过python理解相速度和群速度
  14. html用if函数,if函数的使用方法(IF函数七种条件判断用法都在这)
  15. 「星火计划沙龙视频」腾讯自研图数据库核心研发思路揭秘
  16. Ubuntu16.04在4K显示器中,字体太小,进行调整
  17. 小布老师讲座笔记(四)
  18. LCD fb driver for linux 参数计算
  19. [osg]OSG中的颜色数组,法向数组
  20. 三星手机html默认,关于三星手机恢复出厂设置的方法

热门文章

  1. configure error:Package requirements (openssl) were not met
  2. IOS-启动图和开屏广告图,类似网易
  3. 中国电信翼支付网关接口接入
  4. Roy Li的学习和成长自传
  5. java 自定义语言 解析_视频讲解 Java 语言基础编程题(自定义异常类,IO 流)
  6. Espresso测试框架的使用
  7. python期货数据 库_如何用python或者基于vnpy框架将期货tick数据聚合成1分钟数据呢?...
  8. 平稳分布、细致平稳条件与 Gibbs 采样
  9. 成功的10000小时定律
  10. 1359 信息学奥赛一本通 围成面积