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

📄 rtspclient.hh

📁 流媒体传输协议的实现代码,非常有用.可以支持rtsp mms等流媒体传输协议
💻 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.,59 Temple Place, Suite 330, Boston, MA  02111-1307  USA**********/// "liveMedia"// Copyright (c) 1996-2004 Live Networks, Inc.  All rights reserved.// A generic RTSP client// C++ header#ifndef _RTSP_CLIENT_HH#define _RTSP_CLIENT_HH#ifndef _MEDIA_SESSION_HH#include "MediaSession.hh"#endif#ifndef _NET_ADDRESS_HH#include "NetAddress.hh"#endif#ifndef _DIGEST_AUTHENTICATION_HH#include "DigestAuthentication.hh"#endifclass RTSPClient: public Medium {public:  static RTSPClient* createNew(UsageEnvironment& env,			       int verbosityLevel = 0,			       char const* applicationName = NULL,			       portNumBits tunnelOverHTTPPortNum = 0);  // If "tunnelOverHTTPPortNum" is non-zero, we tunnel RTSP (and RTP)  // over a HTTP connection with the given port number, using the technique  // described in Apple's document <http://developer.apple.com/documentation/QuickTime/QTSS/Concepts/chapter_2_section_14.html>  int socketNum() const { return fInputSocketNum; }  static Boolean lookupByName(UsageEnvironment& env,			      char const* sourceName,			      RTSPClient*& resultClient);  char* describeURL(char const* url, Authenticator* authenticator = NULL,		    Boolean allowKasennaProtocol = False);      // Issues a RTSP "DESCRIBE" command      // Returns the SDP description of a session, or NULL if none      // (This is dynamically allocated, and must later be freed      //  by the caller - using "delete[]")  char* describeWithPassword(char const* url,			       char const* username, char const* password);      // Uses "describeURL()" to do a "DESCRIBE" - first      // without using "password", then (if we get an Unauthorized      // response) with an authentication response computed from "password"  Boolean announceSDPDescription(char const* url,				 char const* sdpDescription,				 Authenticator* authenticator = NULL);      // Issues a RTSP "ANNOUNCE" command      // Returns True iff this command succeeds  Boolean announceWithPassword(char const* url, char const* sdpDescription,			       char const* username, char const* password);      // Uses "announceSDPDescription()" to do an "ANNOUNCE" - first      // without using "password", then (if we get an Unauthorized      // response) with an authentication response computed from "password"  char* sendOptionsCmd(char const* url);      // Issues a RTSP "OPTIONS" command      // Returns a string containing the list of options, or NULL  Boolean setupMediaSubsession(MediaSubsession& subsession,			       Boolean streamOutgoing = False,			       Boolean streamUsingTCP = False);      // Issues a RTSP "SETUP" command on "subsession".      // Returns True iff this command succeeds  Boolean playMediaSession(MediaSession& session,			   float start = 0.0f, float end = -1.0f,			   float scale = 1.0f);      // Issues an aggregate RTSP "PLAY" command on "session".      // Returns True iff this command succeeds      // (Note: start=-1 means 'resume'; end=-1 means 'play to end')  Boolean playMediaSubsession(MediaSubsession& subsession,			      float start = 0.0f, float end = -1.0f,			      float scale = 1.0f,			      Boolean hackForDSS = False);      // Issues a RTSP "PLAY" command on "subsession".      // Returns True iff this command succeeds      // (Note: start=-1 means 'resume'; end=-1 means 'play to end')  Boolean pauseMediaSession(MediaSession& session);      // Issues an aggregate RTSP "PAUSE" command on "session".      // Returns True iff this command succeeds  Boolean pauseMediaSubsession(MediaSubsession& subsession);      // Issues a RTSP "PAUSE" command on "subsession".      // Returns True iff this command succeeds  Boolean recordMediaSubsession(MediaSubsession& subsession);      // Issues a RTSP "RECORD" command on "subsession".      // Returns True iff this command succeeds  Boolean setMediaSessionParameter(MediaSession& session,				   char const* parameterName,				   char const* parameterValue);      // Issues a RTSP "SET_PARAMETER" command on "subsession".      // Returns True iff this command succeeds  Boolean teardownMediaSession(MediaSession& session);      // Issues an aggregate RTSP "TEARDOWN" command on "session".      // Returns True iff this command succeeds  Boolean teardownMediaSubsession(MediaSubsession& subsession);      // Issues a RTSP "TEARDOWN" command on "subsession".      // Returns True iff this command succeeds  static Boolean parseRTSPURL(UsageEnvironment& env, char const* url,			      NetAddress& address, portNumBits& portNum,			      char const** urlSuffix = NULL);      // (ignores any "<username>[:<password>]@" in "url")  static Boolean parseRTSPURLUsernamePassword(char const* url,					      char*& username,					      char*& password);  unsigned describeStatus() const { return fDescribeStatusCode; }#ifdef SUPPORT_REAL_RTSP  Boolean usingRealNetworksChallengeResponse() const { return fRealChallengeStr != NULL; }#endifprotected:  virtual ~RTSPClient();private: // redefined virtual functions  virtual Boolean isRTSPClient() const;private:  RTSPClient(UsageEnvironment& env, int verbosityLevel,	     char const* applicationName, portNumBits tunnelOverHTTPPortNum);      // called only by createNew();  void reset();  void resetTCPSockets();  Boolean openConnectionFromURL(char const* url);  char* createAuthenticatorString(Authenticator const* authenticator,				  char const* cmd, char const* url);  static void checkForAuthenticationFailure(unsigned responseCode,					    char*& nextLineStart,					    Authenticator* authenticator);  Boolean sendRequest(char const* requestString, char const* tag,		      Boolean base64EncodeIfOverHTTP = True);  Boolean getResponse(char const* tag,		      unsigned& bytesRead, unsigned& responseCode,		      char*& firstLine, char*& nextLineStart,		      Boolean checkFor200Response = True);  unsigned getResponse1(char*& responseBuffer, unsigned responseBufferSize);  Boolean parseResponseCode(char const* line, unsigned& responseCode);  Boolean parseTransportResponse(char const* line,				 char*& serverAddressStr,				 portNumBits& serverPortNum,				 unsigned char& rtpChannelId,				 unsigned char& rtcpChannelId);  Boolean parseRTPInfoHeader(char const* line, unsigned& trackId,			     u_int16_t& seqNum, u_int32_t& timestamp);  Boolean parseScaleHeader(char const* line, float& scale);  void constructSubsessionURL(MediaSubsession const& subsession,			      char const*& prefix,			      char const*& separator,			      char const*& suffix);  Boolean setupHTTPTunneling(char const* urlSuffix);private:  int fVerbosityLevel;  portNumBits fTunnelOverHTTPPortNum;  char* fUserAgentHeaderStr;      unsigned fUserAgentHeaderStrSize;  int fInputSocketNum, fOutputSocketNum;  unsigned fServerAddress;  static unsigned fCSeq; // sequence number, used in consecutive requests      // Note: it's static, to ensure that it differs if more than one      // connection is made to the same server, using the same URL.      // Some servers (e.g., DSS) may have problems with this otherwise.  char* fBaseURL;  Authenticator fCurrentAuthenticator;  unsigned char fTCPStreamIdCount; // used for (optional) RTP/TCP  char* fLastSessionId;#ifdef SUPPORT_REAL_RTSP  char* fRealChallengeStr;  char* fRealETagStr;#endif  unsigned fDescribeStatusCode;  // 0: OK; 1: connection failed; 2: stream unavailable  char* fResponseBuffer;  unsigned fResponseBufferSize;  // The following fields are used to implement the non-standard Kasenna protocol:  Boolean fServerIsKasenna;  char* fKasennaContentType;};#endif

⌨️ 快捷键说明

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