| | |
| | | // Define the size of the buffer that we'll use: |
| | | #define DUMMY_SINK_RECEIVE_BUFFER_SIZE 1920*1080*3//#todo |
| | | |
| | | #define INCREASE_RECEIVE_BUFFER_TO 8000000 |
| | | |
| | | // If you don't want to see debugging output for each received frame, then comment out the following line: |
| | | //#define DEBUG_PRINT_EACH_RECEIVED_FRAME 1 |
| | | //#define DEBUG_PRINT_NPT 1 |
| | |
| | | |
| | | scs.subsession = scs.iter->next(); |
| | | if (scs.subsession != NULL) |
| | | { |
| | | if (_ourRTSPClient->desiredPortNum != 0) |
| | | { |
| | | if (_ourRTSPClient->desiredPortNum != 0) |
| | | { |
| | | scs.subsession->setClientPortNum(_ourRTSPClient->desiredPortNum); |
| | | _ourRTSPClient->desiredPortNum += 2; |
| | | } |
| | | |
| | | if (!scs.subsession->initiate()) |
| | | { |
| | | LOG_ERROR << *rtspClient << "Failed to initiate the \"" << *scs.subsession << "\" subsession: " << env.getResultMsg() << LOG_ENDL; |
| | | setupNextSubsession(rtspClient); // give up on this subsession; go to the next one |
| | | } |
| | | else |
| | | { |
| | | LOG_INFO << *rtspClient << "Initiated the \"" << *scs.subsession << "\" subsession (" << LOG_ENDL; |
| | | if (scs.subsession->rtcpIsMuxed()) |
| | | LOG_INFO << "client port " << scs.subsession->clientPortNum() << LOG_ENDL; |
| | | else |
| | | LOG_INFO << "client ports " << scs.subsession->clientPortNum() << "-" << scs.subsession->clientPortNum()+1 << LOG_ENDL; |
| | | LOG_INFO << ")" << LOG_ENDL; |
| | | |
| | | // Continue setting up this subsession, by sending a RTSP "SETUP" command: |
| | | rtspClient->sendSetupCommand(*scs.subsession, continueAfterSETUP, False, _ourRTSPClient->rtspConfig.requestStreamingOverTcp); |
| | | } |
| | | return; |
| | | scs.subsession->setClientPortNum(_ourRTSPClient->desiredPortNum); |
| | | _ourRTSPClient->desiredPortNum += 2; |
| | | } |
| | | |
| | | if (!scs.subsession->initiate()) |
| | | { |
| | | LOG_ERROR << *rtspClient << "Failed to initiate the \"" << *scs.subsession << "\" subsession: " << env.getResultMsg() << LOG_ENDL; |
| | | setupNextSubsession(rtspClient); // give up on this subsession; go to the next one |
| | | } |
| | | else |
| | | { |
| | | LOG_INFO << *rtspClient << "Initiated the \"" << *scs.subsession << "\" subsession (" << LOG_ENDL; |
| | | if (scs.subsession->rtcpIsMuxed()) |
| | | LOG_INFO << "client port " << scs.subsession->clientPortNum() << LOG_ENDL; |
| | | else |
| | | LOG_INFO << "client ports " << scs.subsession->clientPortNum() << "-" << scs.subsession->clientPortNum()+1 << LOG_ENDL; |
| | | LOG_INFO << ")" << LOG_ENDL; |
| | | |
| | | #ifdef INCREASE_RECEIVE_BUFFER_TO |
| | | //sysctl net.core.rmem_max=40000000 |
| | | if (INCREASE_RECEIVE_BUFFER_TO > 0) |
| | | increaseReceiveBufferTo(env, scs.subsession->rtpSource()->RTPgs()->socketNum(), INCREASE_RECEIVE_BUFFER_TO); |
| | | #endif |
| | | |
| | | // Continue setting up this subsession, by sending a RTSP "SETUP" command: |
| | | rtspClient->sendSetupCommand(*scs.subsession, continueAfterSETUP, False, _ourRTSPClient->rtspConfig.requestStreamingOverTcp); |
| | | } |
| | | 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()); |
| | | } |
| | | { |
| | | // 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); |
| | | } |
| | | { |
| | | scs.duration = scs.session->playEndTime() - scs.session->playStartTime(); |
| | | rtspClient->sendPlayCommand(*scs.session, continueAfterPLAY); |
| | | } |
| | | } |
| | | |
| | | void continueAfterSETUP(RTSPClient* rtspClient, int resultCode, char* resultString) |