blob: 397304b99d45bb6e37b5a6ba59e2da1fdca2b635 [file] [log] [blame]
/* ------------------------------------------------------------------
* Copyright (C) 1998-2009 PacketVideo
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
* See the License for the specific language governing permissions
* and limitations under the License.
* -------------------------------------------------------------------
*/
#ifndef PVRTSP_ENGINE_NODE_EXTENSION_INTERFACE_H_INCLUDED
#define PVRTSP_ENGINE_NODE_EXTENSION_INTERFACE_H_INCLUDED
#ifndef PV_INTERFACE_H
#include "pv_interface.h"
#endif
#ifndef PVMF_RETURN_CODES_H_INCLUDED
#include "pvmf_return_codes.h"
#endif
#ifndef OSCL_STRING_H_INCLUDED
#include "oscl_string.h"
#endif
#ifndef OSCL_SOCKET_H_INCLUDED
#include "oscl_socket.h"
#endif
#ifndef PVMF_STREAMING_REAL_INTERFACES_INCLUDED
#include "pvmf_streaming_real_interfaces.h"
#endif
#ifndef PAYLOAD_PARSER_H_INCLUDED
#include "payload_parser.h"
#endif
#ifndef PVMF_EVENT_HANDLING_H_INCLUDED
#include "pvmf_event_handling.h"
#endif
#ifndef PVMF_SM_CONFIG_H_INCLUDED
#include "pvmf_sm_config.h"
#endif
// UUID for the extension interface
#define KPVRTSPEngineNodeExtensionUuid PVUuid(0x00000000,0x0000,0x4887,0xB1,0x0B,0x7E,0xE6,0x48,0x47,0xB2,0x05)
//Mimetypes for the custom interface
#define PVMF_RTSPENGINENODE_CUSTOM1_MIMETYPE "pvmf/RTSPEngineNode/Custom1"
#define PVMF_RTSPENGINENODE_MIMETYPE "pvmf/RTSPEngineNode"
#define PVMF_RTSPENGINENODE_BASEMIMETYPE "pvmf"
class SDPInfo;
struct RtspRangeType;
/** Enumerated list of port tags supported by this port */
typedef enum
{
PVMF_RTSP_NODE_PORT_TYPE_INPUT,
PVMF_RTSP_NODE_PORT_TYPE_OUTPUT,
PVMF_RTSP_NODE_PORT_TYPE_INPUT_OUTPUT
} PVMFRTSPNodePortTag;
enum PVRTSPStreamingType
{
PVRTSP_3GPP_UDP,
PVRTSP_3GPP_TCP,
PVRTSP_RM_HTTP,//Real http cloaking
PVRTSP_MS_UDP,
PVRTSP_MS_TCP
};
struct StreamInfo
{
int32 iSDPStreamId;
bool ssrcIsSet;
uint32 iSSRC;
uint32 iCliRTCPPort;
uint32 iCliRTPPort;
//As a default, RTCP packets are sent
//on the first available channel higher than the RTP channel.
//for UDP as transport, they are just the UDP port number
//for TCP as transport, they are the interleaved channel ID
uint32 iSerRTPPort;
uint32 iSerRTCPPort;
bool rtptimeIsSet;
uint32 rtptime;
bool seqIsSet;
uint32 seq;
bool b3gppAdaptationIsSet;
uint32 iBufSize; //bytes
uint32 iTargetTime; //ms
OsclNameString<PVNETWORKADDRESS_LEN> iSerIpAddr;
OSCL_HeapString<OsclMemAllocator> iMediaURI;
};
class PVRTSPEngineNodeServerInfo
{
public:
PVRTSPEngineNodeServerInfo()
{
iIsPVServer = false;
iRoundTripDelayInMS = 0;
iServerVersionNumber = 0;
}
virtual ~PVRTSPEngineNodeServerInfo()
{
};
bool iIsPVServer;
uint32 iRoundTripDelayInMS;
OSCL_HeapString<OsclMemAllocator> iServerName;
uint32 iServerVersionNumber;
};
#define PVRTSPENGINENODE_DEFAULT_KEEP_ALIVE_INTERVAL 55
#define PVRTSPENGINENODE_DEFAULT_RTSP_INACTIVITY_TIMER 15
#define PVRTSPENGINENODE_DEFAULT_NUMBER_OF_REDIRECT_TRIALS 8
//Forward Declarations
class PVMFPortInterface;
class PVRTSPEngineNodeExtensionInterface : public PVInterface
{
public:
virtual ~PVRTSPEngineNodeExtensionInterface() {}
//**********begin PVInterface
OSCL_IMPORT_REF virtual void addRef() = 0;
OSCL_IMPORT_REF virtual void removeRef() = 0;
OSCL_IMPORT_REF virtual bool queryInterface(const PVUuid& uuid, PVInterface*& iface) = 0;
//**********end PVInterface
OSCL_IMPORT_REF virtual PVMFStatus SetStreamingType(PVRTSPStreamingType aType = PVRTSP_3GPP_UDP) = 0;
//Either SetSessionURL() or SetSDPInfo() must be called before Init()
OSCL_IMPORT_REF virtual PVMFStatus SetSessionURL(OSCL_wString& aURL) = 0;
OSCL_IMPORT_REF virtual PVMFStatus GetSDP(OsclRefCounterMemFrag& aSDPBuf) = 0;
OSCL_IMPORT_REF virtual PVMFStatus SetRtspProxy(OSCL_String& aRtspProxyName, uint32 aRtspProxyPort) = 0;
OSCL_IMPORT_REF virtual PVMFStatus GetRtspProxy(OSCL_String& aRtspProxyName, uint32& aRtspProxyPort) = 0;
// to be called before init
OSCL_IMPORT_REF virtual bool IsRdtTransport() = 0;
OSCL_IMPORT_REF virtual void SetPortRdtStreamId(PVMFPortInterface* pPort,
int iRdtStreamId) = 0;
OSCL_IMPORT_REF virtual PVMFStatus SetSDPInfo(OsclSharedPtr<SDPInfo>& aSDPinfo, Oscl_Vector<StreamInfo, OsclMemAllocator> &aSelectedStream) = 0;
OSCL_IMPORT_REF virtual PVMFStatus GetServerInfo(PVRTSPEngineNodeServerInfo& aServerInfo) = 0;
OSCL_IMPORT_REF virtual PVMFStatus GetStreamInfo(Oscl_Vector<StreamInfo, OsclMemAllocator> &aSelectedStream) = 0;
// API to pass in Real related parameters
OSCL_IMPORT_REF virtual void SetRealChallengeCalculator(IRealChallengeGen* pChallengeCalc) = 0;
OSCL_IMPORT_REF virtual void SetRdtParser(IPayloadParser* pRdtParser) = 0;
//One of these must be called before Start()
OSCL_IMPORT_REF virtual PVMFStatus SetRequestPlayRange(const RtspRangeType& aRange) = 0;
OSCL_IMPORT_REF virtual PVMFStatus GetActualPlayRange(RtspRangeType& aRange) = 0;
OSCL_IMPORT_REF virtual PVMFStatus GetUserAgent(OSCL_wString& aUserAgent) = 0;
OSCL_IMPORT_REF virtual PVMFStatus SetClientParameters(OSCL_wString& aUserAgent,
OSCL_wString& aUserNetwork,
OSCL_wString& aDeviceInfo) = 0;
OSCL_IMPORT_REF virtual PVMFStatus SetAuthenticationParameters(OSCL_wString& aUserID,
OSCL_wString& aAuthentication,
OSCL_wString& aExpiration,
OSCL_wString& aApplicationSpecificString,
OSCL_wString& aVerification,
OSCL_wString& aSignature) = 0;
//OSCL_IMPORT_REF virtual PVMFStatus SetTimeout(uint32 aTimeout)=0;
//OSCL_IMPORT_REF virtual PVMFStatus GetTimeout(uint32& aTimeout)=0;
/**
* This API is to set the keep-alive mechanism for rtsp client.
*
* @param aTimeout The interval in milliseconds of sending the RTSP keep-alive commands.
* 0 to use server defined timeout value.
* @param aUseSetParameter true to use SET_PARAMETER; false to use OPTIONS
* @param aKeepAliveInPlay Turns on/off the sending RTSP keep-alive commands during PLAY
* @returns Completion status
*/
//OSCL_IMPORT_REF virtual PVMFStatus SetKeepAliveMethod(int32 aTimeout=0, bool aUseSetParameter=false, bool aKeepAliveInPlay=false)=0;
OSCL_IMPORT_REF virtual PVMFStatus SetKeepAliveMethod_timeout(int32 aTimeout = 0) = 0;
OSCL_IMPORT_REF virtual PVMFStatus SetKeepAliveMethod_use_SET_PARAMETER(bool aUseSetParameter = false) = 0;
OSCL_IMPORT_REF virtual PVMFStatus SetKeepAliveMethod_keep_alive_in_play(bool aKeepAliveInPlay = false) = 0;
OSCL_IMPORT_REF virtual PVMFStatus GetKeepAliveMethod(int32 &aTimeout, bool &aUseSetParameter, bool &aKeepAliveInPlay) = 0;
/**
* This method is called to enable/disable X-STR http header to be a part of the HTTP GET or POST methods
*
* @param aAddXSTRHeader boolean which indicates whether to set the header to ON or OFF
*
*/
OSCL_IMPORT_REF virtual PVMFStatus GetRTSPTimeOut(int32 &aTimeout) = 0;
OSCL_IMPORT_REF virtual PVMFStatus SetRTSPTimeOut(int32 aTimeout) = 0;
OSCL_IMPORT_REF virtual void UpdateSessionCompletionStatus(bool aSessionCompleted) = 0;
};
#endif //PVRTSP_ENGINE_NODE_EXTENSION_INTERFACE_H_INCLUDED