How to Play a UDP MPEG2 Stream with DVR Buffer Capturing (C++)

 

The following C++ method demonstrates how to use the ltmmPlayControl to play a UDP MPEG2 source stream with modified DVR buffer settings:

 

void CDVRExample::PlayUDPSourceWithDVRBuffer()
{
   USES_CONVERSION;
   HRESULT hr = S_OK;

   try 
   {
       // Open the UDP Stream, but dont auto start
      m_player->put_AutoStart(VARIANT_FALSE);
      m_player->put_SourceFile(L"udp://127.0.0.1:9005");

      IUnknown *punk = NULL;
      HRESULT hr = m_player->GetSubObject(ltmmPlay_Object_SourceFilter, &punk);

      if (SUCCEEDED(hr)) 
      {
         ILMDVRSink *pDvrSink;
         hr = punk->QueryInterface(IID_ILMDVRSink, (LPVOID*)&pDvrSink);
         punk->Release();

         if (SUCCEEDED(hr)) 
         {
             // Tell the DVR Sink that settings are about to change
            pDvrSink->StartChangingAttributes();

             // Set only one DVR buffer folder
            pDvrSink->put_FolderCount(1);

             // Set the buffer base file name to 'Capture.LBL'
            pDvrSink->put_BaseName(L"Capture.LBL");

             // Set the buffer folder location to 'C:\Temp'
            pDvrSink->put_FolderName(0, L"C:\\Temp");

             // Set the buffer folder to have 5 buffer data files, each at 100MB max size
            pDvrSink->SetBufferSize(0, 5, 102400000);

             // Commit the changed settings now
            pDvrSink->StopChangingAttributes(VARIANT_FALSE);

            pDvrSink->Release();
         }
      }

       // Run the stream
      m_player->Run();
   }
   catch ( ... )
   {
      ASSERT ( FALSE );
      throw;
   }
}