Products | Support | Send comments on this topic. | Email a link to this topic. | Back to Getting Started | Help Version 18.0.10.24
LEADTOOLS Filters Help

ILMRTSPResponseBuilder Interface

Show in webframe

This interface is used for building the RTSP command response which will be sent by the RTSP Server to the RTSP client. The interface is created by the LEAD RTSP Sink filter and passed to the ILMRTSPServerMedia::HandleCommand method whenever a RTSP command is received from the RTSP client.

You are expected to parse and interpret the RTSP command using the ILMRTSPCommandParser interface and build a response into this interface.

 

Interface Properties:

Type

Name

Description

long

ResponseCode

This property indicates the response code. The default is 551 (indicating an error).

So you must change this property to 200 to indicate success. For a full list of the possible RTSP responses, see "RFC 2326 - Real Time Streaming Protocol (RTSP)".

BSTR

ResponseString

A string to be sent along with the ResponseCode to the client. This property is updated automatically whenever you update the ResponseCode property.

But you can also update it yourself with a more meaningful string after you change ResponseCode.

BSTR

ContentType

A string indicating the content type. The default value is empty string "".

This value will be put in the response with the "Content-Type: " prefix and tells the RTSP client the form of the content.

You should set this in commands that expect content, like DESCRIBE. The most common content type is "application/sdp", which is what most RTSP clients will expect for the DESCRIBE command.

 

 

Interface Methods:

HRESULT  AddHeaderField(BSTR fieldName, BSTR fieldValue)

Parameters

fieldName

String indicating the field name.

fieldValue

String indicating the field value.

Description

This method will add a header field. The header fields have the format

<header-field>: <header-value>

For example, the following call can be used to add the sessionID field:

   hr = pBuilder->AddHeaderField(L"Session", L"MySessionString;timeout=70");

After this, the RTSP response will contain the following information in the header:

Session: MySessionString;timeout=80

Returns

S_OK if successful, < 0 if an error occurred.

Common error codes:

E_OUTOFMEMORY

Out of memory

E_POINTER

At least one of the parameters is NULL

 

 

HRESULT  AddContent(BSTR content)

Parameters

content

String indicating one or more lines of content.

Description

This method will add one or more lines of content. And end-of-line is added to any existing content to separate previous content from this content being added.

The content being added should match the type indicated by the ContentType property.

For example, the following code will set the content type, add a few lines of content and call ILMRTSPServerSession::HandleCommand to finalize the response for a DESCRIBE command:

// In this example, CRTSPServerFolderMedia is implementing the ILMRTSPServerMedia

// The class has a sink interface used to get the DESCRIBE information declared as follows:

//      ILMRTSPServerSession *m_pDescribeSession;

HRESULT CRTSPServerFolderMedia::HandleDescribeCommand(ILMRTSPServer *pServer, ILMRTSPCommandParser *pParser, ILMRTSPResponseBuilder *pBuilder, DWORD_PTR socket)

{

   /* UpdateDescribeSessionFilename is another class member that updates the graph containing m_pDescribeSession filter instance with the source file indicated in pParser */

   HRESULT hr = UpdateDescribeSessionFilename(pParser);

   if(FAILED(hr))

   {

      // if UpdateDescribeSessionFilename failed, then the file doesn't exist or is not supported

 // so just set the ResponseCode to an appropriate error code and return

      pBuilder->put_ResponseCode(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) ? 404 : 415);

      return hr;

   }

   // I can handle the file, so set the ContentType to application/sdp and

   // add the content values the filter doesn't know about

   hr = pBuilder->put_ContentType(L"application/sdp");

   if(SUCCEEDED(hr))

      hr = AddContent(pBuilder, L"v=0");

   if(SUCCEEDED(hr))

      hr = AddContent(pBuilder, L"o=- 0 0 IN IP4 127.0.0.1");

   if(SUCCEEDED(hr))

      hr = AddContent(pBuilder, L"s=Test session");

   // in this case, I am playing the whole file from start (position 0sec)

   if(SUCCEEDED(hr))

      hr = AddContent(pBuilder, L"a=range:npt=0-");

   // let ILMRTSPServerSession::HandleCommand fill the other content values describing the media streams

   if(SUCCEEDED(hr))

      hr = m_pDescribeSession->HandleCommand(pServer, pParser, pBuilder, socket);

   if(SUCCEEDED(hr))

      hr = pBuilder->put_ResponseCode(200); // SUCCESS!

   else

      pBuilder->RemoveAllContent();

   return hr;

}

Returns

S_OK if successful, < 0 if an error occurred.

Common error codes:

E_OUTOFMEMORY

Out of memory

 

 

HRESULT  RemoveAllContent()

Description

This method removes all content previously added with AddContent.

Returns

S_OK (the function never fails).

 

Products | Support | Contact Us | Copyright Notices
© 2006-2014 All Rights Reserved. LEAD Technologies, Inc.