Festlegen von Eigenschaften im ContentInfo-Objekt

Beim Erstellen einer ASF-Datei muss das ContentInfo-Objekt die Merkmale des Medieninhalts kennen, damit die verschiedenen Headerobjekte mit den richtigen Werten aufgefüllt werden.

Inhaltskonfigurationseinstellungen sind Datenstromeinstellungen, die im Profil enthalten sind und den Datenstrombezeichner, den Medientyp und die Parameter für undichte Buckets für die Mediensenke angeben. Nachdem das Profil auf das ContentInfo-Objekt festgelegt wurde, indem IMFASFContentInfo::SetProfile aufgerufen wird, werden diese Werte im generierten ASF-Headerobjekt wiedergegeben. Informationen zu diesen Einstellungen finden Sie unter Erstellen und Konfigurieren von ASF-Streams.

Konfigurieren des ContentInfo-Objekts mit Encodereinstellungen

Audio- oder Videodaten digitaler Medien sind komplex und beanspruchen große Mengen an Arbeitsspeicher. In den meisten Fällen werden Sowohl Audio als auch Video mithilfe von Encodern komprimiert, bevor sie einer ASF-Datei hinzugefügt werden. In Media Foundation werden Encoder als Media Foundation Transforms (MFTs) mit einer Eingabe und einer Ausgabe implementiert. Sie müssen den Ausgabemedientyp abhängig vom Medientyp des Eingabedatenstroms und dem Codierungstyp auswählen, den Sie zum Komprimieren des Datenstroms auswählen.

Vor der Codierungssitzung muss der Encoder konfiguriert werden, indem die relevanten Eigenschaften abhängig vom Codierungstyp festgelegt werden.

Nach dem Konfigurieren des Encoders müssen Sie das ContentInfo-Objekt mit den Encoderwerten konfigurieren, da der ASF-Multiplexer und die ASF-Mediensenke, die mit dem aufgefüllten ContentInfo-Objekt initialisiert werden, Einstellungen wie die undichten Bucketwerte verwenden, um ASF-Datenpakete zu generieren. Die Werte werden nicht im endgültigen ASF-Headerobjekt gespeichert. Die Codierungseinstellungen werden als Eigenschaften verfügbar gemacht. Gehen Sie wie folgt vor, um das ContentInfo-Objekt mit den Encodereigenschaften zu konfigurieren:

  1. Rufen Sie einen Zeiger auf den Eigenschaftenspeicher des Encoders ab, indem Sie den Encoder (IMFTransform-Schnittstelle ) direkt für die IPropertyStore-Schnittstelle abfragen.
  2. Rufen Sie IMFASFContentInfo::GetEncodingConfigurationPropertyStore auf. Um streamspezifische Eigenschaften festzulegen, geben Sie den Streambezeichner im wStreamNumber-Parameter an. Übergeben Sie für Eigenschaften auf Dateiebene den Wert 0. Der ppIStore-Parameter empfängt einen Zeiger auf die IPropertyStore-Schnittstelle . Der empfangene Eigenschaftenspeicher ist leer.
  3. Rufen Sie IPropertyStore::GetValue für den Encoder auf, und rufen Sie den Eigenschaftswert ab, indem Sie die Eigenschaftenschlüsselkonstanten angeben. Eine vollständige Liste der Codierungseigenschaften finden Sie in der Codec-Programmierreferenz.
  4. Rufen Sie IPropertyStore::SetValue für das ContentInfo-Objekt auf, um die erforderliche Eigenschaft im Eigenschaftenspeicher festzulegen.
  5. Wiederholen Sie die Schritte 3 und 4 für jede Eigenschaft, die Sie festlegen möchten.

Die ASF-Mediensenke kann mithilfe eines Aktivierungsobjekts erstellt werden, indem MFCreateASFMediaSinkActivate aufgerufen wird. Das neue Mediensenkenobjekt wird basierend auf mediensenkenspezifischen Einstellungen konfiguriert, die im Eigenschaftenspeicher des ContentInfo-Objekts festgelegt werden können. In der folgenden Tabelle sind die ASF-Mediensenkeneigenschaftenkonstanten aufgeführt.

Eigenschaft BESCHREIBUNG
MFPKEY_ASFMEDIASINK_BASE_SENDTIME Die Sendezeit gibt an, wann die Nutzlast innerhalb des undichten Buckets freigegeben wird. Dieser Eigenschaftswert gibt den Zeitpunkt des ersten Sendevorgangs an. Der Multiplexer verwendet diesen Wert, um die nachfolgenden Sendezeiten für die generierten Pakete zu berechnen und sicherzustellen, dass die Daten kontinuierlich durch den Leaky Bucket fließen.
MFPKEY_ASFMEDIASINK_AUTOADJUST_BITRATE Dieser BOOL-Wert gibt an, ob der Multiplexer die Bitrate automatisch anpassen muss, um sicherzustellen, dass die Daten den leaky Bucket nicht überlaufen.
MFPKEY_ASFMEDIASINK_DRMACTION Dies gibt die DRM-Aktion der ASF-Mediensenke für die Dateigenerierung an. In dieser Version wird nur DRM-Transcodierung unterstützt.
MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET Diese Eigenschaft muss festgelegt werden, wenn der Encoder entscheidet, welches Pufferfenster und welche Bitrate verwendet werden soll. Verwenden Sie zum Festlegen dieser Werte die IWMCodecLeakyBucket-Schnittstelle . Dies muss für jeden Stream in der ASF-Datei festgelegt werden.

 

Schreiben eines ASF-Headerobjekts für eine neue Datei