点播 LIVE SERVER
虽然默认 50K按理说是够的,但实际上遇到大码流时依然会丢包,并不是网络问题,而是socket buff不够大.
从网上得到的信息为修改increaseSendBufferTo
它的参数, 不过有很多地方调用它,主要是修改liveMedia\RTPInterface.cpp
中的increaseSendBufferTo(envir(), fGS->socketNum(), 50*1024);
至于能不能不改源代码,稍后研究
组播 LIVE SERVER
好像没这个问题
rtsp client
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
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); } } |