RTSP调试代码 (一)

2014-11-23 22:57:57 · 作者: · 浏览: 16

#ifdef _WIN32_WCE   
#include "stdafx.h"   
#endif   
  
  
#ifndef _WIN32_WCE   
#define WIN32_LEAN_AND_MEAN   
#endif   
  
  
#include <windows.h>   
#include    
  
  
#include    
  
  
#include    
  
  
#include    
#include    
#include    
  
  
#ifdef _WIN32_WCE   
#pragma comment(lib, "ws2.lib")   
#else   
#pragma comment(lib, "ws2_32.lib")   
#endif   
  
  
#define  PP_NAME "User-Agent: rtsp client(v1.0)"   
#define  PP_CRLF "\r\n"   
  
  
//打开连接;   
long InitSocket();  
  
  
//关闭连接;   
long DeInitSocket();  
  
  
//初始化tcp socket;   
long InitTCPSocket(int port);  
  
  
//初始化udp socket;   
long InitUDPSocket(const char *ip, int port);  
  
  
//取socket端口号;   
long GetSokcetPort(int sock, int *port);  
  
  
//读取数据;   
long ReadSocket(int sock, char *buf, int len, int timeout);  
  
  
//发送命令数据;   
long SendRTSPCmd(int sock, const char *cmd, const char *szparam);  
  
  
//解析rtsp命令回应数据;   
long PraseRTSPCmd();  
long PraseOptionCmd(const char *sz);  
long PraseDescribeCmd(const char *sz);  
long PraseSetupCmd(const char *sz, char *sess);  
long PrasePlayCmd(const char *sz);  
long GetResponseCode(const char *sz);  //取返回值;   
  
  
//////////////////////////////////////////////////////////////////////////   
//字符串操作函数;   
static char* getLine(char* startOfLine);  
  
  
  
  
//生成rtsp发送命令;   
char * GetRTSPCmd(const char *);  
char * GetOptionCmd(char *url);  
char * GetDescribeCmd(char *url);  
char * GetPlayCmd(char *url, char *session, char *range);  
char * GetSetupCmd(char *url, int port1, int port2);  
  
  
char * GetReportCmd(char *);  
  
  
//////////////////////////////////////////////////////////////////////////   
//日志函数;   
long logwr(void *, int len);  
  
  
//全局变量定义区;   
fd_set rfdsock;  
//日志写入文件指
针; FILE *fp = NULL; // ////////////////////////////////////////////////////////////////////////// //rtsp请求解析; long PraseURL(const char *url, char *szip, int *iport); int _tmain(int argc, _TCHAR* argv[]) { int sockin, sc1, sc2; sockaddr_in addr; char *buf, *szcmd, *url; char szip[32]; int nlen, iret, iport; int ip1, ip2; long lret; //初始化变量; FD_ZERO(&rfdsock); fp = fopen("rtsp_log.txt", "w+"); //分配缓冲区; nlen = 10240; buf = (char*)malloc(nlen); //定义要连接的url; //url = "rtsp://192.168.1.43:2554/realmp3.mp3"; url = "rtsp://192.168.10.177/bipbop-gear1-all.ts"; //url = "rtsp://192.168.1.43/1.amr"; //初始化sock; InitSocket(); //分析url请求,取出ip,端口; lret = PraseURL(url, szip, &iport); //初始化与服务器连接的socket; sockin = InitTCPSocket(0); //与服务器连接; addr.sin_family = AF_INET; addr.sin_port = htons(iport); addr.sin_addr.s_addr = inet_addr(szip); iret = connect(sockin,(struct sockaddr*)&addr, sizeof addr); if(iret == SOCKET_ERROR) { int erro = WSAGetLastError(); printf("connect fail !"); Sleep(3000); closesocket(sockin); WSACleanup(); return 0; } //发送option命令; szcmd = GetOptionCmd(url); lret = SendRTSPCmd(sockin, "OPTIONS",szcmd); free(szcmd); lret = ReadSocket(sockin, buf, nlen,100); //发送DESCRIBE命令; szcmd = GetDescribeCmd(url); lret = SendRTSPCmd(sockin, "DESCRIBE", szcmd); free(szcmd); lret = ReadSocket(sockin, buf, nlen, 100); //解析Response; lret = PraseDescribeCmd((const char*)buf); //创建客户端接收端口; sc1 = InitUDPSocket(NULL, 6544); sc2 = InitUDPSocket(NULL, 6545); //