版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}
}
}