Erstellen und Konfigurieren von ASF-Streams

Jede ASF-Datei enthält einen oder mehrere Streams. Das Objekt für das ASF-Profil stellt eine Sammlung von ASF-Datenströmen dar. Für die ASF-Codierung müssen Sie die Streams erstellen und konfigurieren, die Sie codieren möchten.

Eine Anwendung kann die folgenden Aufgaben mit dem ASF-Profilobjekt ausführen:

  • Hinzufügen oder Entfernen eines Streams
  • Abrufen der Konfigurationseinstellungen eines Streams
  • Konfigurieren von Nutzlasterweiterungen
  • Hinzufügen, Entfernen oder Ändern eines ASF-Objekts für den gegenseitigen Ausschluss

Dieses Thema enthält folgende Abschnitte:

Erstellen eines neuen Streams

Ein ASF-Profilobjekt muss Konfigurationseinstellungen für mindestens einen ASF-Stream enthalten. Jeder Stream wird durch ein Streamkonfigurationsobjekt dargestellt, das die IMFASFStreamConfig-Schnittstelle verfügbar macht. Die Informationen im Streamkonfigurationsobjekt entsprechen dem Objekt für die Streameigenschaften und dem Objekt für die erweiterten Streameigenschaften im ASF-Dateiheader. (Siehe ASF-Dateistruktur)

Führen Sie die folgenden Schritte aus, um einem ASF-Profil einen Stream hinzuzufügen:

  1. Erstellen Sie ein leeres Streamkonfigurationsobjekt.
  2. Konfigurieren Sie den Stream entsprechend den Anforderungen der Anwendung.
  3. Fügen Sie den Stream zum Profil hinzu.

Zum Erstellen eines Streams für das Profil rufen Sie IMFASFProfile::CreateStream auf, um ein leeres Streamkonfigurationsobjekt zu erstellen und den Zeiger im ppIStream-Parameter zu empfangen. CreateStream muss den Typ des zu erstellenden Streams kennen. Die gängigsten Arten von Datenströmen, die in ASF-Dateien verwendet werden, sind Audio- und Videostreams. In Media Foundation werden die Streamtypen durch das Medientypobjekt angegeben, das die IMFMediaType-Schnittstelle verfügbar macht. Der Haupttyp des Medientyps definiert die Kategorie des digitalen Medienstreams, z. B. Audio oder Video. Der Untertyp definiert das Format des Haupttyps. Der von CreateStream festgelegte anfängliche Medientyp kann mithilfe des Steamkonfigurationsobjekts geändert werden. Rufen Sie zum Abrufen des Medientyps für den Stream IMFASFStreamConfig::GetMediaType bzw. zum Abrufen des Haupttyps IMFASFStreamConfig::GetStreamType auf. Der anfängliche Medientyp für einen Stream kann durch Aufrufen von IMFASFStreamConfig::SetMediaType durch einen neuen konfigurierten Medientyp ersetzt werden.

Wenn eine Anwendung ein Profil aus einem gültigen Präsentationsdeskriptor durch Aufrufen von MFCreateASFProfileFromPresentationDescriptor erstellt, legt die Funktion automatisch die Streamkonfigurationsobjekte für die einzelnen Streams und im Profil fest. Die Streammedientypen werden basierend auf den Streamdeskriptoren festgelegt, die dem Präsentationsdeskriptor zugeordnet sind.

Zuweisen von Streamnummern

Streams aller Typen muss eine Streamnummer zugewiesen werden. Streamnummern müssen nicht sequenziell sein, müssen aber im Bereich von 1 bis 127 liegen. Rufen Sie zum Zuweisen von Streamnummern IMFASFStreamConfig::SetStreamNumber auf. Rufen Sie zum Abrufen der Streamnummer IMFASFStreamConfig::GetStreamNumber auf.

Hinweis

Eine Streamnummer unterscheidet sich von einem Streamindex, den Sie beim Abrufen von Streams in einem Profil mithilfe von IMFASFProfile::GetStream verwenden. Der Streamindex ist eine Zahl, die dem Stream durch das Profilobjekt zugewiesen wird. Streamindizes liegen in einem Bereich zwischen 0 und dem Wert, den Sie erhalten, wenn Sie von der Anzahl der über IMFASFProfile::GetStreamCount abgerufenen Streams die Zahl 1 abziehen. Sie können auch einen Stream anhand der Streamnummer aus dem Profil abrufen, indem Sie IMFASFProfile::GetStreamByNumber aufrufen.

 

