⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtspserver.h

📁 rtsp协议的主要实现代码.对开发流媒体
💻 H
字号:
// RTSPServer.h: interface for the RTSPServer class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_RTSPSERVER_H__EE3E881B_7E39_479F_8A85_0C36E2DF5696__INCLUDED_)
#define AFX_RTSPSERVER_H__EE3E881B_7E39_479F_8A85_0C36E2DF5696__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#pragma warning(disable : 4786)
#include <string>
#include <map>
#include <list>
using namespace std;

#include "winsock.h"
#include "Type.h"
#include "ServerMediaSubsession.h"
#include "ServerMediaSession.h"
#include "BankSocket.h"
#include "BasicTaskScheduler.h"

#define RTSP_BUFFER_SIZE 10000 // for incoming requests, and outgoing responses

class RTSPServer  
{
public:
	RTSPServer(Port ourPort);
	virtual ~RTSPServer();
	void RunServer();
	void incomingConnectionHandler1();
	char* rtspURL(ServerMediaSession const* serverMediaSession) const; 
	//ServerMediaSession
	void addServerMediaSession(ServerMediaSession* serverMediaSession);
	ServerMediaSession* lookupServerMediaSession(char const* streamName);
public:
	BasicTaskScheduler fBasicTaskScheduler;
private:
	friend class RTSPClientSession;
	int fServerSocket;
	Port fServerPort;
	unsigned fSessionIdCounter;
	map<string,ServerMediaSession *> fServerMediaSession;
	CBankSocket fBankSocket;
private:
	// The state of each individual session handled by a RTSP server:
	class RTSPClientSession {
	public:
		static void incomingRequestHandler(void*, int /*mask*/);
		RTSPClientSession(RTSPServer& ourServer, unsigned sessionId,
			int clientSocket, struct sockaddr_in clientAddr);
		virtual ~RTSPClientSession();
		void incomingRequestHandler1();
		void handleCmd_bad(char const* cseq);
		void handleCmd_notSupported(char const* cseq);
		void handleCmd_notFound(char const* cseq);
		void handleCmd_unsupportedTransport(char const* cseq);
		void handleCmd_OPTIONS(char const* cseq);
		void handleCmd_DESCRIBE(char const* cseq, char const* urlSuffix,
			char const* fullRequestStr);
		void handleCmd_SETUP(char const* cseq,
			char const* urlPreSuffix, char const* urlSuffix,
			char const* fullRequestStr);
		void handleCmd_withinSession(char const* cmdName,
			char const* urlPreSuffix, char const* urlSuffix,
			char const* cseq, char const* fullRequestStr);
		void handleCmd_TEARDOWN(ServerMediaSubsession* subsession,
			char const* cseq);
		void handleCmd_PLAY(ServerMediaSubsession* subsession,
			char const* cseq, char const* fullRequestStr);
		void handleCmd_PAUSE(ServerMediaSubsession* subsession,
			char const* cseq);
		void handleCmd_GET_PARAMETER(ServerMediaSubsession* subsession,
			char const* cseq, char const* fullRequestStr);
		Boolean authenticationOK(char const* cmdName, char const* cseq,
			char const* fullRequestStr);
		Boolean parseRequestString(char const *reqStr, unsigned reqStrSize,
			char *resultCmdName,
			unsigned resultCmdNameMaxSize, 
			char* resultURLPreSuffix,
			unsigned resultURLPreSuffixMaxSize, 
			char* resultURLSuffix,
			unsigned resultURLSuffixMaxSize, 
			char* resultCSeq,
			unsigned resultCSeqMaxSize); 
	private:
		void reclaimStreamStates();
	private:
		RTSPServer& fOurServer;
		unsigned fOurSessionId;
		ServerMediaSession* fOurServerMediaSession;
		int fClientSocket;
		struct sockaddr_in fClientAddr;
		unsigned char fBuffer[RTSP_BUFFER_SIZE];
		unsigned char fResponseBuffer[RTSP_BUFFER_SIZE];
		Boolean fSessionIsActive, fStreamAfterSETUP;
		unsigned char fTCPStreamIdCount; // used for (optional) RTP/TCP
		unsigned fNumStreamStates; 
		struct streamState {
			ServerMediaSubsession* subsession;
			void* streamToken;
		} * fStreamStates;
	};
};

#endif // !defined(AFX_RTSPSERVER_H__EE3E881B_7E39_479F_8A85_0C36E2DF5696__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -