ASF-Medienquelle

Media Foundation stellt die ASF-Medienquelle bereit, mit der eine Anwendung eine ASF-Datei auf der Pipelineebene der Architektur darstellen kann.

Um eine ASF-Datei wiederzugeben, kann eine Anwendung die ASF-Medienquelle verwenden, um Daten in eine Wiedergabepipeline zu feeden. In einem Codierungsszenario kann die Anwendung die ASF-Medienquelle als Quelle verwenden, um in ein anderes Format zu konvertieren oder eine Datei mit höherer Bitrate in eine Datei mit niedrigerer Bitrate zu konvertieren, ohne die Formate zu ändern. Die ASF-Medienquelle muss in der Pipelineebene verwendet werden, d. h., eine Anwendung muss die Mediensitzung verwenden, um den Vorgang zu steuern. Diese Zugriffsebene ermöglicht es den Anwendungen, Ereignisse abzurufen, während die Mediensitzung ausgeführt wird. Um zugriff auf den ASF-Inhalt auf niedrigerer Ebene zu erhalten, muss eine Anwendung die WMContainer Layer ASF-Komponenten verwenden.

Die ASF-Medienquelle implementiert die INTERFACESMediaSource-Schnittstelle, die die generische Schnittstelle für Medienquellen in Media Foundation ist. Wie jede andere Medienquelle stellt die ASF-Medienquelle einen Präsentationsdeskriptor bereit, der in erster Linie das ASF-Headerobjekt beschreibt. Darüber hinaus stellt die ASF-Medienquelle Streamdeskriptoren bereit, die jeden Stream im Medieninhalt darstellen. Weitere Informationen finden Sie unter ASF-Dateistruktur.

Erstellen der ASF-Medienquelle

Um die ASF-Medienquelle zu erstellen, muss die Anwendung den Quell-Resolververwenden. Um die ASF-Medienquelle zu erstellen, muss die Anwendung die Quelle angeben, für die der Quell resolver die ASF-Medienquelle erstellt. Die Quellinformationen müssen entweder durch Angeben der URL der Quelldatei oder des Bytestreams bereitgestellt werden, der die Medien enthält. Wenn die Anwendung sich entscheidet, die ASF-Medienquelle durch Angabe der URL zu erstellen, muss sie entweder "SFCSourceResolver::CreateObjectFromURL" für den synchronen Vorgang oder "SFCSourceResolver::Begin..." aufrufen. EndCreateObjectFromURL für asynchrone Vorgänge. Der Prozess zum Erstellen der Medienquelle aus einem Bytestream ist ähnlich. Die Anwendung muss entweder EINEN DERSOURCEResolver::CreateObjectFromByteStream für einen synchronen Vorgang oder EINEN SOURCEResolver::Begin... aufrufen. EndCreateObjectFromBytestream für asynchrone Vorgänge. Diese Aufrufe müssen MF _ RESOLUTION _ MEDIASOURCE im dwFlags-Parameter angeben. Weitere Informationen zur Verwendung dieses Flags finden Sie unter Verwenden des Quelllösers.

Wenn die Anwendung eine URL für eine lokale Datei angibt, kann die URL-Zeichenfolge den Pfad der Mediendatei enthalten oder dem Schema "file: " vorangestellt werden. Die Dateinamenerweiterung muss ".asf", ".wm", L".wma" oder ".wmv" sein. Für eine ASF-Datei im Netzwerk erstellt der Quell resolver die Netzwerkquelle, die die ASF-Medienquelle verwendet.

Während des Objekterstellungsprozesses sucht der Quell resolver die Liste der Schemahandler und der Bytestreamhandler in der Systemregistrierung und lädt den nächstgelegenen übereinstimmenden Handler, der den Medieninhalt analysieren und darunter auch das Medienquellobjekt erstellen kann. Unabhängig von der Methode zum Erstellen der Medienquelle (URL und Bytestream) erstellt der Quell resolver einen Bytestream und liest den Inhalt der Quellmedien in den Bytestream. Weitere Informationen finden Sie unter Schemahandler und Byte-Stream Handler.

Ein Codebeispiel zum Erstellen einer Medienquelle finden Sie unter Verwenden des Quell resolvers.

Konfigurations-Einstellungen für die ASF-Medienquelle

Der Quell resolver fragt die Funktionen des zugrunde liegenden Bytestreams ab und bestimmt, welche Vorgänge für die neu erstellte Medienquelle zulässig sind. Eine dieser Funktionen ist die Suche. Wenn ein Suchvorgang zulässig ist, kann die Anwendung den Suchmodus angeben, den die Medienquelle verwendet, während sie zu einem bestimmten Punkt in der Präsentation sucht.

Eine Anwendung kann während der Objekterstellung den Suchmodus für die zu verwendende Medienquelle festlegen. Nachdem die ASF-Medienquelle mit dem angegebenen Suchmodus erstellt wurde, kann sie nicht in der Medienquelle geändert oder während einer Präsentation dynamisch geändert werden. Sucheinstellungen werden als Eigenschaften im Aufruf der Anwendung an die relevanten Quell resolver-Methoden angegeben, die zum Erstellen der Medienquelle verwendet werden. Diese Eigenschaften werden in einem Eigenschaftenspeicher festgelegt und an den pProps-Parameter übergeben. Wenn diese Eigenschaften nicht übergeben werden, funktioniert die Medienquelle mit den Standardeinstellungen. Weitere Informationen zum Festlegen dieser Eigenschaften finden Sie unter Konfigurieren einer Medienquelle.

Wenn suchen zulässig ist, unterstützt die ASF-Medienquelle die folgenden Suchmodi:

  • Genaue Suche: In diesem Modus basiert die ASF-Medienquelle auf dem ASF-Indexobjekt der ASF-Datei. Wenn die Datei nicht über das Indexobjekt verfügt, ist die genaue Suche deaktiviert, und einer der anderen Modi wird abhängig von den von der Anwendung angegebenen Eigenschaften verwendet, die für die Medienquelle festgelegt sind.
  • Ungefähre Suche: Dieser Modus wird von der Anwendung angefordert, indem MFPKEY _ ASFMediaSource _ ApproxSeek im Eigenschaftenspeicher an die relevanten Quell resolver-Methoden übergeben wird. Die ungefähre Suche wird jedoch nur verwendet, wenn der Bytestream keine zeitbasierte Suche unterstützt. In diesem Modus bestimmt die Medienquelle eine Startzeit, die relativ näher an der Suchzeit liegt. Wenn die ASF-Datei ein ASF-Indexobjekt enthält, wird sie zum Berechnen der Startzeit verwendet. Die ungefähre Suche ist weniger genau, aber schneller als die genaue Suche, da die Zeit, die zum Rendern der ersten Stichprobe zur vordefinierten Startzeit erforderlich ist, schneller ist.
  • Iterative Suche: Um diesen Modus festzulegen, muss die Anwendung die MFPKEY _ ASFMediaSource _ IterativeSeekIfNoIndex-Eigenschaft festlegen. Iterative Suche ist ein Algorithmus, um eine Position in einer ASF-Datei zu finden, die kein ASF-Indexobjekt enthält. In diesem Modus bestimmt die Medienquelle eine grobe Schätzung des Suchpunkts, indem der Bytestreamoffset gelesen wird. Es verwendet eine Reihe von Näherungswerten, die auf der durchschnittlichen Bitrate basieren, um sich der Suchzeit des Ziels schrittweise anzunähern. (Der Algorithmus ähnelt einer binären Suche.) Die iterative Suche kann länger dauern als die Suche mithilfe des Indexobjekts, sodass sie standardmäßig deaktiviert ist. Wenn Sie diese Eigenschaft festlegen, verwenden Sie die folgenden Eigenschaften, um die Suchparameter festzulegen: MFPKEY _ ASFMediaSource _ IterativeSeek _ Max _ CountMFPKEY _ ASFMediaSource _ IterativeSeek _ Tolerance In _ _ MilliSecond. Diese Eigenschaften legen die maximale Anzahl von Iterationen bzw. die Toleranz fest. Der Algorithmus hält an, wenn er die maximale Anzahl von Iterationen erreicht, oder wenn er ein Paket findet, dessen Abstand von der Suchzeit innerhalb der angegebenen Toleranz liegt.

Kurz gesagt hat die Anwendung die Möglichkeit, eine ungefähre oder iterative Suche auszuwählen, wenn die ASF-Datei kein ASF-Indexobjekt enthält.

ASF-Medienquellobjektmodell

Die ASF-Medienquelle implementiert die INTERFACESMediaSource-Schnittstelle und macht die folgenden Schnittstellen verfügbar. Eine Anwendung kann einen Verweis auf diese Schnittstellen abrufen, indem SIE DIE SOURCEMEDIASource::QueryInterface für die ASF-Medienquelle aufrufen.

