live555 使用testRTSPClient 接收h264记录

参考自网络,自己测试通过。特记录如下:

使用live555 客户端 testRTSPClient.cpp修改如下:

  void DummySink::afterGettingFrame(unsigned frameSize, unsigned numTruncatedBytes,
 struct timeval presentationTime, unsigned /*durationInMicroseconds*/) {
  // We've just received a frame of data.  (Optionally) print out information about it:
#ifdef DEBUG_PRINT_EACH_RECEIVED_FRAME
  if (fStreamId != NULL) envir() << "Stream \"" << fStreamId << "\"; ";
  envir() << fSubsession.mediumName() << "/" << fSubsession.codecName() << ":\tReceived " << frameSize << " bytes";
  if (numTruncatedBytes > 0) envir() << " (with " << numTruncatedBytes << " bytes truncated)";
  char uSecsStr[6+1]; // used to output the 'microseconds' part of the presentation time
  sprintf(uSecsStr, "%06u", (unsigned)presentationTime.tv_usec);
  envir() << ".\tPresentation time: " << (unsigned)presentationTime.tv_sec << "." << uSecsStr;
  if (fSubsession.rtpSource() != NULL && !fSubsession.rtpSource()->hasBeenSynchronizedUsingRTCP()) {
    envir() << "!"; // mark the debugging output to indicate that this presentation time is not RTCP-synchronized
  }
  envir() << "\n";
#endif
  
  //todo one frame
  //save to file
  if(!strcmp(fSubsession.mediumName(), "video"))
  {
 if(firstFrame)
 {
 unsigned int num;
 SPropRecord *sps = parseSPropParameterSets(fSubsession.fmtp_spropparametersets(), num);
 // For H.264 video stream, we use a special sink that insert start_codes:
 struct timeval tv= {0,0};
 unsigned char start_code[4] = {0x00, 0x00, 0x00, 0x01};
 FILE *fp = fopen("test.264", "a+b");
 if(fp)
 {
 fwrite(start_code, 4, 1, fp);
 fwrite(sps[0].sPropBytes, sps[0].sPropLength, 1, fp);
 fwrite(start_code, 4, 1, fp);
 fwrite(sps[1].sPropBytes, sps[1].sPropLength, 1, fp);
 fclose(fp);
 fp = NULL;
 }


 delete [] sps;


 firstFrame = False;
 }


 char *pbuf = (char *)fReceiveBuffer;
 char head[4] = {0x00, 0x00, 0x00, 0x01};
 FILE *fp = fopen("test.264", "a+b");
 if(fp)
 {
 fwrite(head, 4, 1, fp);
 fwrite(fReceiveBuffer, frameSize, 1, fp);
 fclose(fp);
 fp = NULL;
 }
  }


  // Then continue, to request the next frame of data:
  continuePlaying();
}


  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前进的蜗牛啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值