Save the Captured Data As MPEG

  1. Create an instance of the ltmmCapture class. This is accomplished using the Win32 CoCreateInstance function as follows:

    C API
    IltmmCapture* pCapture; 
    CoCreateInstance(&CLSID_ltmmCapture, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmCapture, (void**)&pCapture); 
    C++
    IltmmCapture* pCapture;  
     CoCreateInstance(CLSID_ltmmCapture, NULL, CLSCTX_INPROC_SERVER, IID_IltmmCapture, (void**) &pCapture);  

  2. Define the video devices to be used as the capture source. The ltmmCapture object contains video device collection objects. The first video device can be selected for capture by calling the device collection's put_Selection function:

    C API
    IltmmDevices* pDevices; 
     // get an interface into video devices collection 
     IltmmCapture_get_VideoDevices(pCapture, &pDevices); 
     // select the first video device 
     IltmmDevices_put_Selection (pDevices, 0); 
     // release collection 
     IUnknown_Release(pDevices); 
    C++
    IltmmDevices* pDevices; 
     // get an interface into video devices collection 
     pCapture->get_VideoDevices(&pDevices); 
     // select device 
     pDevices->put_Selection(0); 
     // release collection 
     pDevices->Release(); 

  3. Define the target or output file, as demonstrated with the following code:

    C API
    BSTR bstr;  
     // create a string containing the target file path 
     bstr = SysAllocString(L"c:\\target.mpg");  
     // assign the target file path to the capture object 
     IltmmCapture_put_TargetFile (pCapture, bstr);  
     // free the string 
     SysFreeString(bstr); 
    C++
    BSTR bstr;  
     // create a string containing the target file path 
     bstr = SysAllocString(L"c:\\target.mpg");  
     // assign the target file path to the capture object 
     pCapture->put_TargetFile (bstr);  
     // free the string 
     SysFreeString(bstr); 

  4. Select the Video and Audio compressors, as demonstrated with the following code:

    C API
    long index; 
    IltmmCompressors* pCompressors; 
    // select the MS MPEG-4 Video Codec 
    IltmmCapture_get_VideoCompressors(pCapture, &pCompressors); 
    bstr = SysAllocString(L"@device:sw:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\\Microsoft MPEG-4 Video Codec V2"); 
    IltmmCompressors_Find(pCompressors, bstr, &index); 
    SysFreeString(bstr); 
    if(index >= 0) 
       IltmmCompressors_put_Selection(pCompressors, index); 
    IUnknown_Release(pCompressors); 
    // select the MP3 audio video compressor 
    IltmmCapture_get_AudioCompressors(pCapture, &pCompressors); 
    bstr = SysAllocString(L"@device:cm:{33D9A761-90C8-11D0-BD43-00A0C911CE86}\\85MPEG Layer-3"); 
    IltmmCompressors_Find(pCompressors, bstr, &index); 
    SysFreeString(bstr); 
    if(index >= 0) 
       IltmmCompressors_put_Selection(pCompressors, index); 
    IUnknown_Release(pCompressors); 
    C++
    IltmmCompressors* pCompressors; 
    long index; 
    // select the MS MPEG-4 Video Codec 
    pCapture->get_VideoCompressors (&pCompressors); 
    bstr = SysAllocString(L"@device:sw:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\\Microsoft MPEG-4 Video Codec V2"); 
    pCompressors->Find (bstr, &index); 
    SysFreeString(bstr); 
    if(index < 0) 
    { 
       // compressor isn't registered 
       pCompressors->Release (); 
       return E_FAIL; 
    } 
    pCompressors->put_Selection (index); 
    pCompressors->Release(); 
    // select the MP3 audio video compressor 
    pCapture->get_AudioCompressors (&pCompressors); 
    bstr = SysAllocString(L"@device:cm:{33D9A761-90C8-11D0-BD43-00A0C911CE86}\\85MPEG Layer-3"); 
    pCompressors->Find (bstr, &index); 
    SysFreeString(bstr); 
    if(index < 0) 
    { 
       // compressor isn't registered 
       pCompressors->Release (); 
       return E_FAIL; 
    } 
    pCompressors->put_Selection (index); 
    pCompressors->Release(); 

  5. To view the graph in DirectShow GraphEdit

    C API
    IltmmCapture_EditGraph(pCapture); 
    C++
    pCapture->EditGraph(); 

  6. Set the MPEG multiplexer. This example will use an AVI multiplexer because it is available on all computers. You should use a real MPEG multiplexer, as demonstrated with the following code:

    C API
    IltmmTargetFormats* pTargetFormats; 
    IltmmTargetFormat* pTargetFormat; 
    IltmmCapture_get_TargetFormats(pCapture, &pTargetFormats); 
    // retrieve collection item 
    IltmmTargetFormats_Item(pTargetFormats, 0, &pTargetFormat); 
    // assign the required Mux 
    // this case: AVI 
    bstr = SysAllocString(L"@device:sw:{083863F1-70DE-11D0-BD40-00A0C911CE86}\\{E2510970-F137-11CE-8B67-00AA00A3F1A6}"); 
    IltmmTargetFormat_put_Mux(pTargetFormat, bstr); 
    SysFreeString(bstr); 
    // assign the optional SinkSubType 
    // this case: MEDIASUBTYPE_Avi 
    bstr = SysAllocString(L"{E436EB88-524F-11CE-9F53-0020AF0BA770}"); 
    IltmmTargetFormat_put_SinkSubType(pTargetFormat, bstr); 
    SysFreeString(bstr); 
    // assign an optional Sink 
    // this case: default 
    bstr = SysAllocString(L""); 
    IltmmTargetFormat_put_Sink(pTargetFormat, bstr); 
    SysFreeString(bstr); 
    IUnknown_Release(pTargetFormat); 
    C++
    IltmmTargetFormats* pTargetFormats; 
    IltmmTargetFormat* pTargetFormat; 
    pCapture->get_TargetFormats(&pTargetFormats); 
    // retrieve collection item 
    pTargetFormats->Item(0, &pTargetFormat); 
    // assign the required Mux 
    // this case: AVI 
    bstr = SysAllocString(L"@device:sw:{083863F1-70DE-11D0-BD40-00A0C911CE86}\\{E2510970-F137-11CE-8B67-00AA00A3F1A6}"); 
    pTargetFormat->put_Mux(bstr); 
    SysFreeString(bstr); 
    // assign the optional SinkSubType 
    // this case: MEDIASUBTYPE_Avi 
    bstr = SysAllocString(L"{E436EB88-524F-11CE-9F53-0020AF0BA770}"); 
    pTargetFormat->put_SinkSubType(bstr); 
    SysFreeString(bstr); 
    // assign an optional Sink 
    // this case: default 
    bstr = SysAllocString(L""); 
    pTargetFormat->put_Sink(bstr); 
    SysFreeString(bstr); 
    pTargetFormat->Release(); 

  7. Set a frame rate supported by MPEG. Look at the documentation for your MPEG multiplexer to see which frame rates it supports. Common frame rates are: 23.976, 24, 25, 29.97, 30fps, as demonstrated with the following code:

    C API
    // set rate to 30 fps 
     IltmmCapture_put_UseFrameRate(pCapture, VARIANT_TRUE); 
     IltmmCapture_put_FrameRate(pCapture, 30.0); 
     // you should check with their particular compressor which frame rates are supported.  
    C++
    // set rate to 30 fps 
     pCapture->put_UseFrameRate(VARIANT_TRUE); 
     pCapture->put_FrameRate(30.0); 
     // you should check with their particular compressor which frame rates are supported.  

  8. Now start to capture the data and save it to the target file by calling the following function:

    C API
    // start running 
     IltmmCapture_StartCapture(pCapture, ltmmCapture_Mode_VideoAndAudio);   
    C++
    // start running 
     pCapture->StartCapture(ltmmCapture_Mode_VideoAndAudio);  

Help Version 23.0.2024.2.29
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2024 LEAD Technologies, Inc. All Rights Reserved.

LEADTOOLS Multimedia C API Help
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.