Festlegen von Leaky Bucket-Werten

Jedem Streamkonfigurationsobjekt, das einen Stream darstellt, müssen Leaky Bucket-Parameter sowie Werte für Bitrate und Pufferfenster zugeordnet sein.

Diese Werte stehen der Anwendung über das Attribut MF_ASFSTREAMCONFIG_LEAKYBUCKET1 und das Attribut MF_ASFSTREAMCONFIG_LEAKYBUCKET2 zur Verfügung. Bei der Dateicodierung hängen die tatsächlichen Werte vom Typ der Codierung ab und werden vom Encoder festgelegt. Wenn Sie bereits über einen konfigurierten Encoder verfügen und der Ausgabetyp für den Encoder festgelegt ist, muss die Anwendung die Leaky Bucket-Parameter vom Encoder abfragen und die Werte in diesen Attributen festlegen.

Wenn Sie die Komponenten der Pipelineebene verwenden und die Streams für die ASF-Mediensenke konfigurieren, haben Sie wahrscheinlich keinen konfigurierten Encoder. In diesem Fall müssen Sie die Encoderverhandlungen für den Post Media-Typ abfragen und den aktualisierten Wert in der Eigenschaft MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET des Eigenschaftenspeichers der ASF-Mediensenke festlegen. Der Codierungseigenschaftenspeicher wird über das dem Profil zugeordnete ContentInfo-Objekt abgerufen. Die aktualisierten Werte werden automatisch in den Leaky Bucket-Attributwerten des Streams angezeigt. Allgemeine Informationen zu Leaky Buckets und zum Abrufen des Leaky Bucket-Werts vom Encoder finden Sie im Leaky Bucket-Puffermodell.

Nutzlasterweiterungen

Mediendaten für die Streams werden dem ASF-Datenobjekt als Medienbeispiele vom ASF-Multiplexer hinzugefügt. Diese Medienbeispiele können Nutzlasterweiterungsdaten enthalten: SMPTE-Zeitcodedaten, nicht quadratisches Pixelseitenverhältnis, Beispieldauer und Video-Keyframe, sofern im Beispiel enthalten. Eine Liste der unterstützten Nutzlasterweiterungstypen finden Sie unter GUIDs der ASF-Nutzlasterweiterung.

Ein Stream muss so konfiguriert werden, dass die Nutzlasterweiterung akzeptiert wird, damit der Multiplexer während der Beispielgenerierung die zusätzlichen Daten zu jedem Beispiel für diesen Stream hinzufügen kann.

Rufen Sie IMFASFStreamConfig::GetPayloadExtensionCount auf, um die Gesamtanzahl der für den Stream festgelegten Nutzlasterweiterungen abzurufen, und erstellen Sie dann die Auflistung durch Aufrufen von IMFASFStreamConfig::GetPayloadExtension. Rufen Sie IMFASFStreamConfig::AddPayloadExtension auf, um die Nutzlasterweiterung für den Stream hinzuzufügen. Dadurch werden zusätzliche Daten zu einzelnen Medienbeispielen hinzugefügt, die für den Stream generiert werden.

Rufen Sie IMFASFStreamConfig::RemoveAllPayloadExtensions auf, um vorhandene Nutzlasterweiterungen zu entfernen, die dem Stream zugeordnet sind.

Hinzufügen eines Streams zum Profil

Rufen Sie nach der Konfiguration eines Streams IMFASFProfile::SetStream auf, um den Stream zum Profil hinzuzufügen.

Um einen vorhandenen Stream im Profil zu entfernen, rufen Sie IMFASFProfile::RemoveStream auf.

Das konfigurierte Profil muss für das ContentInfo-Objekt festgelegt werden, indem Sie IMFASFContentInfo::SetProfile aufrufen. Wenn Sie Änderungen an einem vorhandenen Stream vornehmen, müssen Sie ihn erneut zum Profil hinzufügen und das Profil für das ContentInfo-Objekt festlegen.

ASF-Profil

ASF-Unterstützung in Media Foundation

WMContainer-ASF-Komponenten