So rufen Sie Medienbeispiele mit dem synchronen Reader ab
[Das dieser Seite zugeordnete Feature Windows Media Format 11 SDK ist ein Legacyfeature. Es wurde von Source Reader und Sink Writer abgelöst. Source Reader und Sink Writer wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit quellleser und Senkenschreiber anstelle des Windows Media Format 11 SDK verwendet. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]
Sie müssen jedes Beispiel einzeln vom synchronen Reader anfordern. Dadurch haben Sie mehr Kontrolle über die erhaltenen Beispiele und den Zeitpunkt, wann Sie sie erhalten.
Verwenden Sie die IWMSyncReader::GetNextSample-Methode , um ein Beispiel abzurufen. Sie müssen größtenteils Zeiger an Variablen übergeben, die mit Informationen zum Beispiel gefüllt werden, die als Parameter abgerufen werden. Der einzige Eingabeparameter ist wStreamNum. Wenn Sie eine Streamnummer übergeben, ruft GetNextSample das nächste Beispiel mit der angegebenen Streamnummer ab. Wenn Sie null für wStreamNum übergeben, wird das nächste Beispiel abgerufen, das chronologisch in der Datei auftritt.
Standardmäßig ruft der synchrone Reader alle Beispiele aus den Ausgaben in einer Datei in chronologischer Reihenfolge ab. Wenn Sie GetNextSample aufrufen und keine weiteren Beispiele abgerufen werden können, wird NS_E_NO_MORE_SAMPLES zurückgegeben. Dies ist ein Fehlercode. Bei der Codierung können Sie daher beispiele einfach durchlaufen, bis die Methode fehlschlägt.
Hinweis
Um sicherzustellen, dass der synchrone Reader die richtigen Beispieldauern für Videostreams liefert, müssen Sie zuerst die Streamausgabe konfigurieren. Rufen Sie die IWMSyncReader::SetOutputSetting-Methode auf, um die einstellung g_wszVideoSampleDurations auf TRUE festzulegen.
Beispielcode
Der folgende Beispielcode zeigt, wie Sie GetNextSample verwenden, um alle Beispiele in einer Datei abzurufen.
// Loop through all the samples in the file.
do
{
// Get the next sample.
hr = pSyncReader->GetNextSample(0,
&pMyBuffer,
&cnsSampleTime,
&cnsSampleDuration,
&dwFlags,
&dwOutputNumber,
NULL);
if(SUCCEEDED(hr))
{
// TODO: Process the sample in whatever way is appropriate
// to your application. When finished, clean up.
pMyBuffer->Release();
pMyBuffer = NULL;
cnsSampleTime = 0;
cnsSampleDuration = 0;
dwFlags = 0;
dwOutputNumber = 0;
}
}
while (SUCCEEDED(hr));
Zugehörige Themen