28181流媒体,ps流解析,nalu分析,出来的数据封装成rtmp包发送rtmp,此处仅关心rtmp发送问题

这个连接有完整的调用librtmp发送h264的代码,但是里面发送h264包时候有问题,没有区分包类型
https://blog.csdn.net/godspeed513/article/details/8972947

sps,pps包的构建可以参考这个连接

https://blog.csdn.net/u011003120/article/details/78378632

rtmp包的结构,可以参考这个连接,讲的很清楚

https://blog.csdn.net/dqxiaoxiao/article/details/94820599

h264 的nalu分析

https://blog.csdn.net/xiaoluer/article/details/53462894

int SendPacket(unsigned int nPacketType,unsigned int size,unsigned int nTimestamp)
{if(m_pRtmp == NULL){return FALSE;}m_RTMPPacket.m_packetType  = nPacketType;//m_RTMPPacket.m_hasAbsTimestamp = 0;m_RTMPPacket.m_nChannel    = 0x04;  m_RTMPPacket.m_headerType  = RTMP_PACKET_SIZE_LARGE;  m_RTMPPacket.m_nTimeStamp  = nTimestamp;  m_RTMPPacket.m_nInfoField2 = m_pRtmp->m_stream_id;m_RTMPPacket.m_nBodySize   = size;int nRet = RTMP_SendPacket(m_pRtmp,&m_RTMPPacket,0);return nRet;
}//过滤sei包,sei,辅助增强信息
if (packet.type == NaluPacket::NALU_SEI)
{return;
}//sps,pps一般成对出现
if (packet.type == NaluPacket::NALU_SPS)
{//sps, sequenceParameterSetLengthbody[0] = 0x17;body[1] = 0x00;//avc packet type, 0,sequeue header, 1, nalu,视频帧数据为1,其他为0body[2] = 0x00;//3个字节,composition time,当上个字节包类型为0时body[3] = 0x00;//这3个字节也为0body[4] = 0x00;// 如果包类型为0, 此处是AVCDecoderConfigurationRecord结构body[5] = 0x01;//版本号,固定为1body[6] = *(packet.data + 1);//AVCProfileIndication,sps信息里面去除头部信息和sps标志后的第一个字节//sps标志为0x67body[7] = *(packet.data + 2);//profile_compatibility,h264 profile支持级别body[8] = *(packet.data + 3);//AVCLevelIndication, level_idc syntax element,默认值21//表示支持的最大分辨率和采样率,21为HHR,5068.8k samples/second//最大值为51,4096*2304, 251658.24k samples/secondbody[9] = 0xff;   //高6位保留,默认为'111111', 低2位表示lengthSizeMinusOnebody[10] = 0xe1; //高3位保留,默认为'111', 低5位表示numOfSequenceParameterSets,//sequeue参数设置的格式,此处为1,即只有1个spsbody[11] = (size >> 8) & 0xff;   //sequenceParameterSetLength,2个字节,sps长度body[12] = size & 0xff;bodyLength = 13;memcpy(&body[13], packet.data, size);//sps内容bodyLength += size;m_setsps = 1;
}
else if (packet.type == NaluPacket::NALU_PPS)
{/*pps,PictureParameterSets*/body[bodyLength++] = 0x01;//numOfPictureParameterSets,pps个数body[bodyLength++] = (size >> 8) & 0xff;//pictureParameterSetLength,pps长度,2个字节body[bodyLength++] = (size) & 0xff;memcpy(&body[bodyLength], packet.data, size);//pictureParameterSetNaLUUnit,pps内容bodyLength += size;//如果profile_idc为100,110,122,144时,需要填充sequenceParameterSetExtLength,即sps扩展//sps扩展,nalu 类型为13memcpy(body, body, bodyLength);//发送数据包
}if(packet.type == 5)
{body[i++] = 0x17;// 1:Iframe  7:AVC
}
else
{body[i++] = 0x27;// 2:Pframe  7:AVC
}body[i++] = 0x01;// AVC NALU
body[i++] = 0x00;
body[i++] = 0x00;
body[i++] = 0x00;// NALU size
body[i++] = size>>24;
body[i++] = size>>16;
body[i++] = size>>8;
body[i++] = size&0xff;;// NALU data
memcpy(&(body[i]),packet.data,size);
//发送数据包

