参考:
http://blog.csdn.net/qingkongyeyue/article/details/54023323

H.264码流第一个 NALU 是 SPS(序列参数集Sequence Parameter Set)

H.264码流第二个 NALU 是 PPS(图像参数集Picture Parameter Set)

H.264码流第三个 NALU 是 IDR(即时解码器刷新)

IDR(Instantaneous Decoding Refresh)–即时解码刷新。
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帧的视频中从任意点开始播放,因为后面的帧总是会引用前面的帧

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


vlc没有收到pps和sps

问题 packetizer_h264 packetizer warning: waiting for SPS/PPS

是因为解码器只是在第一次执行编码的时候,才编码出 SPS、PPS、和I_Frame;
h264 packetizer has set so, that it sends sps/pps only first keyframe,
I’m trying to figure what breaks if that is changed so sps/pps is written in every keyframe.

解决办法:
1、编码器编码出每个关键帧都加上SPS、PPS ,据说通常情况编码器编出的 SPS、PPS是一样的,所以这种方法耗费资源。
2、在服务器接收到客户端请求时,发送第一个package 加上 SPS、PPS。
具体如下:
1、在 VideoOpenFileSource 添加一个变量 isFirstFrame;
2、构造时初始化 isFirstFrame = true;
3、在int VideoOpenFileSource::readFromBufferChain() 修改如下:
1 if(isFirstFrame == true)
2 {
3 memcpy(fTo, h264_header, sizeof(h264_header)); /* h264_header = pps +sps*/
4 offset = sizeof(h264_header);
5 framesize = BufferChain_get(fInput.video_bufs, fTo + offset);
6 offset += framesize;
7 isFirstFrame = false;
8 printf(“this is the first fime\n”);
9 sleep(1);
10 }
11 else
12 {
13 framesize = BufferChain_get(fInput.video_bufs, fTo + offset);
14 offset += framesize;
15 }

SPS、PPS、IDR介绍相关推荐

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

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

  2. H264--NALU/SPS/PPS

    H264结构中,一个视频图像编码后的数据叫做一帧,一帧由一个片(slice)或多个片组成,一个片由一个或多个宏块(MB)组成. H264编码过程中的三种不同的数据形式: SODB        数据比 ...

  3. sps和pps一篇好的解释 H264码流中SPS PPS详解<转>

    https://blog.csdn.net/luzubodfgs/article/details/86775940 H264码流中NALU sps pps IDR帧的理解 https://blog.c ...

  4. 视频【编码】原理(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, ...

  5. 【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 封装 SPS / PPS 数据包 )

    文章目录 一. 基本封装数据格式说明 二. 封装 SPS PPS 数据总体说明 三. 封装头数据 四. 封装 SPS 数据 五. 封装 PPS 数据 六. 设置 RTMP 数据包其它参数 七. SPS ...

  6. H264帧的分析sps pps

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

  7. 给h264帧增加start code和sps/pps

    从音视频文件中读取数据,抽取其中的h264视频数据,并保存在文件中,如果想要此文件被播放器正常解码播放,还需要添加在每个帧之前添加start code,在每个关键帧前添加sps/pps. 播放器需要知 ...

  8. SPS PPS SEI

    转载自https://www.jianshu.com/p/6c532568be1c 海思不是有demo,存h264文件吗?你可以把数据导出来看看啊,只需要做个地址偏移就可以得到sps.pps了 nal ...

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

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

最新文章

  1. matlab内存管理(二)
  2. apache 模块编译选项
  3. 互联网开发(一) 并发基础知识
  4. Matlab之while循环语句
  5. unicode and utf-8
  6. mysql杨辉三角_两个经典的小例子:杨辉三角和水仙花
  7. Python数模笔记-Sklearn (1)介绍
  8. 黑色自适应简约个人主页引导页HTML源码
  9. Codeforces比赛规则梳理
  10. 上海个税系统代理服务器地址,上海个人所得税打印地点
  11. SSM项目实战之八:静态资源文件的整合
  12. Layui的下拉框样式失效问题
  13. 系统服务器cpu需求测算,服务器cpu占用率多少算正常
  14. Validity和setCustomVilidity
  15. 【Redis】数据结构的应用——GEO 【搜索“附近的餐馆”、在打车软件上叫车】
  16. 韭菜简史:快招加盟的致富骗局
  17. VMware tool 和window共享文件夹,被坑了许久!!!
  18. Chrome浏览器安装Adblock Plus插件拦截广告
  19. 在Win7中设置PPT放映时显示备注
  20. 《静态时序分析实用方法》第七章翻译

热门文章

  1. 热云数据全线能力介绍2021年8月
  2. 典型相关分析,奇异值分解,RRR(Reduced-Rank Regression)
  3. GSMA公布MWC19 巴塞罗那首批细节
  4. keepalived+nginx/mysql双主
  5. JZOJ_5845. 西西算数
  6. 100句催人奋进的人生格言
  7. C# dllimport
  8. YARN Federation的架构设计
  9. Ubuntu-内核安装及版本切换
  10. three 环绕旋转,卫星可以各个角度绕星球旋转