Freigeben über


Streamformat

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

Sowohl der MSDV- als auch der UVC-Treiber können zwei DV-Formate ausgeben: verschachteltes Audio-Video oder nur Video. Interleaved Audio/Video ist das originale Format des Geräts. Das reine Videoformat enthält die gleichen Daten, aber die Beispiele sind als ohne Audiodaten gekennzeichnet. Das Reine Videoformat ist hauptsächlich aus Gründen der Kompatibilität mit Anwendungen vorhanden, die Video für Windows verwenden. Weitere Informationen finden Sie unter Type-1 vs. Type-2 DV AVI Files.

MSDV-Treiber

Der MSDV-Treiber verfügt über zwei Ausgabepins. Der erste Ausgabepin sendet verschachtelte Daten, und der zweite Ausgabepin sendet nur Videodaten. Es kann jeweils nur ein Ausgabepin angeschlossen werden. Um ein Format auszuwählen, schließen Sie den entsprechenden Ausgabepin an. Sie können die IAMStreamConfig-Schnittstelle am Ausgabepin verwenden, um das Format zu ermitteln.

UVC-Treiber

Im Gegensatz zum MSDV-Treiber liefert der UVC-Treiber beide Formate vom gleichen Pin. Das Standardformat ist nur Video. Um das Format auszuwählen, verwenden Sie die IAMStreamConfig-Schnittstelle am Ausgabepin. Rufen Sie die GetStreamCaps-Methode auf, um die Medientypen auf dem Ausgabepin aufzulisten. Wenn der Haupttyp mit dem gewünschten Format übereinstimmt, rufen Sie für jeden Medientyp SetFormat auf, und übergeben Sie diesen Medientyp.

Format Haupttyp
Verschachtelte Audio- und Videoinhalte MEDIATYPE_Interleaved
Nur Video MEDIATYPE_Video

 

Die folgende Funktion legt das Format basierend auf der Haupttyp-GUID fest.

HRESULT SetStreamFormat(IAMStreamConfig *pConfig, const GUID& majorType)
{
    if (pConfig == NULL)
    {
        return E_POINTER;
    }

    // Get the number of stream capabilities.
    int count = 0, size = 0;
    HRESULT hr = pConfig->GetNumberOfCapabilities(&count, &size);
    if (FAILED(hr))
    {
        return hr;
    }

    // Allocate memory for the stream capabilities structure.
    BYTE *pCaps = new BYTE[size];
    if (pCaps == NULL)
    {
        return E_OUTOFMEMORY;
    }
    
    // Enumerate the stream capabilities.
    bool bFoundType = false;
    for (int ix = 0; ix < count; ix++)
    {
        AM_MEDIA_TYPE *pmt;
        hr = pConfig->GetStreamCaps(ix, &pmt, pCaps);
        if (FAILED(hr))
        {
            break;
        }
        else if (pmt->majortype == majorType)
        {
            // This is the media type we want.
            bFoundType = true;
            hr = pConfig->SetFormat(pmt);
            DeleteMediaType(pmt);
            break;
        }
        DeleteMediaType(pmt);
    }
    delete [] pCaps;
    if (FAILED(hr))
    {
        return hr;
    }
    return bFoundType ? S_OK : E_FAIL;
}

Der MSDV-Treiber unterstützt auch IAMStreamConfig, sodass Sie Code schreiben können, der für beide Gerätetypen funktioniert.

Steuern eines DV-Camcorders