數據流格式
[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、imfMediaEngine 取代,並在媒體基金會 音訊/視訊擷取。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayer、IMFMediaEngine 和 音訊/視訊擷取,而不是 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,因此您可以撰寫適用於這兩種裝置類型的程式代碼。
相關主題