diff options
author | PacketVideo CM <engbuild@pv.com> | 2009-10-21 09:46:28 -0700 |
---|---|---|
committer | PacketVideo CM <engbuild@pv.com> | 2009-10-21 09:46:28 -0700 |
commit | 3413edb3c48aefd1174cd06aa2f323e28c8f0146 (patch) | |
tree | 830b5fd64e1d844d1ec72994da5eb30c07231ef2 /protocols | |
parent | e87840c095efaa5e9fa0c4e22f030b2a07a7c760 (diff) | |
download | opencore-3413edb3c48aefd1174cd06aa2f323e28c8f0146.tar.gz |
RIO-7439: Refactor RTSP client engine node for cleaner interfacing with streaming manager node
Diffstat (limited to 'protocols')
5 files changed, 160 insertions, 86 deletions
diff --git a/protocols/rtsp_client_engine/inc/pvrtsp_client_engine_node.h b/protocols/rtsp_client_engine/inc/pvrtsp_client_engine_node.h index a846e69e2..178a62d1a 100644 --- a/protocols/rtsp_client_engine/inc/pvrtsp_client_engine_node.h +++ b/protocols/rtsp_client_engine/inc/pvrtsp_client_engine_node.h @@ -161,12 +161,12 @@ class SessionInfo public: OSCL_HeapString<PVRTSPEngineNodeAllocator> iSessionURL; - OSCL_HeapString<PVRTSPEngineNodeAllocator> iContentBaseURL;//Per session control URL from content base field + OSCL_HeapString<PVRTSPEngineNodeAllocator> iContentBaseURL;// Per session control URL from content base field - OSCL_HeapString<PVRTSPEngineNodeAllocator> iServerName; //could be either DNS or ip address + OSCL_HeapString<PVRTSPEngineNodeAllocator> iServerName; // could be either DNS or ip address - OSCL_HeapString<PVRTSPEngineNodeAllocator> iProxyName; //could be either DNS or ip address - OSCL_HeapString<PVRTSPEngineNodeAllocator> iUuid; //for Real http cloaking + OSCL_HeapString<PVRTSPEngineNodeAllocator> iProxyName; // could be either DNS or ip address + OSCL_HeapString<PVRTSPEngineNodeAllocator> iUuid; uint32 iProxyPort; @@ -182,24 +182,24 @@ class SessionInfo OsclSharedPtr<SDPInfo> iSDPinfo; Oscl_Vector<StreamInfo, PVRTSPEngineNodeAllocator> iSelectedStream; - int number_of_channels; //Used for interaction with the media buffer class - int channel_tbl[MAX_TOTAL_TRACKS]; //Index from SDP track IDs to tracks actually selected + int number_of_channels; // Used for interaction with the media buffer class + int channel_tbl[MAX_TOTAL_TRACKS]; // Index from SDP track IDs to tracks actually selected - OSCL_HeapString<PVRTSPEngineNodeAllocator> iSID; //alphanumeric session ID + OSCL_HeapString<PVRTSPEngineNodeAllocator> iSID; // alphanumeric session ID - bool serverReplyFlag; //Used for communication between the PVStream modules (network module and the task scheduler) - bool getStateFlag; //Used to ensure that the PE's main loop has been called - bool pvServerIsSetFlag; //Used to indicate if we are streaming from PVServer or not - bool tSIDIsSetFlag; //Used to send session id from second SETUP request + bool serverReplyFlag; // Used for communication between the PVStream modules (network module and the task scheduler) + bool getStateFlag; // Used to ensure that the PE's main loop has been called + bool pvServerIsSetFlag; // Used to indicate if we are streaming from PVServer or not + bool tSIDIsSetFlag; // Used to send session id from second SETUP request uint32 iServerVersionNumber; // Version number of PVSS - int32 prerollDuration; //Saves the jitter buffer size + int32 prerollDuration; // Saves the jitter buffer size - int32 fwp_counter; //Id of the first returned firewall packet - int32 rtt; //Saves the round trip time for firewall exchange - uint32 roundTripDelay; //Saves the round trip delay for a DESCRIBE request - uint64 clientServerDelay; //Saves the client server delay during a DESCRIBE request + int32 fwp_counter; // Id of the first returned firewall packet + int32 rtt; // Saves the round trip time for firewall exchange + uint32 roundTripDelay; // Saves the round trip delay for a DESCRIBE request + uint64 clientServerDelay; // Saves the client server delay during a DESCRIBE request - bool pipeLineFlag; //Used to indicate a pipe lined request + bool pipeLineFlag; // Used to indicate a pipe lined request OSCL_HeapString<PVRTSPEngineNodeAllocator> iUserAgent; OSCL_HeapString<PVRTSPEngineNodeAllocator> iUserNetwork; @@ -214,6 +214,12 @@ class SessionInfo enum PVRTSPStreamingType iStreamingType; + RtspRangeType iPlaylistRange; + PVEffectiveTime iPlaylistPlayTime; + OSCL_HeapString<PVRTSPEngineNodeAllocator> iPlaylistQueryString; // Playlist query string + bool iPlaylistQueryStringFlag;// Flag to indicate query string's presence + OSCL_HeapString<PVRTSPEngineNodeAllocator> iPlaylistUri; // Playlist uri + bool iPlaylistUriFlag; // Flag to indicate playlist uri's presence bool iSessionCompleted; void UpdateSessionCompletionStatus(bool aSessionCompleted) { @@ -227,10 +233,13 @@ class SessionInfo pvServerIsSetFlag(false), iServerVersionNumber(0), roundTripDelay(0), + iPlaylistQueryStringFlag(false), + iPlaylistUriFlag(false), iSessionCompleted(false) { iUserAgent += _STRLIT_CHAR("PVPlayer "); iReqPlayRange.format = RtspRangeType::INVALID_RANGE; + iPlaylistRange.iPlaylistUrl[0] = '\0'; }; } ; @@ -249,6 +258,7 @@ typedef PVMFGenericNodeCommand<PVRTSPEngineNodeAllocator> PVRTSPEngineCommandBas enum TPVMFRtspNodeCommand //TPVMFGenericNodeCommand { PVMF_RTSP_NODE_ERROR_RECOVERY = PVMF_GENERIC_NODE_COMMAND_LAST + 1 + , PVMF_RTSP_NODE_PLAYLIST_PLAY , PVMF_RTSP_NODE_CANCELALLRESET }; class PVRTSPEngineCommand: public PVRTSPEngineCommandBase @@ -370,6 +380,7 @@ class PVRTSPEngineNode OSCL_IMPORT_REF PVMFStatus SendRtspTeardown(PVRTSPEngineCommand &aCmd); OSCL_IMPORT_REF virtual bool parseURL(const char* aURL); OSCL_IMPORT_REF PVMFStatus processIncomingMessage(RTSPIncomingMessage &iIncomingMsg); + OSCL_IMPORT_REF PVMFStatus populatePlayRequestFields(RTSPOutgoingMessage &aMsg); OSCL_IMPORT_REF virtual PVMFStatus composeSetupRequest(RTSPOutgoingMessage &iMsg, StreamInfo &aSelected); OSCL_IMPORT_REF PVMFStatus populateCommonSetupFields(RTSPOutgoingMessage &iMsg, StreamInfo &aSelected); OSCL_IMPORT_REF PVMFStatus composeSetupMessage(RTSPOutgoingMessage &iMsg); @@ -612,7 +623,6 @@ class PVRTSPEngineNode OSCL_IMPORT_REF virtual PVMFStatus GetKeepAliveMethod(int32 &aTimeout, bool &aUseSetParameter, bool &aKeepAliveInPlay); - OSCL_IMPORT_REF virtual PVMFStatus GetRTSPTimeOut(int32 &aTimeout); OSCL_IMPORT_REF virtual PVMFStatus SetRTSPTimeOut(int32 aTimeout); @@ -675,6 +685,8 @@ class PVRTSPEngineNode PVRTSP_ENGINE_NODE_STATE_WAIT_PLAY, PVRTSP_ENGINE_NODE_STATE_PLAY_DONE, + PVRTSP_ENGINE_NODE_STATE_WAIT_PLAYLIST_PLAY, + PVRTSP_ENGINE_NODE_STATE_WAIT_PAUSE, PVRTSP_ENGINE_NODE_STATE_PAUSE_DONE, @@ -725,7 +737,9 @@ class PVRTSPEngineNode RTSPParser *iRTSPParser; + protected: uint32 iOutgoingSeq; + private: bool bNoRecvPending;//an Recv() is pending on RTSP socket @@ -759,9 +773,9 @@ class PVRTSPEngineNode }; + protected: //temp string compose buffer for internal use RTSP_MAX_FULL_REQUEST_SIZE OsclMemoryFragment iRTSPEngTmpBuf; - protected: OsclMemoryFragment iEntityMemFrag; private: // Queue of commands for cancel @@ -812,9 +826,13 @@ class PVRTSPEngineNode void ChangeExternalState(TPVMFNodeInterfaceState aNewState); + protected: // Handle command and data events - PVMFCommandId AddCmdToQueue(PVRTSPEngineCommand& aCmd); - PVMFStatus DispatchCommand(PVRTSPEngineCommand& aCmd); + OSCL_IMPORT_REF PVMFCommandId AddCmdToQueue(PVRTSPEngineCommand& aCmd); + OSCL_IMPORT_REF virtual PVMFStatus DispatchCommand(PVRTSPEngineCommand& aCmd); + OSCL_IMPORT_REF PVMFStatus processDispatchCommand(PVRTSPEngineCommand& aCmd, PVMFStatus iRet, bool bRevertToPreviousStateImpossible, bool bErrorRecoveryImpossible); + + private: bool ProcessCommand(PVRTSPEngineCommand& aCmd); bool rtspParserLoop(void); @@ -852,7 +870,9 @@ class PVRTSPEngineNode PVMFStatus composeOptionsRequest(RTSPOutgoingMessage&); PVMFStatus composeDescribeRequest(RTSPOutgoingMessage&); - PVMFStatus composePlayRequest(RTSPOutgoingMessage &iMsg); + protected: + OSCL_IMPORT_REF virtual PVMFStatus composePlayRequest(RTSPOutgoingMessage &iMsg); + private: PVMFStatus composeStopRequest(RTSPOutgoingMessage &iMsg); PVMFStatus composePauseRequest(RTSPOutgoingMessage &iMsg); PVMFStatus composeKeepAliveRequest(RTSPOutgoingMessage &aMsg); @@ -864,12 +884,14 @@ class PVRTSPEngineNode //should merge togather and move to jitter buffer PVMFStatus composeSessionURL(RTSPOutgoingMessage &aMsg); PVMFStatus composeMediaURL(int aTrackID, StrPtrLen &aMediaURI); - - void ReportInfoEvent(PVMFEventType aEventType, - OsclAny* aEventData = NULL, - PVUuid* aEventUUID = NULL, - int32* aEventCode = NULL); - + protected: + OSCL_IMPORT_REF virtual PVMFStatus checkForAbsoluteMediaURL(const char *sdpMediaURL, StrPtrLen &aMediaURI); + OSCL_IMPORT_REF virtual PVMFStatus composeAbsoluteMediaURL(const char *sdpMediaURL, StrPtrLen &aMediaURI); + OSCL_IMPORT_REF void ReportInfoEvent(PVMFEventType aEventType, + OsclAny* aEventData = NULL, + PVUuid* aEventUUID = NULL, + int32* aEventCode = NULL); + private: void MapRTSPCodeToEventCode(RTSPStatusCode aStatusCode, int32& aEventCode); PVMFStatus CancelCurrentOps(); @@ -883,7 +905,9 @@ class PVRTSPEngineNode void ResetSessionInfo(void); PVRTSPEngineNodeExtensionInterface* iExtensionInterface; + protected: OSCL_HeapString<PVRTSPEngineNodeAllocator> iRtspPrefixedURL; + private: RTSPEntityBody iEmbeddedData; diff --git a/protocols/rtsp_client_engine/inc/pvrtspenginenodeextensioninterface.h b/protocols/rtsp_client_engine/inc/pvrtspenginenodeextensioninterface.h index ee73e2a6d..7b5fd235c 100644 --- a/protocols/rtsp_client_engine/inc/pvrtspenginenodeextensioninterface.h +++ b/protocols/rtsp_client_engine/inc/pvrtspenginenodeextensioninterface.h @@ -75,6 +75,12 @@ enum PVRTSPStreamingType PVRTSP_MS_TCP }; +typedef enum +{ + PVEffectiveTime_NOW, + PVEffectiveTime_END_OF_CLIP, + PVEffectiveTime_END_OF_PLAYLIST +} PVEffectiveTime; struct StreamInfo { diff --git a/protocols/rtsp_client_engine/src/pvrtsp_client_engine_node.cpp b/protocols/rtsp_client_engine/src/pvrtsp_client_engine_node.cpp index b1ecad03c..0b8fed3ff 100644 --- a/protocols/rtsp_client_engine/src/pvrtsp_client_engine_node.cpp +++ b/protocols/rtsp_client_engine/src/pvrtsp_client_engine_node.cpp @@ -1267,13 +1267,14 @@ bool PVRTSPEngineNode::ProcessCommand(PVRTSPEngineCommand& aInCmd) return true; } -PVMFStatus PVRTSPEngineNode::DispatchCommand(PVRTSPEngineCommand& aCmd) +OSCL_EXPORT_REF PVMFStatus PVRTSPEngineNode::DispatchCommand(PVRTSPEngineCommand& aCmd) { PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVRTSPEngineNode::DispatchCommand() in")); bool bRevertToPreviousStateImpossible = true; bool bErrorRecoveryImpossible = true; PVMFStatus iRet = PVMFFailure; + switch (aCmd.iCmd) { case PVMF_GENERIC_NODE_QUERYUUID: @@ -1448,6 +1449,17 @@ PVMFStatus PVRTSPEngineNode::DispatchCommand(PVRTSPEngineCommand& aCmd) break; } + PVMFStatus retVal = processDispatchCommand(aCmd, iRet, bRevertToPreviousStateImpossible, bErrorRecoveryImpossible); + if ((retVal == PVMFPending) || (iCurrentErrorCode != PVMFRTSPClientEngineNodeErrorEventStart)) + { + return retVal; + } + + return iRet; +} + +OSCL_EXPORT_REF PVMFStatus PVRTSPEngineNode::processDispatchCommand(PVRTSPEngineCommand& aCmd, PVMFStatus iRet, bool bRevertToPreviousStateImpossible, bool bErrorRecoveryImpossible) +{ if (iRet != PVMFPending) { if (iRet != PVMFSuccess) @@ -1589,7 +1601,7 @@ void PVRTSPEngineNode::CommandComplete(PVRTSPEngineNodeCmdQ& aCmdQ, } // Handle command and data events -PVMFCommandId PVRTSPEngineNode::AddCmdToQueue(PVRTSPEngineCommand& aCmd) +OSCL_EXPORT_REF PVMFCommandId PVRTSPEngineNode::AddCmdToQueue(PVRTSPEngineCommand& aCmd) { PVMFCommandId id; @@ -2351,9 +2363,8 @@ OSCL_EXPORT_REF PVMFStatus PVRTSPEngineNode::processEntityBody(RTSPIncomingMessa bSrvRespPending = true; } - PVMFStatus tmpRet = PVMFSuccess; OSCL_UNUSED_ARG(aEntityMemFrag); - return tmpRet; + return PVMFSuccess; } @@ -2488,7 +2499,7 @@ OSCL_EXPORT_REF PVMFStatus PVRTSPEngineNode::composeSetupRequest(RTSPOutgoingMes return composeSetupMessage(iMsg); } -PVMFStatus PVRTSPEngineNode::composePlayRequest(RTSPOutgoingMessage &aMsg) +OSCL_EXPORT_REF PVMFStatus PVRTSPEngineNode::composePlayRequest(RTSPOutgoingMessage &aMsg) { aMsg.reset(); aMsg.numOfTransportEntries = 0; @@ -2497,6 +2508,27 @@ PVMFStatus PVRTSPEngineNode::composePlayRequest(RTSPOutgoingMessage &aMsg) aMsg.cseq = iOutgoingSeq++; aMsg.cseqIsSet = true; + if (populatePlayRequestFields(aMsg) == PVMFFailure) + { + return PVMFFailure; + } + + if (aMsg.compose() == false) + { + return PVMFFailure; + } + + iSessionInfo.clientServerDelay = 0; + uint32 clock = 0; + bool overflowFlag = false; + iRoundTripClockTimeBase.GetCurrentTime32(clock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC); + iSessionInfo.clientServerDelay = clock; + + return PVMFSuccess; +} + +PVMFStatus PVRTSPEngineNode::populatePlayRequestFields(RTSPOutgoingMessage &aMsg) +{ if (iSessionInfo.iSID.get_size()) { aMsg.sessionId.setPtrLen(iSessionInfo.iSID.get_cstr(), iSessionInfo.iSID.get_size()); @@ -2567,17 +2599,6 @@ PVMFStatus PVRTSPEngineNode::composePlayRequest(RTSPOutgoingMessage &aMsg) return PVMFFailure; } - if (aMsg.compose() == false) - { - return PVMFFailure; - } - - iSessionInfo.clientServerDelay = 0; - uint32 clock = 0; - bool overflowFlag = false; - iRoundTripClockTimeBase.GetCurrentTime32(clock, overflowFlag, PVMF_MEDIA_CLOCK_MSEC); - iSessionInfo.clientServerDelay = clock; - return PVMFSuccess; } @@ -2746,6 +2767,23 @@ PVMFStatus PVRTSPEngineNode::composeMediaURL(int aTrackID, StrPtrLen &aMediaURI) return PVMFFailure; } + // Check for absolute media level URL + PVMFStatus retVal = checkForAbsoluteMediaURL(sdpMediaURL, aMediaURI); + if (retVal == PVMFFailure) + { + retVal = composeAbsoluteMediaURL(sdpMediaURL, aMediaURI); + } + + return retVal; +} + +OSCL_EXPORT_REF PVMFStatus PVRTSPEngineNode::checkForAbsoluteMediaURL(const char *sdpMediaURL, StrPtrLen &aMediaURI) +{ + PVMFStatus retVal = PVMFFailure; + OSCL_StackString<16> rtsp_str = _STRLIT_CHAR("rtsp"); + OSCL_StackString<16> rtspt_str = _STRLIT_CHAR("rtspt"); + OSCL_StackString<16> schemeDelimiter = _STRLIT_CHAR("://"); + if (!oscl_strncmp(sdpMediaURL, rtsp_str.get_cstr(), rtsp_str.get_size())) { if (!oscl_strncmp(sdpMediaURL, rtspt_str.get_cstr(), rtspt_str.get_size())) @@ -2753,7 +2791,7 @@ PVMFStatus PVRTSPEngineNode::composeMediaURL(int aTrackID, StrPtrLen &aMediaURI) const char* actualURL = oscl_strstr(sdpMediaURL, schemeDelimiter.get_cstr()); if (actualURL == NULL) { - return PVMFErrArgument; + retVal = PVMFErrArgument; } else { @@ -2764,56 +2802,66 @@ PVMFStatus PVRTSPEngineNode::composeMediaURL(int aTrackID, StrPtrLen &aMediaURI) iRtspPrefixedURL += actualURL; aMediaURI = iRtspPrefixedURL.get_cstr(); + retVal = PVMFSuccess; } else { aMediaURI = sdpMediaURL; + retVal = PVMFSuccess; } - } - else - { - const char *sdpSessionURL = (iSessionInfo.iSDPinfo->getSessionInfo())->getControlURL(); + return retVal; +} - if (!oscl_strncmp(sdpSessionURL, rtsp_str.get_cstr(), rtsp_str.get_size())) - { - ((mbchar*)iRTSPEngTmpBuf.ptr)[0] = '\0'; - uint tmpLen = iRTSPEngTmpBuf.len; +OSCL_EXPORT_REF PVMFStatus PVRTSPEngineNode::composeAbsoluteMediaURL(const char *sdpMediaURL, StrPtrLen &aMediaURI) +{ + PVMFStatus retVal = PVMFFailure; + OSCL_StackString<16> rtsp_str = _STRLIT_CHAR("rtsp"); + const char *sdpSessionURL = (iSessionInfo.iSDPinfo->getSessionInfo())->getControlURL(); - if (composeURL(sdpSessionURL, sdpMediaURL, - ((mbchar*)iRTSPEngTmpBuf.ptr), tmpLen) != true) - { - return PVMFFailure; - } + if (!oscl_strncmp(sdpSessionURL, rtsp_str.get_cstr(), rtsp_str.get_size())) + { + ((mbchar*)iRTSPEngTmpBuf.ptr)[0] = '\0'; + uint tmpLen = iRTSPEngTmpBuf.len; + if (composeURL(sdpSessionURL, sdpMediaURL, + ((mbchar*)iRTSPEngTmpBuf.ptr), tmpLen) != true) + { + retVal = PVMFFailure; + } + else + { aMediaURI = ((mbchar*)iRTSPEngTmpBuf.ptr); + retVal = PVMFSuccess; + } + } + //Compose absolute URL + else + { + char *baseURL; + if (iSessionInfo.iContentBaseURL.get_size()) + { + baseURL = iSessionInfo.iContentBaseURL.get_str(); } - //Compose absolute URL else { - char *baseURL; - if (iSessionInfo.iContentBaseURL.get_size()) - { - baseURL = iSessionInfo.iContentBaseURL.get_str(); - } - else - { - baseURL = iSessionInfo.iSessionURL.get_str(); - } + baseURL = iSessionInfo.iSessionURL.get_str(); + } - { - uint tmpLen = iRTSPEngTmpBuf.len; - if (composeURL((const char *)baseURL, - sdpMediaURL, - ((mbchar*)iRTSPEngTmpBuf.ptr), tmpLen) != true) - { - return PVMFFailure; - } - } + uint tmpLen = iRTSPEngTmpBuf.len; + if (composeURL((const char *)baseURL, + sdpMediaURL, + ((mbchar*)iRTSPEngTmpBuf.ptr), tmpLen) != true) + { + retVal = PVMFFailure; + } + else + { aMediaURI = ((mbchar*)iRTSPEngTmpBuf.ptr); + retVal = PVMFSuccess; } } - return PVMFSuccess; + return retVal; } PVMFStatus PVRTSPEngineNode::processCommonResponse(RTSPIncomingMessage &aMsg) @@ -3677,10 +3725,10 @@ OSCL_EXPORT_REF void PVRTSPEngineNode::ReportErrorEvent(PVMFEventType aEventType } } -void PVRTSPEngineNode::ReportInfoEvent(PVMFEventType aEventType, - OsclAny* aEventData, - PVUuid* aEventUUID, - int32* aEventCode) +OSCL_EXPORT_REF void PVRTSPEngineNode::ReportInfoEvent(PVMFEventType aEventType, + OsclAny* aEventData, + PVUuid* aEventUUID, + int32* aEventCode) { PVLOGGER_LOGMSG(PVLOGMSG_INST_LLDBG, iLogger, PVLOGMSG_STACK_TRACE, (0, "PVRTSPEngineNode:NodeInfoEvent Type %d Data %d" @@ -4700,7 +4748,6 @@ OSCL_EXPORT_REF bool PVRTSPEngineNode::clearEventQueue(void) } - /** * Called by the command handler AO to do the Cancel All */ diff --git a/protocols/rtsp_client_engine/src/pvrtspenginenodeextensioninterface_impl.cpp b/protocols/rtsp_client_engine/src/pvrtspenginenodeextensioninterface_impl.cpp index 319eb0784..00816c21f 100644 --- a/protocols/rtsp_client_engine/src/pvrtspenginenodeextensioninterface_impl.cpp +++ b/protocols/rtsp_client_engine/src/pvrtspenginenodeextensioninterface_impl.cpp @@ -155,7 +155,6 @@ OSCL_EXPORT_REF PVMFStatus PVRTSPEngineNodeExtensionInterfaceImpl::GetKeepAliveM return iContainer->GetKeepAliveMethod(aTimeout, aUseSetParameter, aKeepAliveInPlay); } - OSCL_EXPORT_REF PVMFStatus PVRTSPEngineNodeExtensionInterfaceImpl::GetRTSPTimeOut(int32 &aTimeout) { return iContainer->GetRTSPTimeOut(aTimeout); diff --git a/protocols/rtsp_client_engine/src/pvrtspenginenodeextensioninterface_impl.h b/protocols/rtsp_client_engine/src/pvrtspenginenodeextensioninterface_impl.h index 82d4701d1..0344d1c63 100644 --- a/protocols/rtsp_client_engine/src/pvrtspenginenodeextensioninterface_impl.h +++ b/protocols/rtsp_client_engine/src/pvrtspenginenodeextensioninterface_impl.h @@ -92,8 +92,6 @@ class PVRTSPEngineNodeExtensionInterfaceImpl : public PVInterfaceImpl<PVRTSPEngi OSCL_IMPORT_REF virtual PVMFStatus SetKeepAliveMethod_keep_alive_in_play(bool aKeepAliveInPlay = false); OSCL_IMPORT_REF virtual PVMFStatus GetKeepAliveMethod(int32 &aTimeout, bool &aUseSetParameter, bool &aKeepAliveInPlay); - - OSCL_IMPORT_REF virtual PVMFStatus GetRTSPTimeOut(int32 &aTimeout); OSCL_IMPORT_REF virtual PVMFStatus SetRTSPTimeOut(int32 aTimeout); |