rtsp 协议分解函数

Posted qianbo_insist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rtsp 协议分解函数相关的知识,希望对你有一定的参考价值。

rtsp 协议基础

为了实现基础得rtsp协议,首先判断以下命令,

OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

这些头部描述在传输得最首位,和http协议得GET POST 基本类似
下面就使用vlc来发送命令来测试
在vlc中输入 rtsp://127.0.0.1/live/1001

实际上接收时会收到
OPTIONS rtsp://ip/live/1001 rtsp/1.0
这样得命令

code

使用标准c++得 istringstream 来获得一行一行得数据分解字符串:
std::istringstream s(lines);
再把一行一行得字符串进行分解,我们使用map 来存储成对得关系,代码如下所示:

//适应rtsp协议
static int fetch_head_info_rtsp(std::string &lines, c_header_map &hmap)

	//we analyse the string like this:
	//OPTIONS rtsp://ip/live/1001 rtsp/1.0
	std::istringstream s(lines);
	std::string request;
	std::getline(s, request);
	size_t len = request.size();
	if (request[len - 1] != '\\r')
	
		//please use log instead of cout,of course ,now we just cout
		std::cout << "request not fit:" << request << std::endl;
		return -1;
	
	request[len - 1] = '\\0';
	//we do not use this,instead, to use request[x]='\\0'  
	//request.erase(request.end() - 1);
	size_t i = 2;
	while (request[++i] != ' ');

	hmap["method"] = request.substr(0, i);
	std::string url = request.substr(i + 1);
	i = 7; //优化rtsp协议
	while (url[++i] != ' ');
	hmap["baseurl"] = url.substr(0, i);
	hmap["protocol"] = url.substr(i + 1);
	std::string &baseurl = hmap["baseurl"];
	i = 7;//rtsp://
	while (baseurl[++i] != '/');
	hmap["route"] = baseurl.substr(i + 1);
	hmap["url"] = url;

	std::string header;

	//while (std::getline(s, header) && header != "\\r")
	while (1)
	
		if (!std::getline(s, header))
			break;
		size_t len = header.size();
		if (header[len - 1] == '\\r')
		
			header[len - 1] = '\\0';//remove last char
			//header.erase(header.end() - 1); 
			size_t end = header.find(": ", 0);
			if (end == std::string::npos) //优化rtsp协议
				break;
			std::string key = header.substr(0, end);
			std::string value = header.substr(end + 2);
			hmap[key] = value;
		
	
	return (int)hmap.size();

经过测试基本时正确得,读者自行加上错误处理。

以上是关于rtsp 协议分解函数的主要内容,如果未能解决你的问题,请参考以下文章

什么是RTMP 和 RTSP?它们之间有什么区别?

什么是RTMP 和 RTSP?它们之间有什么区别?

RTSP协议视频流媒体播放器EasyPlayer-RTSP-OCX接口文档API接口函数定义

流媒体专家RTSP协议详解I

RTSP协议学习

RTSP协议详解