1,代码比较简单,可以直接用了。流的第一个NALU一定是SPS

void get_sps_pps_nalu(uint8_t *data, int len, std::vector<uint8_t> &sps, std::vector<uint8_t> &pps)
{
const uint8_t* pkt_bgn = data;
const uint8_t* pkt_end = pkt_bgn + len;
const uint8_t* pbgn = pkt_bgn;
const uint8_t* pend = pkt_end;
while (pbgn < pkt_end) {
pbgn = find_next_nal(pbgn, pkt_end);
if (pbgn == pkt_end) {
continue;
} else {
while (*pbgn == ) ++pbgn; //skip all 0x00
++pbgn; //skip 0x01
}
pend = find_next_nal(pbgn, pkt_end); if (((*pbgn) & 0x1F) == 0x07) { //SPS NAL
std::cout<<"find sps nal"<<std::endl;
sps.assign(pbgn, pbgn + static_cast<int>(pend - pbgn));
}
if (((*pbgn) & 0x1F) == 0x08) { //PPS NAL
std::cout<<"find pps nal"<<std::endl;
pps.assign(pbgn, pbgn + static_cast<int>(pend - pbgn));
}
pbgn = pend;
}
}
const uint8_t* find_next_nal(const uint8_t* start, const uint8_t* end)
{
const uint8_t *p = start;
/* Simply lookup "0x000001" or "0x00000001" pattern */
while (p <= end - ) {
if (p[] == 0x00) {
if (p[] == 0x00) {
if ((p[] == 0x01) || (p[] == 0x00 && p[] == 0x01)) {
return p;
} else {
p += ;
}
} else {
p += ;
}
} else {
++p;
}
}
return end;
}
int main()
H264FramefromCam(data, &len);
get_sps_pps_nalu((uint8_t *)data, len, pps, sps);
return ;
}

手动实现如何从H264流中提取SPS/PPS信息的更多相关文章

  1. (原)关于获取ffmpeg解析rtsp流sdp中带有sps,pps的情况

     转载请注明出处:http://www.cnblogs.com/lihaiping/p/6612511.html 今天同事准备在android下使用ffmpeg来获取rtsp流,问我如何获取获取sps ...

  2. librtmp接收flv流中提取h264码流:根据多个资料汇总

    rtmpdump可以下载rtmp流并保存成flv文件.如果要对流中的音频或视频单独处理,需要根据flv协议分别提取.简单修改rtmpdump代码,增加相应功能.1 提取音频:rtmpdump程序在Do ...

  3. 从路由器镜像中提取uImage头信息

    uImage header为64字节,文件头为27 05 19 56 hexdump -C a.bin | grep "27 05 19 56" 或者 hd aa.bin | gr ...

  4. 嵌入式 H264中的SPS、PPS提取与作用

    使用RTP传输H264的时候,需要用到sdp协议描述,其中有两项:Sequence Parameter Sets (SPS) 和Picture Parameter Set (PPS)需要用到,那么这两 ...

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

    牛逼的视频会议网站:http://wmnmtm.blog.163.com/blog/#m=0 ++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  6. H264中的SPS、PPS提取与作用<转>

    牛逼的视频会议网站:http://wmnmtm.blog.163.com/blog/#m=0 ++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  7. h264 流、帧结构

    H264元素的分层结构 H.264编码器输出的Bit流中,每个Bit都隶属于某个句法元素.句法元素被组织成有层次的结构,分别描述各个层次的信息. 在H.264 中,句法元素共被组织成  序列.图像.片 ...

  8. 从输出日志中提取接口的入参和返回做为用例导入到excel中

    1  背景 接口用例已经在项目中的yml文件中编写,但是yml文件不能做为交付文档用,本文对工作中从接口输出日志中提取用例信息,并导入到excel文件中做了总些 2  工具 idea,notepad+ ...

  9. 嵌入式 H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流

    一.MP4格式基本概念 MP4格式对应标准MPEG-4标准(ISO/IEC14496) 二.MP4封装格式核心概念 1  MP4封装格式对应标准为 ISO/IEC 14496-12(信息技术 视听对象 ...

随机推荐

  1. PhpSpreadsheet处理表格2

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  2. PHPCMS网站迁移过程后,添加内容 报500错误解决方案

    问题出现原因:1.网站迁移过程中,上传下载文件时文件丢失  2.PHPCMS源码更新升级 解决方法 1.可以到官方下载最新版源码,替换过去.如果对源码有改动,需要先保存改动过的文件,替换过去之后,再替 ...

  3. R语言与非参数统计(核密度估计)

    R语言与非参数统计(核密度估计) 核密度估计是在概率论中用来估计未知的密度函数,属于非参数检验方法之一,由Rosenblatt (1955)和Emanuel Parzen(1962)提出,又名Parz ...

  4. Mybatis中example类的使用

    要使用example类,先要在项目中导入mybatis.mapper的jar包. Mapper接口中包含了单表的增删改查以及分页功能. 给出实例: CountryMappermapper = sqlS ...

  5. 阿里云发布敏感数据保护产品SDDP,数据贴身防护实现“外防内控”

    数据安全问题,尤其是个人信息保护问题,一直是所有企业和个人关注的重点问题,7月10日,阿里云针对云上企业正式发布一款敏感数据保护产品SDDP(Sensitive Data Detection and ...

  6. SWF在线绘本批量制作高质量PDF的新方法(重点在批量制作)

    SWF在线绘本批量制作高质量PDF的新方法(重点在批量制作) 2012-12-21  未来决定...       http://www.ebama.net/thread-107643-1-1.html ...

  7. 【Leetcode链表】分隔链表(86)

    题目 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = 1->4 ...

  8. nodeJs学习-08 cookie、session

    http-无状态的:两次访问之间,无区别,cookie可解决 cookie:在浏览器保存一些数据,每次请求都会带过来: 弊端:可以查看修改,并不安全.大小有限(4K) 读取--cookie-parse ...

  9. php代码在模板页的活用

  10. LeetCode99 Recover Binary Search Tree

    Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...