📄 rtspclient.hh
字号:
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 + -