简易RTSP例子(c++)
头文件
#ifndef _GETSTRINGS_H_
#define _GETSTRINGS_H_
#include <string> using std::string;
class TranslateRTSP
{
public: TranslateRTSP();
~TranslateRTSP() {}
void DoProcess(char data[]);//解析RTSP命令
//待获取的字段
string m_sVersion;
string m_sStatus;
string m_sDescribe;
string m_sSequence;
string m_sSession;
string m_sProtocol;
};
#endif
源文件
#include "GetStrings.h"
TranslateRTSP::TranslateRTSP() {}
void TranslateRTSP::DoProcess(char data[])
{
int nLength=strlen(data);
int nLen=0;
int nPoint=0;
string sChars;
string sTag;
for (int i=0;i<nLength;++i)
{
if (data[i] == ' ' || data[i] == ':' || data[i] == ';' || data[i] == '\r' || data[i] == '\n')
{
if (0 != nLen)
{
sChars.clear();//清空字符串
string temp=data;
sChars=temp.substr(nPoint,nLen);
if ("Description" == sTag)
{
m_sDescribe=sChars;
sTag.clear();
}
if ("Status" == sTag)
{
m_sStatus=sChars;
sTag="Description";
}
if ("RTSP/1.0" == sChars)
{
m_sVersion=sChars.substr(5,3);
sTag="Status";
}
if ("CSeq" == sTag)
{
m_sSequence=sChars;
sTag.clear();
}
if ("Session" == sTag)
{
m_sSession=sChars;
sTag.clear();
}
if ("Transport" == sTag)
{
m_sProtocol=sChars.substr(8,3);
sTag.clear();
}
if ("interleaved=0-1" == sTag)
{
sTag.clear();
break;
}
if (sTag != "Status" && sTag != "Description")
{
if (data[i-1] != ' ' || data[i-1] != ':' || data[i-1] != ';' || data[i-1] != '\r' || data[i-1] != '\n')
sTag=sChars;
}
nPoint+=nLen+1;
nLen=0;
}
else
nPoint++;
}
else
nLen++;
}
}