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 PlayUDPSourceWithDVRBuffer(IltmmPlay *pPlay)
{
   USES_CONVERSION;
   try 
   {
       // Open the UDP Stream, but dont auto start
      pPlay->put_AutoStart(VARIANT_FALSE);
      pPlay->put_SourceFile(L"udp://127.0.0.1:9005");

      IUnknown *punk = NULL;
      HRESULT hr = pPlay->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(TEXT("Capture.LBL"));

             // Set the buffer folder location to 'C:\Temp' 
            pDvrSink->put_FolderName(0, TEXT("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);

            // release the dvr sink object
            pDvrSink->Release();
         }
      }

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