Erstellen und Konfigurieren von ASF-Streams
Jede ASF-Datei enthält einen oder mehrere Streams. Das ASF-Profilobjekt stellt eine Auflistung von ASF-Streams 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:
- Fügen Sie einen Stream hinzu, oder entfernen Sie ihn.
- Abrufen der Konfigurationseinstellungen eines Streams.
- Konfigurieren Sie Nutzlasterweiterungen.
- Hinzufügen, Entfernen oder Ändern eines ASF-Objekts für gegenseitigen Ausschluss.
Dieses Thema enthält folgende Abschnitte:
- Erstellen eines neuen Streams
- Zuweisen von Streamnummern
- Festlegen von Datenlecks für Bucketwerte
- Nutzlasterweiterungen
- Hinzufügen eines Datenstroms zum Profil
- Zugehörige Themen
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 Stream Properties Object und den Extended Stream Properties Objects im ASF-Dateiheader. (Siehe ASF-Dateistruktur.)
Um einem ASF-Profil einen Stream hinzuzufügen, führen Sie die folgenden Schritte aus:
- Erstellen Sie ein leeres Streamstream-Konfigurationsobjekt.
- Konfigurieren Sie den Stream gemäß den Anforderungen der Anwendung.
- Fügen Sie den Stream dem Profil hinzu.
Um einen Stream für das Profil zu erstellen, 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 Streams, die in ASF-Dateien verwendet werden, sind Audio- und Videostreams. In Media Foundation werden die Streamtypen durch das Medientypobjekt bezeichnet, das die BESCHRIFTUNGMediaType-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 anfängliche Medientyp, der von CreateStream festgelegt wird, kann mithilfe des Streamkonfigurationsobjekts geändert werden. Rufen Sie zum Abrufen des Medientyps für den Stream IMFASFStreamConfig::GetMediaType auf, oder rufen Sie den Haupttypaufruf IMFASFStreamConfig::GetStreamType ab. Der anfängliche Medientyp für einen Stream kann durch einen neuen konfigurierten Medientyp ersetzt werden, indem IMFASFStreamConfig::SetMediaType aufruft.
Wenn eine Anwendung ein Profil aus einem gültigen Präsentationsdeskriptor erstellt, indem MFCreateASFProfileFromPresentationDescriptor aufruft. Die Funktion legt automatisch die Streamkonfigurationsobjekte für jeden der Streams fest und legt sie für das Profil fest. Die Streammedientypen werden basierend auf den Streamdeskriptoren festgelegt, die dem Präsentationsdeskriptor zugeordnet sind.
Zuweisen von Streamnummern
Streams allen Typen muss eine Streamnummer zugewiesen werden. Streamnummern müssen nicht sequenziell sein, sondern im Bereich von 1 bis 127 liegen. Rufen Sie zum Zuweisen von Streamnummern IMFASFStreamConfig::SetStreamNumber auf. Um den Aufruf der Streamnummer zu erhalten, rufen Sie IMFASFStreamConfig::GetStreamNumber ab.
Hinweis
Eine Streamnummer ist anders als ein Streamindex, den Sie beim Abrufen von Streams in einem Profil mit IMFASFProfile::GetStream verwenden. Der Streamindex ist eine Zahl, die dem Stream vom Profilobjekt zugewiesen wird. Streamindizes liegen zwischen 0 und 1 weniger als die Anzahl der Streams, die von IMFASFProfile::GetStreamCount abgerufen wurden. Sie können einen Stream auch über die Streamnummer aus dem Profil erhalten, indem Sie IMFASFProfile::GetStreamByNumber aufrufen.
Festlegen von Datenlecks für Bucketwerte
Jedem Streamkonfigurationsobjekt, das einen Stream darstellt, müssen Bucketparameter, Bitrate und Pufferfensterwerte zugeordnet sein.
Diese Werte sind für die Anwendung über das MF _ ASFSTREAMCONFIG _ LEAKYBUCKET1-Attribut und das MF _ ASFSTREAMCONFIG _ LEAKYBUCKET2-Attribut verfügbar. Bei der Dateicodierung hängen die tatsächlichen Werte vom Typ der Codierung ab und werden vom Encoder entschieden. Wenn Sie bereits über einen konfigurierten Encoder verfügen und der Ausgabetyp für den Encoder festgelegt ist, muss die Anwendung den Encoder nach den Bucketparametern mit Datenlecks abfragen und die Werte in diesen Attributen festlegen.
Wenn Sie die Komponenten der Pipelineebene verwenden und die Datenströme für die ASF-Mediensenke konfigurieren, verfügen Sie höchstwahrscheinlich nicht über einen konfigurierten Encoder. In diesem Fall müssen Sie den Encoder nach medienspezifischen Typabfragen abfragen und den aktualisierten Wert in der MFPKEY _ ASFSTREAMSINK _ CORRECTED _ LEAKYBUCKET-Eigenschaft des Eigenschaftenspeichers der ASF-Mediensenke festlegen. Der Codierungseigenschaftsspeicher wird über den des ContentInfo-Objekts abgerufen, das dem Profil zugeordnet ist. Die aktualisierten Werte werden automatisch in den Datenstrom-Bucketattributwerten widergespiegelt. Allgemeine Informationen zu leckden Buckets und dazu, wie Sie den Wert des unverlusten Buckets vom Encoder erhalten, finden Sie unter The Leaky Bucket Buffer Model.
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, Seitenverhältnis ohne Quadratpixel, Stichprobendauer und, wenn das Beispiel sie enthält, einen Videoschlüsselrahmen. 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 ergänzenden Daten jedem Beispiel für diesen Stream hinzufügen kann.
Rufen Sie IMFASFStreamConfig::GetPayloadExtensionCount auf, und enumerieren Sie dann die Liste, indem Sie IMFASFStreamConfig::GetPayloadExtension aufrufen,um die Gesamtzahl der nutzlastbezogenen Erweiterungen für den Stream zu erhalten. Um die Nutzlasterweiterung für den Stream hinzuzufügen, rufen Sie IMFASFStreamConfig::AddPayloadExtension auf. Dadurch werden zusätzliche Daten zu einzelnen Medienbeispielen hinzugefügt, die für den Stream generiert werden.
Um vorhandene Nutzlasterweiterungen zu entfernen, die dem Stream zugeordnet sind, rufen Sie IMFASFStreamConfig::RemoveAllPayloadExtensions auf.
Hinzufügen eines Datenstroms zum Profil
Nachdem ein Stream konfiguriert wurde, rufen Sie IMFASFProfile::SetStream auf, um den Stream dem 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 durch Aufrufen von IMFASFContentInfo::SetProfile festgelegt werden. Wenn Sie Änderungen an einem vorhandenen Stream vornehmen, müssen Sie ihn erneut dem Profil hinzufügen und das Profil für das ContentInfo-Objekt festlegen.