Schnittstelle BESCHREIBUNG
WFMEDIASOURCE Erforderlich für alle Medienquellen.
WFMediaEventGenerator Erforderlich für alle Medienquellen. Ermöglicht Anwendungen das Abrufen von Ereignissen aus der Medienquelle über die Mediensitzung.
VERZRGETService Fragt die Medienquelle nach der angegebenen Dienstschnittstelle ab.
Ipropertystore Legt Eigenschaften für die Medienquelle fest und ruft sie ab. Jede Eigenschaft enthält einen beschreibenden Namen und einen Wert.
PILLARMetadata Beschreibt die Metadaten für die ASF-Datei.
PILLARMetadataProvider Ruft eine Auflistung von Metadaten ab, entweder für eine gesamte Präsentation oder für einen Stream in der Präsentation.
1000000000 Fragt den Bereich der unterstützten Wiedergaberaten ab, einschließlich umgekehrter Wiedergabe.
THICKNESSRateControl Ruft die Wiedergaberate ab oder legt sie fest.
TRUSTTrustedInput Ruft den ITA für jeden asf-Datenstrom ab, der in der Quelle enthalten ist.
IMFPMPClient Ermöglicht es einer Medienquelle, einen Zeiger auf die IMFPMPHost-Schnittstelle zu empfangen, die zum Erstellen von Objekten im PMP-Prozess verwendet wird.
CODTIMECODETranslate Konvertiert zeitcodes zwischen Society of Motion Picture und Tv Engineers (SMPTE) und Zeiteinheiten von 100 Nanosekunden.

ASF-Medienquelldienste

Die ASF-Medienquelle stellt verschiedene Dienste bereit, die für die ASF-Datei gelten. Um einen Zeiger auf einen bestimmten Dienst abzurufen, muss die Anwendung einen der folgenden Dienstbezeichner in ihrem Aufruf von MFGetServiceverwenden. Weitere Informationen finden Sie unter Dienstschnittstellen.

Dienstbezeichner BESCHREIBUNG
MF _ RATE _ CONTROL _ SERVICE Mithilfe dieses Bezeichners kann eine Anwendung einen Zeiger auf die Schnittstellen "THICKNESSRateSupport" oder "POINTERRateControl" abrufen. Mithilfe des von der Medienquelle implementierten Ratenunterstützungsobjekts kann die Anwendung überprüfen, ob eine bestimmte Rate von der zugrunde liegenden ASF-Mediendatei unterstützt wird, um auch die schnellste und langsamste Rate zu erzielen. Mithilfe des Rate Control-Objekts kann die Anwendung die Wiedergaberate erhalten und festlegen. Wenn die Anwendung eine bestimmte Rate für die Wiedergabe angibt, überprüft die ASF-Medienquelle zunächst, ob die angeforderte Rate innerhalb der Ratenlimits liegt (bestimmt durch die Geschwindigkeiten "fasted" und "slowest") und legt dann die Rate fest. Dadurch wird nicht auf variable Bedingungen überprüft, da sich die Bitrate je nach Netzwerkbandbreite jederzeit ändern kann. Weitere Informationen finden Sie unter Rate Control.
_ _ MF-METADATENANBIETERDIENST _ Mit diesem Bezeichner kann die Anwendung einen Zeiger auf die BEZEICHNERMetadataProvider-Schnittstelle der ASF-Medienquelle erhalten. Diese Schnittstelle bietet Zugriff auf Informationen zur ASF-Datei, insbesondere zu den ASF-Headerobjekten und den im Medieninhalt enthaltenen Streams. Headerinformationen werden über Darstellungsdeskriptorattribute verfügbar macht, und Streaminformationen werden über Streamdeskriptorattribute bereitgestellt. Weitere Informationen zu diesen Attributen finden Sie unter Media Foundation Attribute für ASF-Headerobjekte. Zusätzlich zu Informationen, die über Attribute verfügbar gemacht werden, gibt es auch beschreibende Metadaten, die als Eigenschaften festgelegt werden.
_ _ MF-EIGENSCHAFTENHANDLERDIENST _ Mit diesem Bezeichner kann die Anwendung einen Zeiger auf die IPropertyStore-Schnittstelle der ASF-Medienquelle erhalten. Der Eigenschaftenspeicher enthält alle Metadaten im Zusammenhang mit der ASF-Datei. Dieser Bezeichner ist neu in Windows 7 und ersetzt den MF _ METADATA PROVIDER SERVICE zum Abrufen von _ _ Metadateneigenschaften.
MFNETSOURCE _ STATISTICS _ SERVICE Weitere Informationen finden Sie unter Abrufen von Netzwerkstatistiken in der Clientprotokollierung.
_ _ MF-ZEITCODEDIENST Mit diesem Bezeichner kann die Anwendung einen Zeiger auf die BEZEICHNERTimecodeTranslate-Schnittstelle der Medienquelle erhalten. Diese Implementierung kann verwendet werden, um Zeitcodeübersetzungen durchzuführen, z. B. das Konvertieren von SMPTE-Zeitcode in 100-Nano-Sekunden-Einheiten und zurück.

Timecodeübersetzung

