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

📄 rtspoverhttpserver.hh

📁 H.264 RTSP 串流(live 555)視窗版本
💻 HH
字号:
/**********This library is free software; you can redistribute it and/or modify it underthe terms of the GNU Lesser General Public License as published by theFree Software Foundation; either version 2.1 of the License, or (at youroption) any later version. (See <http://www.gnu.org/copyleft/lesser.html>.)This library is distributed in the hope that it will be useful, but WITHOUTANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESSFOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License formore details.You should have received a copy of the GNU Lesser General Public Licensealong with this library; if not, write to the Free Software Foundation, Inc.,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA**********/// "liveMedia"// Copyright (c) 1996-2010 Live Networks, Inc.  All rights reserved.// A simple HTTP server that acts solely to implement RTSP-over-HTTP tunneling// (to a separate RTSP server), as described in// http://developer.apple.com/documentation/QuickTime/QTSS/Concepts/chapter_2_section_14.html// C++ header#ifndef _RTSP_OVER_HTTP_SERVER_HH#define _RTSP_OVER_HTTP_SERVER_HH#include "Media.hh"#include "NetInterface.hh"#define HTTP_BUFFER_SIZE 10000 // for incoming requests, and outgoing responsesclass RTSPOverHTTPServer: public Medium {public:  static RTSPOverHTTPServer* createNew(UsageEnvironment& env, Port ourHTTPPort = 80,				       Port rtspServerPort = 554,				       char const* rtspServerHostName = "localhost");protected:  RTSPOverHTTPServer(UsageEnvironment& env, int ourSocket,		     Port rtspServerPort, char const* rtspServerHostName);      // called only by createNew();  virtual ~RTSPOverHTTPServer();  static int setUpOurSocket(UsageEnvironment& env, Port& ourPort);private:  static void incomingConnectionHandler(void*, int /*mask*/);  void incomingConnectionHandler1();  // The state of each individual connection handled by a HTTP server:  class HTTPClientConnection {  public:    HTTPClientConnection(RTSPOverHTTPServer& ourServer, int clientSocket);    virtual ~HTTPClientConnection();  private:    static void incomingRequestHandler(void*, int /*mask*/);    void incomingRequestHandler1();    UsageEnvironment& envir() { return fOurServer.envir(); }    void resetRequestBuffer();    Boolean parseHTTPRequestString(char* resultCmdName,				   unsigned resultCmdNameMaxSize,				   char* sessionCookie,				   unsigned sessionCookieMaxSize,				   char* acceptStr,				   unsigned acceptStrMaxSize,				   char* contentTypeStr,				   unsigned contentTypeStrMaxSize);    void handleCmd_bad();#if 0 //#####@@@@@    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);    void noteLiveness();    Boolean isMulticast() const { return fIsMulticast; }    static void noteClientLiveness(HTTPClientConnection* clientConnection);    static void livenessTimeoutTask(HTTPClientConnection* clientConnection);#endif  private:    RTSPOverHTTPServer& fOurServer;#if 0 //#####@@@@@    unsigned fOurSessionId;    ServerMediaSession* fOurServerMediaSession;#endif    int fClientSocket;#if 0 //#####@@@@@    struct sockaddr_in fClientAddr;    TaskToken fLivenessCheckTask;#endif    unsigned char fRequestBuffer[HTTP_BUFFER_SIZE];    unsigned fRequestBytesAlreadySeen, fRequestBufferBytesLeft;    unsigned char* fLastCRLF;    unsigned char fResponseBuffer[HTTP_BUFFER_SIZE];    Boolean fSessionIsActive;#if 0 //#####@@@@@    Authenticator fCurrentAuthenticator; // used if access control is needed    unsigned char fTCPStreamIdCount; // used for (optional) RTP/TCP    unsigned fNumStreamStates;    struct streamState {      ServerMediaSubsession* subsession;      void* streamToken;    } * fStreamStates;#endif  };private:  friend class RTSPOverHTTPTunnel;  int fServerSocket;  Port fRTSPServerPort;  char* fRTSPServerHostName;};#endif

⌨️ 快捷键说明

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