RTSP调试代码 (四)

2014-11-23 22:57:57 · 作者: · 浏览: 17
char buf[128] = {0}; //sprintf(buf, "Session: %s\r\n", session); sprintf(ss, s, url, 4, session, range, PP_NAME, PP_CRLF, PP_CRLF); return ss; } char * GetSetupCmd( char *url , int port1, int port2) { int nlen, iret; char *ss; char *s = GetRTSPCmd("SETUP"); nlen = strlen(s); iret = nlen + strlen(url) + strlen(PP_NAME) + 200; ss = (char*)malloc(iret); char buf[128] = {0}; char buf2[128] = {0}; if(port1 == 0) strcpy(buf, "\r\nTransport: RTP/AVP/TCP;unicast;interleaved=0-1"); else sprintf(buf, "\r\nTransport: RTP/AVP;unicast;client_port=%d-%d", ntohs(port2), ntohs(port1)); //sprintf(buf2, "SETUP %s/streamid=0 RTSP/1.0\r\n", url); //sprintf(ss, s, buf2, 3, buf, PP_NAME, PP_CRLF, PP_CRLF); sprintf(buf2, "%s/track1 RTSP/1.0\r\n", url); sprintf(ss, s, buf2, 3, PP_NAME, buf, PP_CRLF, PP_CRLF); return ss; } long PraseURL( const char *url, char *szip, int *iport ) { long lret = -1; if(url) { //找到了rtsp这个标识符 if(!_strnicmp(url, "rtsp://", 7)) { //找ip char *s, *ss; s = (char*)url + strlen("rtsp://"); ss = strchr(s, '/'); strncpy(szip, s, ss- s); szip[ss -s] = '\0'; //查找下是否是有端口设置 s = strchr(szip, ':'); //有端口设置 if(s) { ss = s; s ++; *iport = atoi(s); //同时修正ip地址 szip[ss - szip] = '/0'; } else *iport = 554; lret = 0; } } return lret; } long logwr( void *data, int len ) { long lret = -1; if(fp) lret = fwrite(data, 1, len, fp); return lret; } static char* getLine(char* startOfLine) { // returns the start of the next line, or NULL if none for (char* ptr = startOfLine; *ptr != '\0'; ++ptr) { // Check for the end of line: \r\n (but also accept \r or \n by itself): if (*ptr == '\r' || *ptr == '\n') { // We found the end of the line if (*ptr == '\r') { *ptr++ = '\0'; if (*ptr == '\n') ++ptr; } else { *ptr++ = '\0'; } return ptr; } } return NULL; } long GetResponseCode( const char *sz ) { long lret = -1; if(sz) { if(sscanf(sz, "%*s%u", &lret) != 1) ; } return lret; } long PraseDescribeCmd( const char *sz ) { long lret = -1; char *ss, *szst; szst = (char *)sz; int contentLength = -1; if(GetResponseCode(sz )== 200) { ss= getLine(szst); while(1) { ss = getLine(ss); if(ss == NULL) break; if (sscanf(ss, "Content-Length: %d", &contentLength) == 1 || sscanf(ss, "Content-length: %d", &contentLength) == 1) { if (contentLength < 0) { //.... } } } } return lret; } long PraseSetupCmd( const char *sz , char *sess) { long lret = -1; char *ss, *szst; szst = (char *)sz; int contentLength = -1; if(GetResponseCode(sz )== 200) { ss= getLine(szst); while(1) { ss = getLine(ss); if(ss == NULL) break; if (sscanf(ss, "Session: %sP4 192.168.10.177", sess) == 1) { lret = 1; return lret; } } } return lret; }