/*** 发送视频的sps和pps、vps信息** @param pps 存储视频的pps信息* @param pps_len 视频的pps信息长度* @param sps 存储视频的pps信息* @param sps_len 视频的sps信息长度* @param vps 存储视频的vps信息* @param vps_len 视频的vps信息长度** @成功则返回 1 , 失败则返回0*/
int SendVideoSpsPps(unsigned char *pps,int pps_len,unsigned char * sps,int sps_len,unsigned char* vps, int vps_len)
{RTMPPacket * packet=NULL;//rtmp包结构unsigned char * body=NULL;int i;packet = (RTMPPacket *)malloc(RTMP_HEAD_SIZE+1024);//RTMPPacket_Reset(packet);//重置packet状态memset(packet,0,RTMP_HEAD_SIZE+1024);packet->m_body = (char *)packet + RTMP_HEAD_SIZE;body = (unsigned char *)packet->m_body;int i = 0;body[i++] = 0x1C;body[i++] = 0x00;body[i++] = 0x00;body[i++] = 0x00;body[i++] = 0x00;body[i++] = 0x00;//general_profile_idc 8bitbody[i++] = sps[1];//general_profile_compatibility_flags 32 bitbody[i++] = sps[2];body[i++] = sps[3];body[i++] = sps[4];body[i++] = sps[5];// 48 bit NUll nothing deal in rtmpbody[i++] = sps[6];body[i++] = sps[7];body[i++] = sps[8];body[i++] = sps[9];body[i++] = sps[10];body[i++] = sps[11];//general_level_idcbody[i++] = sps[12];// 48 bit NUll nothing deal in rtmpbody[i++] = 0x00;body[i++] = 0x00;body[i++] = 0x00;body[i++] = 0x00;body[i++] = 0x00;body[i++] = 0x00;//bit(16) avgFrameRate;body[i++] = 0x00;body[i++] = 0x00;/* bit(2) constantFrameRate; *//* bit(3) numTemporalLayers; *//* bit(1) temporalIdNested; */body[i++] = 0x00;/* unsigned int(8) numOfArrays; 03 */body[i++] = 0x03;printf("HEVCDecoderConfigurationRecord data = %s\n", body);body[i++] = 0x20;  //vps 32body[i++] = (1 >> 8) & 0xff;body[i++] = 1 & 0xff;body[i++] = (vps_len >> 8) & 0xff;body[i++] = (vps_len) & 0xff;memcpy(&body[i], vps, vps_len);i += vps_len;//spsbody[i++] = 0x21; //sps 33body[i++] = (1 >> 8) & 0xff;body[i++] = 1 & 0xff;body[i++] = (sps_len >> 8) & 0xff;body[i++] = sps_len & 0xff;memcpy(&body[i], sps, sps_len);i += sps_len;//ppsbody[i++] = 0x22; //pps 34 body[i++] = (1 >> 8) & 0xff;body[i++] = 1 & 0xff;body[i++] = (pps_len >> 8) & 0xff;body[i++] = (pps_len) & 0xff;memcpy(&body[i], pps, pps_len);i += pps_len;packet->m_packetType = RTMP_PACKET_TYPE_VIDEO;packet->m_nBodySize = i;packet->m_nChannel = 0x04;packet->m_nTimeStamp = 0;packet->m_hasAbsTimestamp = 0;packet->m_headerType = RTMP_PACKET_SIZE_MEDIUM;packet->m_nInfoField2 = m_pRtmp->m_stream_id;/*调用发送接口*/int nRet = RTMP_SendPacket(m_pRtmp,packet,TRUE);free(packet);    //释放内存return nRet;
}/*** 发送H265数据帧** @param data 存储数据帧内容* @param size 数据帧的大小* @param bIsKeyFrame 记录该帧是否为关键帧* @param nTimeStamp 当前帧的时间戳** @成功则返回 1 , 失败则返回0*/int SendH265Packet(unsigned char *data,unsigned int size,int bIsKeyFrame,unsigned int nTimeStamp)
{  if(data == NULL && size<11){  return false;  }  unsigned char *body = (unsigned char*)malloc(size+9);  memset(body,0,size+9);int i = 0; if(bIsKeyFrame){  body[i++] = 0x1C;// 1:Iframe  7:AVC   这里改为C(12)nginx转发必须的SendVideoSpsPps(metaData.Pps,metaData.nPpsLen,metaData.Sps,metaData.nSpsLen,metaData.Vps,metaData.nVpsLen);}else{  body[i++] = 0x2C;// 2:Pframe  7:AVC   }  body[i++] = 0x01;// AVC NALU   body[i++] = 0x00;body[i++] = 0x00;body[i++] = 0x00;// NALU size   body[i++] = size >> 24 & 0xff;body[i++] = size >> 16 & 0xff;body[i++] = size >> 8 & 0xff;body[i++] = size & 0xff;// NALU data   memcpy(&body[i], data, size);int bRet = SendPacket(RTMP_PACKET_TYPE_VIDEO,body,i+size,nTimeStamp);  free(body);  return bRet;
} 

https://blog.csdn.net/qq_33795447/article/details/89457581

rtmp协议封装h264与h265打包flv发送相关推荐

  1. RTMP协议封装H264和H265协议详解

    RTMP协议封装H264和H265协议详解 文章目录 RTMP协议封装H264和H265协议详解 1 RTMP和FLV 2 RTMP协议封装H264视频流 2.1 RTMP发送AVC sequence ...

  2. RTP协议封装H264/H265/AAC

    <RTSP实时音视频传输介绍> 目录 一.前言 二.RTP基本格式介绍 1.RTP 固定头 2.RTP 扩展头 3.RTP 载荷 三.RTP封装H264 1.封装包类型 四.RTP封装H2 ...

  3. 按照RFC3984协议实现H264视频RTP打包(附源代码)

    2011-03-30 10:34:44|  分类: 流媒体 |  标签: |字号大中小 订阅 参考链接:http://topic.csdn.net/u/20090725/11/5FBC75B0-109 ...

  4. RTMP协议封装AAC(ADTS)格式详解

    第一部分 AAC ADTS格式分析 AAC音频格式分析 AAC音频格式有ADIF和ADTS: ADIF:Audio Data Interchange Format 音频数据交换格式.这种格式的特征是可 ...

  5. RTMP协议及H264文件格式分析(经典,非常棒)

    https://blog.csdn.net/gesanghua601/article/details/81981898

  6. C语言从头开始写一次hls视频转发服务器,支持H264和H265

    由于2020年后,谷歌浏览器将不再支持flashplay了,从而网页视频的播放,在谷歌浏览器上,不得不像其他办法,而hls是一个不错的方式,前端H5有现成的js标签,能直接支持苹果的hls,并且不用下 ...

  7. (转)rtmp协议简单解析以及用其发送h264的flv文件

    Adobe公司太坑人了,官方文档公布的信息根本就不全,如果只按照他上面的写的话,是没法用的.按照文档上面的流程,server和client连接之后首先要进行握手,握手成功之后进行一些交互,其实就是交互 ...

  8. 流媒体-RTMP协议-rtmpdump-flv封装解析(一)

    流媒体-RTMP协议-rtmpdump-flv封装解析(一) 流媒体-RTMP协议-librtmp库学习(二) 流媒体-RTMP协议-librtmp库学习-c++多线程实现rtmp推流flv文件(三) ...

  9. ffmpeg实现g711音频和H264,H265封装mp4(整理,非原创)

    效果:实现G711和H264,H265存为mp4,录像文件VLC和暴风影音可播放 注:播放mp4音视频没问题,但使用mp4分析工具分析 Sample size有问题(待解决) 修改1: (资料来自:g ...

最新文章

  1. 闰年流程图(18网三袁昳)
  2. 做人工智能必看的45篇论文(附下载地址)
  3. 【源代码】基于Android和蓝牙的单片机温度採集系统
  4. Asic设计参考工具与参考文档
  5. js1:对象的学习,构造函数,继承构造函数【使用教材:JavaScript深度剖析第2版】...
  6. s插件——SlimScroll滚动美化插件
  7. Tomcat 的类加载机制
  8. python最快的循环方法_【转】【Python效率】五种Pandas循环方法效率对比
  9. C++ 函数参数3种传值方式(以交换两个数为例)
  10. linux 自动安装mysql_Linux安装mysql
  11. 两个栈实现一个队列/两个队列实现一个栈
  12. LeetCode 1768. 交替合并字符串
  13. mysql field flags_PHPmysql_field_flags()实例教程_PHP教程
  14. 通用easyui查询页面组件
  15. 【转载】oracle normal、sys、system、sysdba、sysoperdba的区别
  16. pandas重置索引的几种方法探究
  17. java序列化与深度克隆
  18. XenCenter为虚拟机C盘扩容
  19. angularjs textarea 剩余字数统计
  20. FPGA音频录音,WM8731音频采集存储DDR3,基于米联客FDMA实现

热门文章

  1. mysql 注入用例_mysql-常用注入渗透手法
  2. java if and_关于java:if语句中可以有两个条件吗
  3. ie浏览器在线使用_全球浏览器5月份市场份额公布!Chrome和Edge浏览器迎来新一轮“撕X”大战...
  4. 数据结构实验之栈与队列五:下一较大值(一)
  5. OpenCV学习笔记大集锦
  6. 数据结构与算法(4)——优先队列和堆
  7. (五)Java工具类ArrayUtils详解
  8. Tomcat原理详解和各种集群的实现
  9. Java虚拟机学习(2):垃圾收集算法
  10. K-means Algorithm 聚类算法