Freigeben über


IMFMediaSource::Start-Methode (mfidl.h)

Startet, sucht oder startet die Medienquelle neu, indem angegeben wird, wo die Wiedergabe gestartet werden soll.

Syntax

HRESULT Start(
  [in] IMFPresentationDescriptor *pPresentationDescriptor,
  [in] const GUID                *pguidTimeFormat,
  [in] const PROPVARIANT         *pvarStartPosition
);

Parameter

[in] pPresentationDescriptor

Zeiger auf die IMFPresentationDescriptor-Schnittstelle des Präsentationsdeskriptors der Medienquelle. Um den Präsentationsdeskriptor abzurufen, rufen Sie IMFMediaSource::CreatePresentationDescriptor auf. Sie können den Präsentationsdeskriptor ändern, bevor Sie Start aufrufen, um Streams auszuwählen oder zu deaktivieren oder die Medientypen zu ändern.

[in] pguidTimeFormat

Zeiger auf eine GUID, die das Zeitformat angibt. Das Zeitformat definiert die Einheiten für den pvarStartPosition-Parameter . Wenn der Wert GUID_NULL ist, ist das Zeitformat 100 Nanosekundeneinheiten. Einige Medienquellen unterstützen möglicherweise zusätzliche Zeitformat-GUIDs. Dieser Parameter kann NULL sein. Wenn der Wert NULL ist, entspricht er GUID_NULL.

[in] pvarStartPosition

Gibt an, wo die Wiedergabe gestartet werden soll. Die Einheiten dieses Parameters werden durch das in pguidTimeFormat angegebene Zeitformat angegeben. Wenn das Zeitformat GUID_NULL ist, muss der Variantentyp VT_I8 oder VT_EMPTY sein. Verwenden Sie VT_I8 , um eine neue Startposition in Einheiten von 100 Nanosekunden anzugeben. Verwenden Sie VT_EMPTY , um mit der aktuellen Position zu beginnen. Andere Zeitformate können andere PROPVARIANT-Typen verwenden.

Rückgabewert

Die Methode gibt ein HRESULT zurück. Mögliches Werte (aber nicht die Einzigen) sind die in der folgenden Tabelle.

Rückgabecode BESCHREIBUNG
S_OK
Die Methode wurde erfolgreich ausgeführt.
MF_E_ASF_OUTOFRANGE
Die Startposition befindet sich am Ende der Präsentation (ASF-Medienquelle).
MF_E_HW_MFT_FAILED_START_STREAMING
Ein Hardwaregerät konnte das Streaming nicht starten. Dieser Fehlercode kann von einer Medienquelle zurückgegeben werden, die ein Hardwaregerät darstellt, z. B. eine Kamera. Wenn die Kamera beispielsweise bereits von einer anderen Anwendung verwendet wird, gibt die Methode möglicherweise diesen Fehlercode zurück.
MF_E_INVALIDREQUEST
Die Startanforderung ist ungültig. Beispielsweise befindet sich die Startposition nach dem Ende der Präsentation.
MF_E_SHUTDOWN
Die Shutdown-Methode der Medienquelle wurde aufgerufen.
MF_E_UNSUPPORTED_TIME_FORMAT
Die Medienquelle unterstützt das in pguidTimeFormat angegebene Zeitformat nicht.

Hinweise

Diese Methode ist asynchron. Wenn der Vorgang erfolgreich ist, sendet die Medienquelle die folgenden Ereignisse:

Wenn der Startvorgang asynchron fehlschlägt (nachdem die Methode S_OK zurückgegeben hat), sendet die Medienquelle ein MESourceStarted-Ereignis , das einen Fehlercode enthält, ohne eines der anderen hier aufgeführten Ereignisse zu senden. Wenn die Methode synchron fehlschlägt (gibt einen Fehlercode zurück), werden keine Ereignisse ausgelöst.

Ein Aufruf von Start führt zu einer Suche , wenn der vorherige Zustand gestartet oder angehalten wurde und die neue Startposition nicht VT_EMPTY ist. Nicht jede Medienquelle kann suchen. Wenn eine Medienquelle suchen kann, gibt die IMFMediaSource::GetCharacteristics-Methode das MFMEDIASOURCE_CAN_SEEK-Flag zurück.

Ereignisse aus der Medienquelle werden nicht mit Ereignissen aus den Mediendatenströmen synchronisiert. Wenn Sie eine Medienquelle suchen, können Sie daher nach dem Abrufen des MESourceSeeked-Ereignisses weiterhin Beispiele aus der früheren Position erhalten. Wenn Sie die Vorgänge synchronisieren müssen, warten Sie auf das Streamereignis MEStreamSeeked, das den genauen Punkt im Stream markiert, an dem die Suche stattfindet.

Ende Stream

Wenn ein Stream bis zum Ende wiedergegeben wird, sendet der Stream ein MEEndOfStream-Ereignis . Wenn alle ausgewählten Streams das Ende erreicht haben, sendet die Medienquelle ein MEEndOfPresentation-Ereignis .

Wenn die Startposition am Ende eines ausgewählten Datenstroms liegt (aber vor dem Ende der Präsentation), sollte der Stream MEEndOfStream unmittelbar nach MEStreamStarted/MEStreamSeeked senden. Wenn die Wiedergabe das Ende der Präsentation erreicht und Start von der aktuellen Position aus erneut aufgerufen wird, senden die Streams das MEEndOfStream-Ereignis erneut, und die Medienquelle sendet das MEEndOfPresentation-Ereignis erneut. Diese Ereignisse informieren die Pipeline, keine weiteren Daten anzufordern.

Während der umgekehrten Wiedergabe wird der Anfang der Datei als Das Ende des Datenstroms betrachtet. Weitere Informationen finden Sie unter Implementieren der Ratensteuerung.

Implementieren von Start

Wenn eine Medienquelle eine Suche ausführt, sollte sie beim ersten Keyframe vor der Suchzeit beginnen, damit der Decoder die Beispiele für die Zielstartzeit decodieren kann. Die Pipeline verwirft alle decodierten Beispiele, die zu früh sind.

Wenn die Startzeit VT_EMPTY ist und der vorherige Zustand gestartet oder angehalten wurde, sollte die Quelle von ihrer aktuellen Position aus fortgesetzt werden. In diesem Fall ist es nicht erforderlich, den vorherigen Keyframe erneut zu senden, da der Decoder weiterhin die Daten enthält, die zuvor gesendet wurden.

Beim Überprüfen des pPresentationDescriptor-Parameters sollte die Medienquelle nur auf die Informationen überprüfen, die sie für die ordnungsgemäße Funktion benötigt. Insbesondere kann der Client dem Präsentationsdeskriptor private Attribute hinzufügen. Das Vorhandensein zusätzlicher Attribute sollte nicht dazu führen, dass die Start-Methode fehlschlägt.

Nachdem Start aufgerufen wurde, muss jeder Stream auf der Medienquelle eine der folgenden Aktionen ausführen:

Weitere Informationen finden Sie unter Schreiben einer benutzerdefinierten Medienquelle.

Beispiele

Im folgenden Beispiel wird die Wiedergabe mit einer Sekunde in der Präsentation gestartet.

PROPVARIANT var;
PropVariantInit(&var);
var.vt = VT_I8;
var.hVal.QuadPart = 10000000; // 10^7 = 1 second.

hr = pSource->Start(pPresentationDescriptor, NULL, &var);

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile mfidl.h
Bibliothek Mfuuid.lib

Weitere Informationen

IMFMediaSource

Medienquellen