共用方式為


數據流格式

[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、imfMediaEngine 取代,並在媒體基金會 音訊/視訊擷取。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayerIMFMediaEngine 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]

MSDV 和 UVC 驅動程式都可以輸出兩種 DV 格式:交錯的音訊視訊或僅限視訊。 交錯的音訊視訊是從裝置的原始格式。 僅限視訊格式包含相同的數據,但範例會標示為沒有音訊數據。 僅限視訊格式主要是為了與使用 Video for Windows 的應用程式相容。 如需詳細資訊,請參閱 Type-1 與 Type-2 DV AVI 檔案

MSDV 驅動程式

MSDV 驅動程式有兩個輸出針腳。 第一個輸出針腳會傳送交錯的數據,而第二個輸出接點會傳送僅限視訊的數據。 一次只能連接一個輸出針腳。 若要選取格式,請連接適當的輸出釘選。 您可以使用輸出釘選上的 IAMStreamConfig 介面來尋找格式。

UVC 驅動程式

不同於 MSDV 驅動程式,UVC 驅動程式會從相同的針腳提供這兩種格式。 預設格式為僅限視訊。 若要選取格式,請使用輸出釘選上的 IAMStreamConfig 介面。 呼叫 GetStreamCaps 方法來列舉輸出釘選上的媒體類型。 針對每個媒體類型,如果主要類型符合所需的格式,請呼叫 SetFormat 並傳入該媒體類型。

格式 主要類型
交錯的音訊和視訊 MEDIATYPE_Interleaved
僅限視訊 MEDIATYPE_Video

 

下列函式會根據主要類型 GUID 來設定格式。

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;
}

MSDV 驅動程式也支援 IAMStreamConfig,因此您可以撰寫適用於這兩種裝置類型的程式代碼。

控制 DV 攝影機