手动实现如何从H264流中提取SPS/PPS信息
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信息的更多相关文章
- (原)关于获取ffmpeg解析rtsp流sdp中带有sps,pps的情况
转载请注明出处:http://www.cnblogs.com/lihaiping/p/6612511.html 今天同事准备在android下使用ffmpeg来获取rtsp流,问我如何获取获取sps ...
- librtmp接收flv流中提取h264码流:根据多个资料汇总
rtmpdump可以下载rtmp流并保存成flv文件.如果要对流中的音频或视频单独处理,需要根据flv协议分别提取.简单修改rtmpdump代码,增加相应功能.1 提取音频:rtmpdump程序在Do ...
- 从路由器镜像中提取uImage头信息
uImage header为64字节,文件头为27 05 19 56 hexdump -C a.bin | grep "27 05 19 56" 或者 hd aa.bin | gr ...
- 嵌入式 H264中的SPS、PPS提取与作用
使用RTP传输H264的时候,需要用到sdp协议描述,其中有两项:Sequence Parameter Sets (SPS) 和Picture Parameter Set (PPS)需要用到,那么这两 ...
- H264中的SPS、PPS提取与作用
牛逼的视频会议网站:http://wmnmtm.blog.163.com/blog/#m=0 ++++++++++++++++++++++++++++++++++++++++++++++++++++ ...
- H264中的SPS、PPS提取与作用<转>
牛逼的视频会议网站:http://wmnmtm.blog.163.com/blog/#m=0 ++++++++++++++++++++++++++++++++++++++++++++++++++++ ...
- h264 流、帧结构
H264元素的分层结构 H.264编码器输出的Bit流中,每个Bit都隶属于某个句法元素.句法元素被组织成有层次的结构,分别描述各个层次的信息. 在H.264 中,句法元素共被组织成 序列.图像.片 ...
- 从输出日志中提取接口的入参和返回做为用例导入到excel中
1 背景 接口用例已经在项目中的yml文件中编写,但是yml文件不能做为交付文档用,本文对工作中从接口输出日志中提取用例信息,并导入到excel文件中做了总些 2 工具 idea,notepad+ ...
- 嵌入式 H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流
一.MP4格式基本概念 MP4格式对应标准MPEG-4标准(ISO/IEC14496) 二.MP4封装格式核心概念 1 MP4封装格式对应标准为 ISO/IEC 14496-12(信息技术 视听对象 ...
随机推荐
- echarts 重新渲染(重新绘制,重新加载数据)等
- 各大ACM OJ网址
做快乐的程序员 以你的条件,你不必追求优秀,但你可以做到良好. 各大OJ网址 ACM OJ Collection(排名不分先后): 中国:(China) 华东地区: 浙江: 杭州电子科技大学(HDU) ...
- kubernetes1.5即将发布
Kubernetes1.5将会在12月9日正式GA 目前已经进行到了第三阶段后期:从2016年11月22日到2016年12月8日 建立1.5发布分支 所有修复bug的代码都合入1.5发布分支中 将1. ...
- 深入剖析Redis RDN持久化机制
rdb是redis保存内存数据到磁盘数据的其中一种方式(另一种是AOF).Rdb的主要原理就是在某个时间点把内存中的所有数据的快照保存一份到磁盘上.在条件达到时通过fork一个子进程把内存中的数据写到 ...
- python实现贝叶斯网络的概率推导(Probabilistic Inference)
写在前面 这是HIT2019人工智能实验三,由于时间紧张,代码没有进行任何优化,实验算法仅供参考. 实验要求 实现贝叶斯网络的概率推导(Probabilistic Inference) 具体实验指导书 ...
- Django框架Day3------之Models
一.Django models字段类型清单: AutoField:一个自动递增的整型字段,添加记录时它会自动增长.你通常不需要直接使用这个字段:如果你不指定主键的话,系统会自动添加一个主键字段到你的m ...
- Element UI table组件源码分析
本文章从如下图所示的最基本的table入手,分析table组件源代码.本人已经对table组件原来的源码进行削减,源码点击这里下载.本文只对重要的代码片段进行讲解,推荐下载代码把项目运行起来,跟着文章 ...
- console 中的格式化打印(占位符),和样式定义
格式化打印 Gecko 9.0 (Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6) 首次发布对string substitutions的支持.你可以在传递给 ...
- Vijos1775 CodeVS1174 NOIP2009 靶形数独
靶形数独 描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z博士请教, Z 博士拿出了他最近发 ...
- 【POJ 3261】Milk Patterns
[链接]h在这里写链接 [题意] 给你一个长度为n的序列. 问你能不能在其中找到一个最长的子串. 这个子串至少出现了k次. [题解] 长度越长,就越不可能出现k次 后缀数组+二分. N最大为2 ...