rtmp 发送h264包,主要是sps,pps,i帧和非i帧相关推荐

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

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

  2. H264码流中SPS PPS

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

  3. CMSampleBufferRef获取h264 char*数据及sps/pps

    直接看代码: CMBlockBufferRef blockBuffer = CMSampleBufferGetDataBuffer(sampleBuf);size_t len_offset = 0 , ...

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

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

  5. 目前最好的,以rtmp发送264到red5服务器的代码,darkdragonking亲测可用--《到H264视频通过RTMP直播》

    前面的文章中提到了通过RTSP(Real Time Streaming Protocol)的方式来实现视频的直播,但RTSP方式的一个弊端是如果需要支持客户端通过网页来访问,就需要在在页面中嵌入一个A ...

  6. 【Android RTMP】x264 编码器初始化及设置 ( 获取 x264 编码参数 | 编码规格 | 码率 | 帧率 | B帧个数 | 关键帧间隔 | 关键帧解码数据 SPS PPS )

    文章目录 安卓直播推流专栏博客总结 一. x264 编码器参数设置引入 二. 获取 x264 编码器参数 三. 设置 x264 编码器编码规格 四. 设置 x264 编码器编码图像数据格式 五. 设置 ...

  7. H264帧的分析sps pps

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

  8. H264码流中SPS、PPS详解

    1 SPS和PPS从何处而来? 2 SPS和PPS中的每个参数起什么作用? 3 如何解析SDP中包含的H.264的SPS和PPS串? 1 客户端抓包 在做客户端视频解码时,一般都会使用Wireshar ...

  9. 从RTSP协议SDP数据中获得H264中的的SPS、PPS

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

最新文章

  1. python编程 语言-Python——最美丽的编程语言
  2. 函数式编程语言python-Python——五分钟理解函数式编程与闭包
  3. 【pointnet++点云识别】基于pointnet++的点云地理数据识别的MATLAB仿真
  4. Job make U funck Uself!!!
  5. for(auto c:s)与for(auto c:s)
  6. Comet:基于 HTTP 长连接的“服务器推”技术 (实例)
  7. linux内存管理(十二)-直接页面回收
  8. Linux之find常用命令汇总
  9. Microsoft Visual Studio Ultimate 2012 ISO 映像
  10. python字符串格式化符号含义及转义字符含义
  11. qtp如何软件测试,QTP测试流程
  12. 安装VMware16教程
  13. http://localhost:8080/login的密码和账号的问题
  14. 解决前端 js 中使用 append 动态追加元素标签后,事件和css样式异常问题
  15. 服务器编程之路:进无止境(下)
  16. 时间记录APP———Time Meter
  17. 用于自然语言理解的多任务深度神经网络
  18. “双减”政策下的少儿编程市场:前8月融资12起,资本加持下何时跑出“独角兽”?...
  19. uva 10306 简单DP
  20. python画星空的程序_Python画好看的星空图

热门文章

  1. linux 查看mac地址 的方法
  2. 学用circle画圆形。
  3. 如何在线打开Xmind文件 — 百度脑图在线工具
  4. android alert
  5. 解决谷歌浏览器提示您的链接不是私密链接
  6. python27是什么文件夹可以删除吗_python如何跳过错误继续运行,同时删除产生错误的文档...
  7. 程序员应该知道的国外技术网站
  8. 前端系列第10集-实战篇
  9. 大数据智能交通未来会是怎样的交通状况?
  10. 字体凹陷效果html,在PS中,想做凹进去的效果,怎么做?例如文字凹进木板中?...