Konfigurieren des ASF-Splitterobjekts
Das ASF-Splitterobjekt ist ein WMContainer-Ebenenobjekt, das das ASF-Datenobjekt einer ASF-Datei (Advanced Systems Format) analysiert. Nachdem der Splitter erstellt und initialisiert wurde, um das ASF-Datenobjekt einer Mediendatei zu analysieren, muss der Splitter so konfiguriert werden, dass Beispiele für bestimmte Datenströme generiert werden. Rufen Sie IMFASFSplitter::SelectStreams auf, um die erforderlichen Streams auszuwählen.
Optional kann eine Anwendung sie auch konfigurieren, um Beispiele in umgekehrter Reihenfolge zu generieren oder Beispiele für geschützte Inhalte zu generieren. Um diese Optionen festzulegen, rufen Sie IMFASFSplitter::SetFlags auf, und übergeben Sie die erforderliche bitweise Kombination der unterstützten Flags. Vor dem Aufrufen dieser Methode muss der Client den IMFASFSplitter::Initialize-Aufruf erfolgreich abschließen. Andernfalls schlägt SetFlags mit MF_E_NOT_INITIALIZED Fehlercode fehl. Informationen zum Initialisieren des Splitters finden Sie unter Erstellen des ASF-Splitterobjekts.
Um zu überprüfen, ob dieses Flag derzeit im Splitter festgelegt ist, rufen Sie IMFASFSplitter::GetFlags auf.
Auswählen von Streams für die Analyse
Während des Initialisierungsprozesses über den IMFASFSplitter::Initialize-Aufruf erkennt der Splitter die Anzahl der Streams und die Streambezeichner in der ASF-Datei. Standardmäßig werden keine Streams vom Splitter ausgewählt. Die Anwendung muss die Streams auswählen, indem SIE IMFASFSplitter::SelectStreams aufruft. Diese Methode verwendet ein Array von Datenstromnummern. Um die Streamnummer für einen Stream abzurufen, rufen Sie IMFASFProfile::GetStream im ASF-Profil auf, oder rufen Sie IMFStreamDescriptor::GetStreamIdentifier für den Streamdeskriptor auf. (Sie können sowohl das ASF-Profil als auch den Streamdeskriptor aus dem ContentInfo-Objekt abrufen.) Wenn der Client eine Datenstromnummer übergibt, die vom Splitter nicht erkannt wird, schlägt er mit einem MF_E_INVALIDSTREAMNUMBER Fehler fehl.
Durch aufrufen von SelectStreams werden die vorherigen Auswahlen gelöscht. Kein Stream, der im Array nicht angegeben ist, wird nicht ausgewählt. Um eine Liste der aktuell ausgewählten Streams abzurufen, rufen Sie IMFASFSplitter::GetSelectedStreams auf. Diese Methode verwendet einen Zeiger auf ein Array, das die -Methode mit den Datenstromnummern füllt. Wenn die Arraygröße kleiner als die Anzahl der ausgewählten Datenströme ist, schlägt die Methode mit dem MF_E_BUFFERTOOSMALL Fehler fehl. In diesem Fall gibt die Methode die Anzahl der ausgewählten Streams im pwNumStreams-Parameter zurück. Mit dieser Nummer können Sie dann ein Array der richtigen Größe zuordnen und die Methode erneut aufrufen.
Beispielcode finden Sie unter "Auswählen eines Datenstroms für die Analyse" in Tutorial: Lesen einer ASF-Datei.
Umgekehrte Wiedergabeeinstellung
Während des Initialisierungsprozesses des Splitters wird bestimmt, ob der ASF-Inhalt die umgekehrte Wiedergabe unterstützt. Wenn dies der Fall ist, kann der Splitter so konfiguriert werden, dass Beispiele in umgekehrter Reihenfolge generiert werden, indem das Flag MFASF_SPLITTER_REVERSE festgelegt wird. Wenn der Inhalt die umgekehrte Wiedergabe nicht unterstützt, gibt im IMFASFSplitter::SetFlagsMF_E_INVALIDREQUEST zurück, aber das Flag wird auf dem Splitter festgelegt.
Wenn der Splitter für die Analyse in umgekehrter Richtung konfiguriert ist, beginnt der Splitter immer mit der Analyse am Ende des Puffers, der das ASF-Datenobjekt enthält. Daher müssen für die reverse Analyse der Datenoffset und die Länge der zu analysierenden Daten entsprechend festgelegt werden. Informationen zum Festlegen der richtigen Werte finden Sie unter Generieren von Streambeispielen aus einem vorhandenen ASF-Datenobjekt.
Einstellung "Geschützter Inhalt"
Der Splitter kann für die Verwendung mit Verschlüsselungsinhalten auf Paketebene konfiguriert werden, indem die MFASF_SPLITTER_WMDRM über IMFASFSplitter::SetFlags festgelegt wird. Dadurch wird der Splitter angewiesen, Beispiele für Inhalte bereitzustellen, die durch Windows Media Digital Rights Management (DRM) geschützt sind. Wenn dieses Flag festgelegt ist, enthalten die vom Splitter generierten Beispiele Informationen, die zum Entschlüsseln von Mediendaten und zum Rekonstruieren der Frames erforderlich sind, z. B. das attribut MFSampleExtension_PacketCrossOffsets . Dieses Attribut ist ein Blob, das ein Array von DWORD-Senthält. Jedes DWORD stellt die Nutzlastgrenzen für den Frame relativ zum Anfang des Frames bereit. Wenn dieses Attribut nicht vorhanden ist, ist der Frame in einer einzelnen Nutzlast enthalten. In der Regel enthalten die vom Splitter generierten Beispiele mehrere Medienpuffer. Die Anwendung kann alle Puffer in einen zusammenhängenden Puffer kopieren, indem SIE IMFSample::ConvertToContiguousBuffer aufruft. Der resultierende Puffer enthält den Frame, und der Attributwert enthält Offsets in diesen Puffer.
Zugehörige Themen