handleCmd_DESCRIBE 函数

来源:互联网 发布:英语单词阅读软件 编辑:程序博客网 时间:2024/05/17 06:44

handleCmd_DESCRIBE 函数主要的任务就,在客户端发送过来describe 是回复SDP,如果里边想实现多个session的自动创建,可以重装lookupServerMediaSession,下面是函数注释



void RTSPServer::RTSPClientConnection::handleCmd_DESCRIBE(char const* urlPreSuffix, char const* urlSuffix, char const* fullRequestStr) {char* sdpDescription = NULL;char* rtspURL = NULL;do{char urlTotalSuffix[RTSP_PARAM_STRING_MAX];if (strlen(urlPreSuffix) + strlen(urlSuffix) + 2 > sizeof urlTotalSuffix){handleCmd_bad();break;}urlTotalSuffix[0] = '\0';if (urlPreSuffix[0] != '\0'){strcat(urlTotalSuffix, urlPreSuffix);strcat(urlTotalSuffix, "/");}strcat(urlTotalSuffix, urlSuffix);//如果开启认证的话,此处会验证用户名和密码if (!authenticationOK("DESCRIBE", urlTotalSuffix, fullRequestStr)) break;// We should really check that the request contains an "Accept:" #####// for "application/sdp", because that's what we're sending back #####// Begin by looking up the "ServerMediaSession" object for the specified "urlTotalSuffix"://根据名称查找服务,如果找不到退出,也可重载,在lookupServerMediaSession中创建session,live555自带rtsp服务就这么做的。ServerMediaSession* session = fOurServer.lookupServerMediaSession(urlTotalSuffix);if (session == NULL){handleCmd_notFound();break;}//获取SDP// Then, assemble a SDP description for this session:sdpDescription = session->generateSDPDescription();if (sdpDescription == NULL){// This usually means that a file name that was specified for a// "ServerMediaSubsession" does not exist.setRTSPResponse("404 File Not Found, Or In Incorrect Format");break;}unsigned sdpDescriptionSize = strlen(sdpDescription);//产生RTSP URL,为了在setup中使用,一种情况是发过来是 rtsp://****/2.h264 没有2.h264 给你转成2-1.h264 // Also, generate our RTSP URL, for the "Content-Base:" header// (which is necessary to ensure that the correct URL gets used in subsequent "SETUP" requests).rtspURL = fOurServer.rtspURL(session, fClientInputSocket);snprintf((char*)fResponseBuffer, sizeof fResponseBuffer,"RTSP/1.0 200 OK\r\nCSeq: %s\r\n""%s""Content-Base: %s/\r\n""Content-Type: application/sdp\r\n""Content-Length: %d\r\n\r\n""%s",fCurrentCSeq,dateHeader(),rtspURL,sdpDescriptionSize,sdpDescription);} while (0);delete[] sdpDescription;delete[] rtspURL;}




0 0