diff -r 798ee5f1972c -r 826cea16efd9 videoutils_plat/dvrengine_api/inc/ipvideo/CDvrSdpParser.h --- a/videoutils_plat/dvrengine_api/inc/ipvideo/CDvrSdpParser.h Thu Aug 19 10:54:18 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,671 +0,0 @@ -/* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Class for parsing a SDP.* -*/ - - - - -#ifndef CDVRSDPPARSER_H -#define CDVRSDPPARSER_H - -// INCLUDES -#include - -// CONSTANTS -// None - -// MACROS -// None - -// DATA TYPES -// None - -// FORWARD DECLARATIONS -// None - -// CLASS DECLARATION - -/** -* Class that parses SDP. Not fully but enough to set up a -* rtp stream from rtsp based on information extracted by this class. -* -* @lib CommonRecordingEngine.lib -* @since Series 60 3.0 -*/ -class CDvrSdpParser : public CBase - { - -public: // Data types - - /** - * Enum for indicating contents of the rtp stream(s). - */ - enum TDvrPacketProvidings - { - EDvrAudioOnly = 0, /**< This packet source feeds only audio stream */ - EDvrVideoOnly, /**< This packet source feeds only video stream */ - EDvrBothAudioAndVideo, /**< This packet source feeds audio and video */ - EDvrNoProgramAtAll, /**< Nothing useful found */ - EDvrSourceCount /**< Final number of different sources */ - }; - - /** - * Defines media point struct. - */ - struct SMediaPoint - { - /* - * Start point of media in SDP. - */ - TInt iStart; - - /* - * Length in bytes of media in SDP. - */ - TInt iLength; - - }; - -public: // Constructors and destructor - - /** - * Two-phased constructor. - * @return CDvrSdpParser pointer to CDvrSdpParser class. - */ - IMPORT_C static CDvrSdpParser* NewL(); - - /** - * Two-phased constructor. - */ - IMPORT_C static CDvrSdpParser* NewLC(); - - /** - * Destructor. - */ - IMPORT_C virtual ~CDvrSdpParser(); - -public: // New functions - - /** - * Method that is used to give SDP to this class. - * "PLAY rtsp://vishnu.wipsl.com/oops/winter_fun.mp4/ RTSP/1.0\r\n..." - * @since Series 60 3.0 - * @param aSDP is the SDP data. - * @param aBaseUrl is the rtsp url used to fetch this sdp. - * If it is not available, a (NULL,0) descriptor needs to be passed. - * It will be used to construct media urls in case where there is no - * absolute media urls in the sdp. - * @return none. - */ - IMPORT_C void TryParseL( const TDesC8 &aSdp , - const TDesC8 &aBaseUrl ); - - /** - * Parses SDP file. - * @since Series 60 3.0 - * @param aSDP is the SDP data. - * @return none. - */ - IMPORT_C void TryParseL( const TDesC8& aSdp ); - - /** - * Method for adding new SDP line. - * @since Series 60 3.0 - * @param aStreamId a section where to add the string. - * KErrNotFound: common part - * 0 (usually) : video - * 1 (usually) : audio - * 2 (usually) : subtitle (not supported yet) - * @param aLine a string to add. - * @rerturn a system wide error code. - */ - IMPORT_C void NewLineL( const TInt aStreamId, - const TDesC8& aLine ); - - /** - * Method for getting SDP data. - * @since Series 60 3.0 - * @param aSdp a pointer to SDP data. - * @rerturn KErrNone if SDP available, otherwise KErrNotFound. - */ - IMPORT_C TInt GetSdp( TPtrC8& aSdp ); - - /** - * Method for asking whether audio and/or video is included. - * @since Series 60 3.0 - * @param none. - * @return indication about stream contents. - */ - IMPORT_C CDvrSdpParser::TDvrPacketProvidings SupportedContent( void ); - - /** - * Method for getting attributes related to session. - * @since Series 60 3.0 - * @param none. - * @rerturn array of strings, may be empty. - */ - IMPORT_C RArray& SessionAttributes( void ); - - /** - * Method for getting attributes related to session. - * @since Series 60 3.0 - * @param none. - * @rerturn array of strings, may be empty. - */ - IMPORT_C RArray& VideoAttributes( void ); - - /** - * Method for getting attributes related to session. - * @since Series 60 3.0 - * @param none. - * @rerturn array of strings, may be empty. - */ - IMPORT_C RArray& AudioAttributes( void ); - - /** - * Method for getting all data streams related to session. - * @since Series 60 3.0 - * @param none. - * @rerturn array of strings, may be empty. - */ - IMPORT_C RArray& DataStreams( void ); - - /** - * Method for getting Ipv6 of the SDP having been parsed. - * @since Series 60 3.0 - * @param none. - * @return ETrue if SDP had Ipv6 address in it. - */ - IMPORT_C TBool IsIpv4Sdp( void ); - - /** - * Method for getting multicastness of the SDP having been parsed. - * @since Series 60 3.0 - * @param none. - * @return ETrue if SDP had multicast characteristics in it. - */ - IMPORT_C TBool IsMultiCastSdp( void ); - - /** - * Method for getting audio control addr e.g. the text from sdp line - * that begins with a=control: and is located in audio media block - * @since Series 60 3.0 - * @param none. - * @return a audio control addr. - */ - IMPORT_C TPtrC8 AudioControlAddr( void ); - - /** - * Method for getting video control addr e.g. the text from sdp line - * that begins with a=control: and is located in video media block - * @since Series 60 3.0 - * @param none. - * @return a video control addr. - */ - IMPORT_C TPtrC8 VideoControlAddr( void ); - - /** - * Method for getting audio ip addr e.g. the text from sdp line - * that begins with c=IN IP... : and is located in audio media block - * @since Series 60 3.0 - * @param none. - * @return video control addr. ownership is NOT transferred. may be NULL. - */ - IMPORT_C TPtrC8 AudioIpAddr( void ); - - /** - * Method for getting video ip addr e.g. the text from sdp line - * that begins with c=IN IP... : and is located in video media block - * @since Series 60 3.0 - * @param none. - * @return video control addr. ownership is NOT transferred. may be NULL. - */ - IMPORT_C TPtrC8 VideoIpAddr( void ); - - /** - * Getter for audio port. - * @since Series 60 3.0 - * @param none. - * @return a audio port number. - */ - IMPORT_C TInt AudioPort( void ); - - /** - * Getter for video port. - * @since Series 60 3.0 - * @param none. - * @return a video port number. - */ - IMPORT_C TInt VideoPort( void ); - - /** - * Getter for audio bitrate. - * @since Series 60 3.0 - * @param none. - * @return a audio bit rate. - */ - IMPORT_C TInt AudioBitrate( void ); - - /** - * Getter for video bitrate. - * @since Series 60 3.0 - * @param none. - * @return a video bit rate. - */ - IMPORT_C TInt VideoBitrate( void ); - - /** - * Getter for audio stream id. - * @since Series 60 3.0 - * @param none. - * @return a audio stream id. - */ - IMPORT_C TInt AudioStreamId( void ); - - /** - * Getter for video stream id. - * @since Series 60 3.0 - * @param none. - * @return a video stream id. - */ - IMPORT_C TInt VideoStreamId( void ); - - /** - * Getter for video timer granularity - * @since Series 60 3.0 - * @param none. - * @return Video stream timestamp granularity as 1/s. - */ - IMPORT_C TUint32 VideoTimerGranularity( void ); - - /** - * Getter for audio timer granularity - * @since Series 60 3.0 - * @param none. - * @return Audio stream timestamp granularity as 1/s. - */ - IMPORT_C TUint32 AudioTimerGranularity( void ); - - /** - * Checker method for SDP representing realnetworks realmedia content - * @since Series 60 3.0 - * @param none. - * @return ETrue if sdp presents realmedia stream. - */ - IMPORT_C TBool IsRealMediaContent( void ); - - /** - * Media identifier for audio. From a=rtpmap:96 H264/90000 - * the number 96. Usually value is 96 for video and - * 97 for audio but might be other - * @since Series 60 3.0 - * @param none. - * @return Media id - */ - IMPORT_C TInt MediaIdentifierAudio( void ); - /** - * Media identifier for video. From a=rtpmap:96 H264/90000 - * the number 96. Usually value is 96 for video and - * 97 for audio but might be other - * @since Series 60 3.0 - * @param none. - * @return Media id. - */ - IMPORT_C TInt MediaIdentifierVideo( void ); - - /** - * Checker method for SDP representing livestream. - * @since Series 60 3.0 - * @param none. - * @return ETrue if sdp presents livestream. - */ - IMPORT_C TBool IsLiveStream( void ); - -protected: // Constructors and destructor - - /** - * C++ default constructor. - */ - CDvrSdpParser(); - - /** - * By default Symbian 2nd phase constructor is private. - * @param a a reference to socket server . - */ - void ConstructL(); - -private: // New methods - - /** - * Finds media(s) from SDP file. - * @since Series 60 3.0 - * @param aSDP is the SDP data. - * @return none. - */ - void FindMediasL( const TDesC8& aSdp ); - - /** - * Finds media(s) from SDP file. - * @since Series 60 3.0 - * @param aPoints a array for media points. - * @return none. - */ - void MakeMediaBuffersL( RArray& aPoints ); - - /** - * Finds session attributes from SDP file. - * @since Series 60 3.0 - * @param aPoints a array for media points. - * @return none. - */ - void FindSessionAttributesL( RArray& aPoints ); - - /** - * Finds media(s) from SDP file. - * @since Series 60 3.0 - * @param aStreamId a section where to add the string. - * @param aLine a string to add. - * @return none. - */ - void InserNewLineL( TInt aStreamId, - const TDesC8& aLine ); - - /** - * Method for finding points of medias in SDP. - * @since Series 60 3.0 - * @param aPoints a array for media points. - * @rerturn none. - */ - void FindMediaPointsL( RArray& aPoints ); - - /** - * Method for finding next media section start in SDP. - * @since Series 60 3.0 - * @param aPtr a pointer to buffer where serch from. - * @rerturn a next media section start point. - */ - TInt MediaSectionStart( const TDesC8& aPtr ); - - /** - * Append media info from media section to array. - * @since Series 60 3.0 - * @param aMediaPtr a pointer to buffer of media section. - * @param aAddress a IP address of media. - * @return none. - */ - void UpdateMediaInfoL( const TDesC8& aMediaPtr, - HBufC8*& aAddress ); - - /** - * Finds IP addr from a buffer. - * @since Series 60 3.0 - * @param aPtr a pointer to buffer where to search. - * @return a IP address if found. - */ - HBufC8* GetIpAddrL( const TDesC8& aPtr ); - - /** - * Getter for clock rate of media. - * @since Series 60 3.0 - * @param aPtr a pointer to buffer where serch from. - * @return a clock rate value of the media. - */ - TUint GetClockRateL( const TDesC8& aPtr ); - - /** - * Append media info from media section to array. - * @since Series 60 3.0 - * @param aMediaPtr a pointer to buffer of media section. - * @param aControlAddr a control address of media. - * @return none. - */ - void GetControlL( const TDesC8& aMediaPtr, - HBufC8*& aControlAddr ); - - /** - * Method for checking if addr is multicast addr. - * @since Series 60 3.0 - * @param aCLine is c= line from SDP. - * @return none. - */ - void CheckForMulticast( const TDesC8& aLine ); - - /** - * Method that picks up all attribute lines from sdp - * block and stores them in given array - * @since Series 60 3.0 - * @param aSdpSection is section from sdp. In practice m=video section - * or m=audio section or the common section from beginning. - * @aAttributeList is an array where each attribute-line is stored. - */ - void FindAttributesL ( const TDesC8& aSdpSection, - RArray& aAttributeList ); - - /** - * Method that picks up all data stream lines from sdp. - * @since Series 60 3.0 - * @param aSdpSection is section from sdp. In practice m=video section - * or m=audio section or the common section from beginning. - * @aStreamsList is an array where each data stream-line is stored. - * @return none. - */ - void FindDataStreamsL( const TDesC8& aSdpSection, - RArray& aStreamsList ); - - /** - * Reads integer value from a buffer. - * @since Series 60 3.0 - * @param aPtr a pointer to buffer where serch from. - * @param aKeyword a keyword for line. - * @return a integer value base on keyword. - */ - TInt GetIntL( const TDesC8& aPtr, - const TDesC8& aKeyword ); - - /** - * Reads string value from a buffer. - * @since Series 60 3.0 - * @param aPtr a pointer to buffer where serch from. - * @param aKeyword a keyword for line. - * @return a buffer base on keyword. - */ - HBufC8* GetStringL( const TDesC8& aPtr, - const TDesC8& aKeyword ); - - /** - * Finds location where keyword data start. - * @since Series 60 3.0 - * @param aPtr a pointer to buffer where serch from. - * @param aKeyword a keyword for line. - * @return a point in buffer where keyword data start. - */ - TInt FindStart( const TDesC8& aPtr, - const TDesC8& aKeyword ); - - /** - * Finds location where keyword data ends. - * @since Series 60 3.0 - * @param aPtr a pointer to buffer where serch from. - * @param aStart a point where keyword data starts. - * Return a point to line change. - * @param aIgnoreSpace if true, points to the line feed only if. - * @return a point in buffer where keyword data end. - */ - TInt GetLen( const TDesC8& aPtr, - const TInt aStart, - const TBool aIgnoreSpace = EFalse ); - - /** - * Finds smaller non error value integer. - * @since Series 60 3.0 - * @param aValue1 a value 1 for comparison. - * @param aValue2 a value 2 for comparison. - * @return smaller integer if one or both inputs are positive, - otherwise return KErrNotFound. - */ - TInt MinNonError( const TInt aValue1, - const TInt aValue2 ); - - /** - * Convert a string to unsigned integer. - * @since Series 60 3.0 - * @param aString a string to convert. - * @return a integer value base on string. - */ - TUint StrToUint( const TDesC8& aString ); - - /** - * Delete variables. - * @since Series 60 3.0 - * @param none. - * @return none. - */ - void DeleteVariables( void ); - -private: // Data - - /** - * Pointer to actual SDP text being parsed. - */ - HBufC8* iSdp; - - /** - * String containing (possible) base url. - */ - HBufC8* iBaseUrl; - - /** - * IP in common section. - */ - HBufC8* iCommonIp; - - /** - * Media section buffer(s) - */ - RArray iMediaBuf; - - /** - * Media attributes for both audio and video. - */ - RArray iSessionAttributes; - - /** - * Media attributes for audio not containing a=control attr. - */ - RArray iAudioAttributes; - - /** - * Media attributes for video not containing a=control attr. - */ - RArray iVideoAttributes; - - /** - * Data streams found from SDP. - */ - RArray iDataStreams; - - /** - * Url that may be used to SETUP iAudioControlAddr RTSP/1.0\r. - */ - HBufC8* iAudioControlAddr; - - /** - * Url that may be used to SETUP iVideoControlAddr RTSP/1.0\r. - */ - HBufC8* iVideoControlAddr; - - /** - * Ip number from audio block from c=IP.. line. - */ - HBufC8* iAudioIpAddr; - - /** - * Ip number from video block from c=IP.. line. - */ - HBufC8* iVideoIpAddr; - - /** - * Audio port or KErrNotFound if not available. - */ - TInt iAudioPort; - - /** - * Video port or KErrNotFound if not available. - */ - TInt iVideoPort; - - /** - * Subtitle port or KErrNotFound if not available. - */ - TInt iTitlePort; - - /** - * Audio bitrate or KErrNotFound if not available. - */ - TInt iAudioBitrate; - - /** - * Video bitrate or KErrNotFound if not available. - */ - TInt iVideoBitrate; - - /** - * Audio strema id. - */ - TInt iAudioStreamId; - - /** - * Video stream id. - */ - TInt iVideoStreamId; - - /** - * How much is one video rtp timer tick in wall clock time - * (usually 1/90000 seconds). - */ - TUint32 iVideoTimerGranularity; - - /** - * How much is one audio rtp timer tick in wall clock time - * (usually 1/ seconds). - */ - TUint32 iAudioTimerGranularity; - - /** - * If the sdp parsed was Ipv4 or not. - */ - TBool iIsIpv4; - - /** - * If the sdp parsed was multicast or not. - */ - TBool iIsMulticast; - - /** - * Media identifier for audio. From a=rtpmap:96 H264/90000 the number 96. - * Usually value 96 is for video and 97 for audio, but might be other. - */ - TInt iMediaIdentifierAudio; - - /** - * Media identifier for video. - */ - TInt iMediaIdentifierVideo; - - }; - -#endif // CDVRSDPPARSER_H - -// End of file