關於客戶端和服務器端live555的一點bug修改

  客戶端主要出錯信息:

  MultiFramedRTPSource error: Hit limit when reading incoming packet over TCP. Increase \"MAX_PACKET_SIZE\"

  RTCPInstance error: Hit limit [1450,1450] when reading incoming packet over TCP. Increase "maxRTCPPacketSize"

  live555源碼修改記錄

  服務器端:

  針對1080P高清H264碼率過大,需要修改live/mediaServer/DynamicRTSPServer.cpp文件中第117行

  OutPacketBuffer::maxSize = 1024*1024; // allow for some possibly large H.264 frames

  maxSize的值,具體大小可根據實際播放畫面質量和服務器打印的出錯信息修改

  針對服務器發送的RTP包出錯,發送時超出系統TCP buffer大小,需修改:live/liveMedia/RTPInterface.cpp sendDataOverTCP()函數

  修改爲

  makeSocketBlocking(socketNum);

  int sendSuccess = loopsend(socketNum,data,dataSize);

  makeSocketNonBlocking(socketNum);

  if(sendSuccess == dataSize)

  {

  return True;

  }

  else

  {

  printf("send false...........\n");

  return False;

  }

  需添加loopsend()函數

  int loopsend(int sock, u_int8_t const* buf, unsigned int sndsize)

  {

  int remian = sndsize;

  int sendlen = 0;

  int ret = 0;

  while(remian > 0)

  {

  ret=send(sock,buf+sendlen,remian,0);

  if(ret <= 0)

  {

  printf("ret = %d\n",ret);

  return ret;

  }

  sendlen += ret;

  remian -= ret;

  }

  return sndsize;

  }

  客戶端代碼健壯性加強

  修改live/liveMedia/RTPInterface.cpp 中tcpReadHandler1()函數

  在case AWAITING_SIZE2:中

  unsigned short size = (fSizeByte1<<8)|c;後添加RTP和RTCP包的大小判斷

  添加代碼如下:

  if(fStreamChannelId == 0x00)

  if(size > 20000) //lcy add 20000爲"MAX_PACKET_SIZE"值的大小(RTP包的最大值)

  {

  fTCPReadingState = AWAITING_DOLLAR;

  break;

  }

  if(fStreamChannelId == 0x01)

  if(size > 1450) //lcy add 1450爲"maxRTCPPacketSize"值的大小(RTCP包的大小)

  {

  fTCPReadingState = AWAITING_DOLLAR;

  break;

  }


轉自:http://www.whzlcx.com/details.htm?ID=18&did=662

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章