Freigeben über


So übermitteln Sie komprimierte Beispiele mit dem asynchronen Reader

[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.]

Der asynchrone Reader kann komprimierte Beispiele aus Streams in ASF-Dateien bereitstellen. Anwendungen liefern in der Regel komprimierte Beispiele, wenn sie einen Stream aus einer Datei in eine andere kopieren. Es ist nicht ratsam, Daten, die aus einem komprimierten Datenstrom rekonstruiert wurden, erneut zu komprimieren, da Daten beim Codierungsprozess verloren gehen. Digitale Medien, die mehr als einmal komprimiert wurden, werden einen spürbaren Qualitätsabfall aufweisen.

Das Windows Media Format SDK stellt keine Methoden zum Decodieren von Daten bereit, nachdem sie aus einer ASF-Datei extrahiert wurden. Wenn Sie komprimierte Beispiele erhalten und diese später dekomprimieren möchten, müssen Sie dazu Ihren eigenen Code bereitstellen. Eine Möglichkeit, diese Einschränkung zu umgehen, besteht darin, die komprimierten Beispiele in eine neue ASF-Datei zu schreiben und sie dann erneut in normale, nicht komprimierte Beispiele zu lesen.

Führen Sie die folgenden Schritte aus, um komprimierte Beispiele mit dem asynchronen Reader zu empfangen.

  1. Implementieren Sie den IWMReaderCallbackAdvanced::OnStreamSample-Rückruf . Dieser Rückruf ist in der Funktion im Grunde identisch mit IWMReaderCallback::OnSample , mit der Ausnahme, dass die Beispiele nach Streamnummer übermittelt werden und die Beispiele weiterhin komprimiert sind.
  2. Rufen Sie vor Beginn der Wiedergabe einen Zeiger auf die IWMReaderAdvanced-Schnittstelle des Reader-Objekts ab, indem Sie IWMReader::QueryInterface aufrufen.
  3. Konfigurieren Sie den Reader so, dass komprimierte Beispiele für den gewünschten Stream übermittelt werden, indem Sie IWMReaderAdvanced::SetReceiveStreamSamples aufrufen.
  4. Wiederholen Sie Schritt 3 für jeden Stream, für den eine komprimierte Beispielübermittlung gewünscht ist.

Hinweis

Bilddatenströme sind für die Übermittlung komprimierter Datenströme ungültig. Wenn Sie einen Bilddatenstrom aus einer Datei in eine andere kopieren, funktioniert er in der neuen Datei nicht. Um einen Bilddatenstrom aus einer Datei in eine Datei zu kopieren, rufen Sie die Bilddatenstrombeispiele anhand der Ausgabenummer ab, und fügen Sie sie in die neue Datei ein, als ob sie einen neuen Bilddatenstrom einschließen würden.

 

IWMReaderCallbackAdvanced-Schnittstelle

Lesen von Dateien mit dem asynchronen Reader