Creating and Managing an RTP session

This page describes how to create a new session with the socket server and how to open the session and set some of the session parameters. It also describes how to use an RTP [[[ERROR: [NOKX000E] Unable to find definition for key reference 'RRtpSession']]]RSocket interface.

To communicate with RTP, open a session with the socket server. You can open several sessions at the same time.

An active scheduler must be created and started before you open an RTP session.

Opening a session

[[[ERROR: [NOKX000E] Unable to find definition for key reference 'RRtpSession']]]RRtpSession::OpenL() opens an RTP session and starts it. The method has four overloads. RTCP is enabled for the first three overloads and is disabled for the last overload.

IMPORT_C void OpenL(RSocketServ &aServer, TSockAddr &aLocalAddr, TSockAddr &aRemoteAddr, TInt aMaxRXSize, RConnection &aConnection, TInt aPriority=EPriorityNormal, const TDesC8 &aCNAME=KNullDesC8);
IMPORT_C void OpenL(RSocketServ &aServer, TSockAddr &aLocalAddr, TSockAddr &aRemoteAddr, TInt aMaxRXSize, TInt aPriority=EPriorityNormal, const TDesC8 &aCNAME=KNullDesC8);
IMPORT_C void OpenL(RSocket &aSocket, TInt aMaxRXSize, RSocket &aRtcpSocket, TInt aPriority=EPriorityNormal, const TDesC8 &aCNAME=KNullDesC8);
IMPORT_C void OpenL(RSocket &aSocket, TInt aMaxRXSize, TInt aPriority=EPriorityNormal);

Setting session parameters

After creating an RTP session, you need to set the following parameters before sending and receiving RTP packets:

  • the bandwidth for the RTP stream, by calling the [[[ERROR: [NOKX000E] Unable to find definition for key reference 'RRtpSession']]]SetBandwidth() method

  • the conversion rate for the RTCP timestamp, by calling the [[[ERROR: [NOKX000E] Unable to find definition for key reference 'RRtpSession']]]SetRTPTimeConversion() method

During an active RTP session, you can change the following parameters:

  • the destination address, by calling the [[[ERROR: [NOKX000E] Unable to find definition for key reference 'RRtpSession']]]SetRemoteAddress() method

  • the remote RTCP port, by calling the [[[ERROR: [NOKX000E] Unable to find definition for key reference 'RRtpSession']]]SetRemoteRtcpPort() method

When specifying a new remote address for the RTP session, the remote RTCP port is set one port higher than the RTP port, as defined by the RTP standard. When specifying a new RTCP port, the RTP port is not modified.

Note: If you need more configuration options for your RTP communications, you can change the settings of the internal sockets. The [[[ERROR: [NOKX000E] Unable to find definition for key reference 'RRtpSession']]]RtpSocket() and [[[ERROR: [NOKX000E] Unable to find definition for key reference 'RRtpSession']]]RtcpSocket() methods return the handles of the internal sockets used for RTP and RTCP data.

Example

The following code shows how to create a new session, and set session parameters.

// [...]

// Construct a new session object 
RRtpSession session; 
session.OpenL(iRtpSocket, 1500, EPriorityNormal); 

// Set the RTP session parameters 
session.SetBandwidth(1000);    // Set session bandwidth in bps at the start up 

//SetRTPTimeConversion API is called before receiving an RTP packet
session.SetRTPTimeConversion(100, 100); // Set RTP time conversion for generating the RTP timestamps in RTCP packets

The following code shows how to change parameters during the RTP session:

// sample address and port for the RTP socket
TSockAddr newAddr;
newAddrr.SetAddress(INET_ADDR(192,168,0,1));
newAddr.SetPort(4646);

// changing the RTP destination
session.SetRemoteAddress(newAddr);

// by default, the RTCP port is set to the first port higher than the RTP port 
session.SetRemoteRtcpPort(4649);

// turning IMCP errors onsession.
RtpSocket().SetOpt(KSoUdpReceiveICMPError, KSolInetUdp, 1);