Die ASF-Medienquelle bietet einen Zeitcodeübersetzungsdienst, mit dem Ihre Anwendung SMPTE-Zeitcode in die nächstgelegene Präsentationszeit (in einer Einheit von 100 Nanosekunden) konvertieren kann. Umgekehrt kann die Anwendung auch den Zeitcode für eine angeforderte Präsentationszeit erhalten. Der Dienst ist über die BEFIZTimecodeTranslate-Schnittstelle verfügbar, die von der ASF-Medienquelle implementiert wird. Die Methodenaufrufe für diesen Schnittstellenzeiger sind asynchron und können über den Hauptanwendungsthread ausgeführt werden, ohne die Benutzeroberfläche Ihrer Anwendung zu blockieren.

In den folgenden Schritten wird das Verfahren für die Zeitcodeübersetzung zusammengefasst:

  1. Rufen Sie den Zeiger auf die BENUTZEROBERFLÄCHETimecodeTranslate-Schnittstelle der ASF-Medienquelle ab, indem Sie MFGetService aufrufen und den MF _ TIMECODE _ SERVICE-Bezeichner angeben.
  2. Rufen Sie DEN NAMEN 155022222221111111111111111111111111111111121111111111111121111111122111111255112555225552255552555555555555552255525522555555555555555525525 Für BeginConvertTimecodeToHNS muss der Zeitcode als PROPVARIANT-Variable mit dem VT _ I8-Datentyp angegeben werden. Die BeginConvertHNSToTimecode-Methode erfordert die Zeit in Einheiten von 100 Nanosekunden als MFTIME-Typ.
  3. Schließen Sie den asynchronen Vorgang ab, indem Sie DIE TIMETimecodeTranslate::EndConvertTimecodeToHNS oder DIE TIMETimecodeTranslate::EndConvertTimecodeToHNS entsprechend aufrufen.

Während der Erstellung der Medienquelle erstellt der Quellre resolver einen Bytestream für die Datei, aus der die Medienquelle den ASF-Inhalt liest. Damit die Zeitkonvertierungen erfolgreich sind, muss der byte-Stream, der der ASF-Datei zugeordnet ist, Suchfunktionen haben. Andernfalls ruft die Anwendung den MF _ E _ BYTESTREAM _ NOT _ SEEKABLE-Fehler aus dem Begin...-Aufruf ab. Eine weitere Anforderung für Zeitkonvertierungen ist, dass die ASF-Datei, die durch die ASF-Medienquelle dargestellt wird, ASF-Indexobjekte enthalten muss. Die Präsentationszeiten und Zeitcodes werden aus den ASF-Indexobjekten extrahiert, die alle Indizes und die entsprechenden Suchpunkte für die ASF-Datei verwalten. Für die Zeit-zu-Zeit-Codeübersetzung der Präsentation muss die ASF-Datei ein einfaches Indexobjekt enthalten. für die Zeitübersetzung von Code zu Präsentationszeit muss die ASF-Datei über ein Indexobjekt verfügen. Die Konvertierungsvorgänge basieren auf dem zugrunde liegenden Indexer (WMContainer-Komponente), um das Indexobjekt zu analysieren und zu lesen, das der ASF-Datei zugeordnet ist. Wenn die Datei kein Indexobjekt enthält, empfängt die Anwendung asynchron den MF _ E _ NO _ INDEX-Fehlercode.

Um die von der Anwendung angeforderte Zeit zu übersetzen, listet die Medienquelle die Streams in der Datei auf und sucht den Stream, der das entsprechende ASF-Indexobjekt enthält. Wenn ein solcher Stream gefunden wird, analysiert die Medienquelle die ASF-Pakete des Streams, bis der richtige Zeitcode erreicht ist. Nachdem das richtige Beispiel gefunden wurde, wird die entsprechende Präsentationszeit oder der Zeitcode aus dem Beispiel abgerufen und an den Aufrufer zurückgegeben.

Unterstützung für Skriptbefehle

Wenn Sie eine ASF-Topologie erstellen, die einen Skriptstream enthält, wird der Topologie ein Skriptstreamknoten hinzugefügt. Dieser Knoten sendet ZUM richtigen Zeitpunkt EINSamples. Das vom Skriptquellenknoten bereitgestellte SKRIPTSAMPLE speichert die Daten in dem DEM Beispiel zugeordneten 15-0-0-000-Puffer. Sie können CopyToBuffer für das Beispiel aufrufen, um eine SPERREmediaBuffer-Sperre für den Puffer zu erhalten, um die Daten zu erhalten.

Skriptstreamnutzlasten werden als Typzeichenfolge in den Puffer gepackt, gefolgt von NULL, gefolgt von der Befehlszeichenfolge und NULL. Zeichenfolgen sind Unicode im ASF-Format.

Beispielsweise könnte eine Nutzlast wie folgt aussehen (wobei \0 ein NULL-Zeichen angibt):

URL\0http://contoso.com\0

Text\0Dies ist eine Beschriftung\0

ASF-Komponenten auf Pipelineebene

ASF-Unterstützung in Media Foundation