live555 使用testRTSPClient 接收h264记录

来源:互联网 发布:美白系列水乳 知乎 编辑:程序博客网 时间:2024/06/04 18:13

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

使用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();}


1 0
原创粉丝点击