Použití prioritizace datového proudu
[Funkce přidružená k této stránce, Windows Media Format 11 SDK, je starší funkce. Byla nahrazena čtečkou zdroje a výstupním zapisovačem. a zapisovač jímky jsou optimalizované pro Windows 10 a Windows 11. Microsoft důrazně doporučuje, aby nový kód používal Čtečka zdroje a Zapisovač dat místo Windows Media Format 11 SDK, pokud je možné. Microsoft navrhuje, aby se stávající kód, který používá starší rozhraní API, přepsal, aby se nová rozhraní API používala, pokud je to možné.]
Stanovení priority datových proudů umožňuje mít větší kontrolu nad přehráváním obsahu tím, že umožňuje určit pořadí priority datových proudů v profilu. Když čtečka a server streamování během přehrávání narazí na nedostatek šířky pásma, může být nutné vynechat vzorky, aby se zajistilo nepřerušované přehrávání. Pokud v profilu zadáte pořadí priority s objektem stanovení priority datového proudu, vzorky se nejprve zahodí z datových proudů s nejnižší prioritou.
Na rozdíl od sdílení šířky pásma a objektů vzájemného vyloučení objekt stanovení priority datových proudů nepoužívá IWMStreamList rozhraní pro sledování seznamu datových proudů. Místo toho musíte použít pole WM_STREAM_PRIORITY_RECORD struktur. Struktury musí být uspořádány v poli v sestupném pořadí priority. Kromě uchovávání čísla datového proudu umožňuje struktura priority datového proudu také určit, jestli je datový proud povinný. Povinné datové proudy nebudou vyřazeny bez ohledu na jejich pozici v seznamu.
Následující ukázkový kód ukazuje, jak do profilu zahrnout stanovení priority datového proudu. Tento profil je určen pro prezentaci v učebně se zvukovým streamem přednášejícího, video streamem přednášejícího a video streamem zachycujícím snímky prezentace. Zvukový stream je nejdůležitější a bude povinný. Snímky prezentace budou mít nejnižší prioritu, protože obraz bude poměrně stálý, takže ztráta několika snímků občas nebude moc důležitá.
IWMProfileManager* pProfileMgr = NULL;
IWMProfile* pProfileTmp = NULL;
IWMProfile3* pProfile = NULL;
IWMStreamPrioritization* pPriority = NULL;
WM_STREAM_PRIORITY_RECORD StreamArray[3];
HRESULT hr = S_OK;
// Initialize COM.
hr = CoInitialize(NULL);
// Create a profile manager object.
hr = WMCreateProfileManager(&pProfileMgr);
// Create an empty profile.
hr = pProfileMgr->CreateEmptyProfile(WMT_VER_9_0, &pProfileTmp)
// Get the IWMProfile3 for the new profile, then release the old one.
hr = pProfileTmp->QueryInterface(IID_IWMProfile3, (void**)&pProfile);
pProfileTmp->Release();
pProfileTmp = NULL;
// Give the new profile a name and description.
hr = pProfile->SetName(L"Prioritization_Example");
hr = pProfile->SetDescription(L"Only for use with example code.");
// Create the first stream.
hr = pProfile->CreateNewStream(WMMEDIATYPE_Audio, &pStream);
// TODO: configure the stream as needed for the scenario.
// Set the stream number.
hr = pStream->SetStreamNumber(1);
// Give the stream a name for clarity.
hr = pStream->SetStreamName(L"Lecturer_Audio");
// Include the new stream in the profile.
hr = pProfile->AddStream(pStream);
// Release the stream configuration interface.
pStream->Release();
pStream = NULL;
// Repeat for the other two streams.
hr = pProfile->CreateNewStream(WMMEDIATYPE_Video, &pStream);
// TODO: configure the stream as needed for the scenario.
hr = pStream->SetStreamNumber(2);
hr = pStream->SetStreamName(L"Lecturer_Video");
hr = pProfile->AddStream(pStream);
pStream->Release();
pStream = NULL;
hr = pProfile->CreateNewStream(WMMEDIATYPE_Video, &pStream);
// TODO: configure the stream as needed for the scenario.
hr = pStream->SetStreamNumber(3);
hr = pStream->SetStreamName(L"Slide_Video");
hr = pProfile->AddStream(pStream);
pStream->Release();
pStream = NULL;
// Create a stream prioritization object.
hr = pProfile->CreateNewStreamPrioritization(&pPriority);
// Fill the array with data.
StreamArray[0].wStreamNum = 1;
StreamArray[0].fMandatory = TRUE;
StreamArray[1].wStreamNum = 2;
StreamArray[1].fMandatory = FALSE;
StreamArray[2].wStreamNum = 3;
StreamArray[2].fMandatory = FALSE;
// Assign the stream array to the stream prioritization object.
hr = pPriority->SetPriorityRecords(StreamArray, 3);
// Add the stream prioritization to the profile.
hr = pProfile->SetStreamPrioritization(pPriority);
// Release the stream prioritization object.
pPriority->Release();
pPriority = NULL;
// TODO: Save the profile to a string, and save the string to a file.
// For more information, see To Save a Custom Profile.
// Release the remaining interfaces.
pProfile->Release();
pProfile = NULL;
pProfileMgr->Release();
pProfileMgr = NULL;
Související témata