[live555] 从testRTSPClient.cpp PLAY 请求 四

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/engineer_james/article/details/82498227

前言

因为play 流程和DESCRIBE 和SETUP一样,所以,已经需要分析的内容很少,除了RTCP
[live555] 从testRTSPClient.cpp DESCRIBE 发起请求 一
[live555] testRTSPClient.cpp DESCRIBE (后续处理) 二
[live555] 从testRTSPClient.cpp SETUP请求 三

PLAY 请求

对比 SETUP 请求大部分流程是一样的,在SETUP,发送请求后,continueAfterSETUP中发起PLAY请求

void continueAfterSETUP(RTSPClient* rtspClient, int resultCode
            , char* resultString) {
//....
setupNextSubsession(rtspClient);
}

setupNextSubsession 处理

// We have a "m=" line, representing a new sub-session:
MediaSubsession* subsession = createNewMediaSubsession();


void setupNextSubsession(RTSPClient* rtspClient) {
    scs.subsession = scs.iter->next();
    if (scs.subsession != NULL){...}//因为iter 只有一个subsession所以为null

    if (scs.session->absStartTime() != NULL) {
        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);
     }
}

absStartTime 是播放开始时间,PLAY之前都为NULL,发送PLAY请求

continueAfterPLAY

发送完请求,会通过轮询回调continueAfterPLAY

接收response 消息

void RTSPClient::handleResponseBytes(int newBytesRead) {

    if (responseCode == 200) {
      // Do special-case response handling for some commands:
      if (strcmp(foundRequest->commandName(), "SETUP") == 0) {
        if (!handleSETUPResponse(*foundRequest->subsession(), sessionParamsStr, transportParamsStr, foundRequest->booleanFlags()&0x1)) break;
      } else if (strcmp(foundRequest->commandName(), "PLAY") == 0) {
        if (!handlePLAYResponse(foundRequest->session(), foundRequest->subsession(), scaleParamsStr, speedParamsStr, rangeParamsStr, rtpInfoParamsStr)) break;
      } else if (strcmp(foundRequest->commandName(), "TEARDOWN") == 0) {
        if (!handleTEARDOWNResponse(*foundRequest->session(), *foundRequest->subsession())) break;
      } else if (strcmp(foundRequest->commandName(), "GET_PARAMETER") == 0) {
        if (!handleGET_PARAMETERResponse(foundRequest->contentStr(), bodyStart, responseEnd)) break;
      }
    } 

}

猜你喜欢

转载自blog.csdn.net/engineer_james/article/details/82498227