#include <iostream>
using namespace std;
int PraseURL(const char *url, char* user, char* psd, char *szip, int *iport)
{
long lret = -1;
if (url)
{
//1.先找到rtsp这个协议字段 或者是rtmp
if (!_strnicmp(url, "rtsp://", 7) || !_strnicmp(url, "rtmp://", 7))
{
//2.查找用户名
char *s, *ss;
s = (char*)url + strlen("rtsp://");
ss = strchr(s, '@');
//判断链接是否存在用户名
if (ss != NULL)
{
strncpy(user, s, ss - s);
user[ss - s] = '\0';
//3.查找密码
s = strchr(user, ':');
if (s)
{
ss = s;
s++;
strcpy(psd, s);
user[ss - user] = '\0';
}
//4.再找ip地址
s = (char*)url + strlen("rtsp://") + strlen(user) + strlen(psd) + 2;
}
else
{
user[0] = '\0';
psd[0] = '\0';
//4.再找ip地址
s = (char*)url + strlen("rtsp://");
}
ss = strchr(s, '/');
int Test = ss - s;
strncpy(szip, s, ss - s);
szip[ss - s] = '\0';
//5.查找下是否是有端口设置
s = strchr(szip, ':');
//如果有端口设置,还需要修改IP地址
if (s)
{
ss = s;
s++;
*iport = atoi(s);
//同时修正ip地址
int Test2 = ss - szip;
szip[Test2] = '\0';
}
else
*iport = 554;//默认端口554
lret = 0;
}
}
return lret;
}
int main()
{
char url[] ="rtsp://admin:admin123@192.168.61.66:554/cam/realmonitor?channel=1&subtype=0";
char ip[32]="";
int port = 0;
char user[32]="";
char psd[32]="";
PraseURL(url,user,psd,ip,&port);
printf("IP=%s\nport=%d\nuser=%s\npsd=%s\n",ip,port,user,psd);
return 0;
}
C/C++ 解析RTSP地址获取用户名、密码、IP、端口号信息
于 2021-01-08 11:24:51 首次发布