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

📄 rtspclient.hh

📁 H.264 RTSP 串流(live 555)視窗版本
💻 HH
📖 第 1 页 / 共 2 页
字号:
    RequestRecord*& next() { return fNext; }    unsigned& cseq() { return fCSeq; }    char const* commandName() const { return fCommandName; }    MediaSession* session() const { return fSession; }    MediaSubsession* subsession() const { return fSubsession; }    u_int32_t booleanFlags() const { return fBooleanFlags; }    double start() const { return fStart; }    double end() const { return fEnd; }    float scale() const { return fScale; }    char* contentStr() const { return fContentStr; }    responseHandler*& handler() { return fHandler; }  private:    RequestRecord* fNext;    unsigned fCSeq;    char const* fCommandName;    MediaSession* fSession;    MediaSubsession* fSubsession;    u_int32_t fBooleanFlags;    double fStart, fEnd;    float fScale;    char* fContentStr;    responseHandler* fHandler;  };private:  class RequestQueue {  public:    RequestQueue();    virtual ~RequestQueue();    void enqueue(RequestRecord* request); // "request" must not be NULL    RequestRecord* dequeue();    void putAtHead(RequestRecord* request); // "request" must not be NULL    RequestRecord* findByCSeq(unsigned cseq);    Boolean isEmpty() const { return fHead == NULL; }  private:    RequestRecord* fHead;    RequestRecord* fTail;  };  void reset();  void resetTCPSockets();  void resetResponseBuffer();  void setBaseURL(char const* url);  int openConnection(); // -1: failure; 0: pending; 1: success  int connectToServer(int socketNum, portNumBits remotePortNum); // used to implement "openConnection()"; result values are the same  char* createAuthenticatorString(char const* cmd, char const* url);  unsigned sendRequest(RequestRecord* request);  void handleRequestError(RequestRecord* request);  Boolean parseResponseCode(char const* line, unsigned& responseCode, char const*& responseString, Boolean& responseIsHTTP);  void handleIncomingRequest();  static Boolean checkForHeader(char const* line, char const* headerName, unsigned headerNameLength, char const*& headerParams);  Boolean parseTransportParams(char const* paramsStr,			       char*& serverAddressStr, portNumBits& serverPortNum,			       unsigned char& rtpChannelId, unsigned char& rtcpChannelId);  Boolean parseScaleParam(char const* paramStr, float& scale);  Boolean parseRTPInfoParams(char const*& paramStr, u_int16_t& seqNum, u_int32_t& timestamp);  Boolean handleSETUPResponse(MediaSubsession& subsession, char const* sessionParamsStr, char const* transportParamsStr,			      Boolean streamUsingTCP);  Boolean handlePLAYResponse(MediaSession& session, MediaSubsession& subsession,                             char const* scaleParamsStr, char const* rangeParamsStr, char const* rtpInfoParamsStr);  Boolean handleTEARDOWNResponse(MediaSession& session, MediaSubsession& subsession);  Boolean handleGET_PARAMETERResponse(char const* parameterName, char*& resultValueString);  Boolean handleAuthenticationFailure(char const* wwwAuthenticateParamsStr);  Boolean resendCommand(RequestRecord* request);  char const* sessionURL(MediaSession const& session) const;  static void handleAlternativeRequestByte(void*, u_int8_t requestByte);  void handleAlternativeRequestByte1(u_int8_t requestByte);  void constructSubsessionURL(MediaSubsession const& subsession,			      char const*& prefix,			      char const*& separator,			      char const*& suffix);  // Support for tunneling RTSP-over-HTTP:  Boolean setupHTTPTunneling1(); // send the HTTP "GET"  static void responseHandlerForHTTP_GET(RTSPClient* rtspClient, int responseCode, char* responseString);  void responseHandlerForHTTP_GET1(int responseCode, char* responseString);  Boolean setupHTTPTunneling2(); // send the HTTP "POST"  // Support for asynchronous connections to the server:  static void connectionHandler(void*, int /*mask*/);  void connectionHandler1();  // Support for handling data sent back by a server:  static void incomingDataHandler(void*, int /*mask*/);  void incomingDataHandler1();  void handleResponseBytes(int newBytesRead);private:  int fVerbosityLevel;  portNumBits fTunnelOverHTTPPortNum;  char* fUserAgentHeaderStr;  unsigned fUserAgentHeaderStrLen;  int fInputSocketNum, fOutputSocketNum;  unsigned fServerAddress;  unsigned fCSeq; // sequence number, used in consecutive requests  char* fBaseURL;  Authenticator fCurrentAuthenticator;  unsigned char fTCPStreamIdCount; // used for (optional) RTP/TCP  char* fLastSessionId;  unsigned fSessionTimeoutParameter; // optionally set in response "Session:" headers  char* fResponseBuffer;  unsigned fResponseBytesAlreadySeen, fResponseBufferBytesLeft;  RequestQueue fRequestsAwaitingConnection, fRequestsAwaitingHTTPTunneling, fRequestsAwaitingResponse;  // Support for tunneling RTSP-over-HTTP:  char fSessionCookie[33];  unsigned fSessionCookieCounter;  Boolean fHTTPTunnelingConnectionIsPending;#ifdef RTSPCLIENT_SYNCHRONOUS_INTERFACE  // Old "RTSPClient" interface, which performs synchronous (blocking) operations.  // This will eventually go away, so new applications should not use it.public:  static RTSPClient* createNew(UsageEnvironment& env,                               int verbosityLevel = 0,                               char const* applicationName = NULL,                               portNumBits tunnelOverHTTPPortNum = 0);  char* describeURL(char const* url, Authenticator* authenticator = NULL,                    Boolean allowKasennaProtocol = False, int timeout = -1);  char* describeWithPassword(char const* url,			     char const* username, char const* password,			     Boolean allowKasennaProtocol = False, 			     int timeout = -1);  char* sendOptionsCmd(char const* url,		       char* username = NULL, char* password = NULL,		       Authenticator* authenticator = NULL,		       int timeout = -1);  Boolean announceSDPDescription(char const* url,				 char const* sdpDescription,				 Authenticator* authenticator = NULL,				 int timeout = -1);  Boolean announceWithPassword(char const* url, char const* sdpDescription,			       char const* username, char const* password, int timeout = -1);  Boolean setupMediaSubsession(MediaSubsession& subsession,			       Boolean streamOutgoing = False,			       Boolean streamUsingTCP = False,			       Boolean forceMulticastOnUnspecified = False);  Boolean playMediaSession(MediaSession& session,			   double start = 0.0f, double end = -1.0f,			   float scale = 1.0f);  Boolean playMediaSubsession(MediaSubsession& subsession,			      double start = 0.0f, double end = -1.0f,			      float scale = 1.0f,			      Boolean hackForDSS = False);  Boolean pauseMediaSession(MediaSession& session);  Boolean pauseMediaSubsession(MediaSubsession& subsession);  Boolean recordMediaSubsession(MediaSubsession& subsession);  Boolean setMediaSessionParameter(MediaSession& session,				   char const* parameterName,				   char const* parameterValue);  Boolean getMediaSessionParameter(MediaSession& session,				   char const* parameterName,				   char*& parameterValue);  Boolean teardownMediaSession(MediaSession& session);  Boolean teardownMediaSubsession(MediaSubsession& subsession);private: // used to implement the old interface:  static void responseHandlerForSyncInterface(RTSPClient* rtspClient,					      int responseCode, char* responseString);  void responseHandlerForSyncInterface1(int responseCode, char* responseString);  static void timeoutHandlerForSyncInterface(void* rtspClient);  void timeoutHandlerForSyncInterface1();  TaskToken fTimeoutTask;  char fWatchVariableForSyncInterface;  char* fResultString;  int fResultCode;#endif};#endif

⌨️ 快捷键说明

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