rtmp 发送h264包,主要是sps,pps,i帧和非i帧
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帧相关推荐
- sps和pps一篇好的解释 H264码流中SPS PPS详解<转>
https://blog.csdn.net/luzubodfgs/article/details/86775940 H264码流中NALU sps pps IDR帧的理解 https://blog.c ...
- H264码流中SPS PPS
转载地址:https://www.cnblogs.com/wainiwann/p/7477794.html 1 SPS和PPS从何处而来? 2 SPS和PPS中的每个参数起什么作用? 3 如何解析SD ...
- CMSampleBufferRef获取h264 char*数据及sps/pps
直接看代码: CMBlockBufferRef blockBuffer = CMSampleBufferGetDataBuffer(sampleBuf);size_t len_offset = 0 , ...
- 【Android RTMP】RTMPDump 封装 RTMPPacket 数据包 ( 封装 SPS / PPS 数据包 )
文章目录 一. 基本封装数据格式说明 二. 封装 SPS PPS 数据总体说明 三. 封装头数据 四. 封装 SPS 数据 五. 封装 PPS 数据 六. 设置 RTMP 数据包其它参数 七. SPS ...
- 目前最好的,以rtmp发送264到red5服务器的代码,darkdragonking亲测可用--《到H264视频通过RTMP直播》
前面的文章中提到了通过RTSP(Real Time Streaming Protocol)的方式来实现视频的直播,但RTSP方式的一个弊端是如果需要支持客户端通过网页来访问,就需要在在页面中嵌入一个A ...
- 【Android RTMP】x264 编码器初始化及设置 ( 获取 x264 编码参数 | 编码规格 | 码率 | 帧率 | B帧个数 | 关键帧间隔 | 关键帧解码数据 SPS PPS )
文章目录 安卓直播推流专栏博客总结 一. x264 编码器参数设置引入 二. 获取 x264 编码器参数 三. 设置 x264 编码器编码规格 四. 设置 x264 编码器编码图像数据格式 五. 设置 ...
- H264帧的分析sps pps
帧格式 H264帧由NALU头和NALU主体组成. NALU头由一个字节组成,它的语法如下: +---------------+ |0|1|2|3|4|5|6|7| +-+-+ ...
- H264码流中SPS、PPS详解
1 SPS和PPS从何处而来? 2 SPS和PPS中的每个参数起什么作用? 3 如何解析SDP中包含的H.264的SPS和PPS串? 1 客户端抓包 在做客户端视频解码时,一般都会使用Wireshar ...
- 从RTSP协议SDP数据中获得H264中的的SPS、PPS
1. 如何解析SDP中包含的H.264的SPS和PPS串 SDP中的H.264的SPS和PPS串,包含了初始化H.264解码器所需要的信息参数,包括编码所用的profile,level,图像的宽和高, ...
最新文章
- python编程 语言-Python——最美丽的编程语言
- 函数式编程语言python-Python——五分钟理解函数式编程与闭包
- 【pointnet++点云识别】基于pointnet++的点云地理数据识别的MATLAB仿真
- Job make U funck Uself!!!
- for(auto c:s)与for(auto c:s)
- Comet:基于 HTTP 长连接的“服务器推”技术 (实例)
- linux内存管理(十二)-直接页面回收
- Linux之find常用命令汇总
- Microsoft Visual Studio Ultimate 2012 ISO 映像
- python字符串格式化符号含义及转义字符含义
- qtp如何软件测试,QTP测试流程
- 安装VMware16教程
- http://localhost:8080/login的密码和账号的问题
- 解决前端 js 中使用 append 动态追加元素标签后,事件和css样式异常问题
- 服务器编程之路:进无止境(下)
- 时间记录APP———Time Meter
- 用于自然语言理解的多任务深度神经网络
- “双减”政策下的少儿编程市场:前8月融资12起,资本加持下何时跑出“独角兽”?...
- uva 10306 简单DP
- python画星空的程序_Python画好看的星空图