首页 » 流媒体 » live555 » 正文

live555 socket buffer修改

点播 LIVE SERVER

虽然默认 50K按理说是够的,但实际上遇到大码流时依然会丢包,并不是网络问题,而是socket buff不够大.
从网上得到的信息为修改increaseSendBufferTo 它的参数, 不过有很多地方调用它,主要是修改liveMedia\RTPInterface.cpp中的increaseSendBufferTo(envir(), fGS->socketNum(), 50*1024);
至于能不能不改源代码,稍后研究

组播 LIVE SERVER

好像没这个问题

rtsp client

void setupNextSubsession(RTSPClient *rtspClient)
{
  UsageEnvironment &env = rtspClient->envir();                 // alias
  StreamClientState &scs = ((ourRTSPClient *)rtspClient)->scs; // alias
  ourRTSPClient *myRtspClient = (ourRTSPClient *)rtspClient;
  scs.subsession = scs.iter->next();
  if (scs.subsession != NULL)
  {
    if (!scs.subsession->initiate())
    {
      env << *rtspClient << "Failed to initiate the \"" << *scs.subsession << "\" subsession: " << env.getResultMsg() << "\n";
      setupNextSubsession(rtspClient); // give up on this subsession; go to the next one
    }
    else
    { //重新配置 socket buffer大小。
      if (scs.subsession->rtpSource() != NULL)
      {
        //unsigned newBufferSize = 1*1024*1024;
        //unsigned const thresh = 1000000; // 1 second
        //scs.subsession->rtpSource()->setPacketReorderingThresholdTime(thresh);
        int socketNum = scs.subsession->rtpSource()->RTPgs()->socketNum();
        //unsigned curBufferSize = getReceiveBufferSize(env, socketNum);
        unsigned curBufferSize = setReceiveBufferTo(env, socketNum, myRtspClient->apiClass->socketRevBuffer);
        if (curBufferSize < myRtspClient->apiClass->socketRevBuffer)
        {
          env << "socket Buff is small than set,check system set! \r\n";
        }
      }
      env << *rtspClient << "Initiated the \"" << *scs.subsession << "\" subsession (";
      if (scs.subsession->rtcpIsMuxed())
      {
        env << "client port " << scs.subsession->clientPortNum();
      }
      else
      {
        env << "client ports " << scs.subsession->clientPortNum() << "-" << scs.subsession->clientPortNum() + 1;
      }
      env << ")\n";
      // Continue setting up this subsession, by sending a RTSP "SETUP" command:
      rtspClient->sendSetupCommand(*scs.subsession, continueAfterSETUP, False, REQUEST_STREAMING_OVER_TCP);
    }
    return;
  }

  // We've finished setting up all of the subsessions.  Now, send a RTSP "PLAY" command to start the streaming:
  if (scs.session->absStartTime() != NULL)
  {
    // Special case: The stream is indexed by 'absolute' time, so send an appropriate "PLAY" command:
    rtspClient->sendPlayCommand(*scs.session, continueAfterPLAY, scs.session->absStartTime(), scs.session->absEndTime());
  }
  else
  {
    scs.duration = scs.session->playEndTime() - scs.session->playStartTime();
    rtspClient->sendPlayCommand(*scs.session, continueAfterPLAY);
  }
}

发表评论