Initialisieren des ContentInfo-Objekts einer neuen ASF-Datei
Nach dem Erstellen eines leeren ContentInfo-Objekts durch Aufrufen der MFCreateASFContentInfo-Funktion muss die Anwendung IMFASFContentInfo::SetProfile aufrufen, um das Codierungsprofil bereitzustellen. Informationen zum Erstellen eines Profils finden Sie unter Erstellen eines ASF-Profils.
Bevor Informationen aus dem Profil gelesen werden können, muss die SetProfile-Methode das angegebene Profilobjekt überprüfen, indem die Streambezeichner oder Medientypen überprüft werden. Wenn das Profil die Überprüfung besteht, werden verschiedene Headerobjekte generiert, z. B. das File Properties-Objekt, das Stream Bitrate Properties-Objekt, das Stream Properties-Objekt und das Mutual Exclusion-Objekt.
SetProfile berechnet und legt empfohlene Werte für bestimmte Eigenschaften wie den Prerollwert fest. Wenn dies noch nicht festgelegt ist, hängt der empfohlene Prerollwert in Millisekunden vom maximalen Pufferfenster des für die Streams im Profil angegebenen Leaky-Buckets ab. Auf ähnliche Weise werden auch die minimalen und maximalen Datenpaketgrößen festgelegt. Die empfohlenen Werte können die Paketgrößen überschreiben, die für das Profil über Attribute festgelegt werden.
Da die Datei gerade erstellt wird, wird die Datei als Broadcasttyp kategorisiert, der durch das Feld Flags des Dateieigenschaftenobjekts gekennzeichnet wird. Bestimmte unbekannte Werte wie die Anzahl der Datenpakete, die Wiedergabedauer und die Sendedauer werden auf Null festgelegt. Diese Werte werden durch MF_PD_ASF_xxx-Attribute dargestellt und müssen von der Anwendung aktualisiert werden, nachdem die Dateierstellung abgeschlossen ist.
Das angegebene Profilobjekt ersetzt jedes vorhandene Profil, das dem ContentInfo-Objekt zugeordnet ist, entfernt die Headerobjekte, auf die verwiesen wird, und setzt globale Dateieigenschaften wie Preroll und Datenpaketgröße zurück.
Die SetProfile-Methode erstellt auch das Datenobjekt, das das ASF-Datenobjekt darstellt. Wenn Sie ein ContentInfo-Objekt wiederverwenden, das Informationen zu Datenpaketen enthält, schlägt SetProfile fehl und gibt den MF_E_ALREADY_INITIALIZED Fehler zurück, der angibt, dass es bereits einem vorhandenen ASF-Datenobjekt zugeordnet ist. Standardmäßig wird für ein neues ContentInfo-Objekt die Datenpaketanzahl auf 0 (null) und die Datenobjektgröße auf 50 Byte festgelegt. Wenn Sie den Multiplexer zum Generieren von Datenpaketen verwenden, aktualisiert der Multiplexer das ContentInfo-Objekt, um neue Werte wie die Anzahl der Datenpakete widerzuspiegeln. Weitere Informationen zur Generierung von Datenpaketen finden Sie unter Generieren neuer ASF-Datenpakete.
Nachdem alle Headerobjekte dem endgültigen ASF-Headerobjekt hinzugefügt wurden, kann die Gesamtgröße des Headers durch Aufrufen von IMFASFContentInfo::GetHeaderSize abgerufen werden. Diese Größe schließt die anfängliche Größe des Datenobjekts ein.
Zugehörige Themen