Condividi tramite


Metodo IMFMediaSource::Start (mfidl.h)

Avvia, cerca o riavvia l'origine multimediale specificando dove avviare la riproduzione.

Sintassi

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

Parametri

[in] pPresentationDescriptor

Puntatore all'interfaccia IMFPresentationDescriptor del descrittore di presentazione dell'origine multimediale. Per ottenere il descrittore di presentazione, chiamare IMFMediaSource::CreatePresentationDescriptor. È possibile modificare il descrittore di presentazione prima di chiamare Start, per selezionare o deselezionare i flussi o modificare i tipi di supporti.

[in] pguidTimeFormat

Puntatore a un GUID che specifica il formato dell'ora. Il formato dell'ora definisce le unità per il parametro pvarStartPosition . Se il valore è GUID_NULL, il formato dell'ora è di 100 nanosecondi. Alcune origini multimediali potrebbero supportare GUID di formato di tempo aggiuntivi. Questo parametro può essere NULL. Se il valore è NULL, equivale a GUID_NULL.

[in] pvarStartPosition

Specifica dove avviare la riproduzione. Le unità di questo parametro sono indicate dal formato dell'ora specificato in pguidTimeFormat. Se il formato dell'ora è GUID_NULL, il tipo variant deve essere VT_I8 o VT_EMPTY. Usare VT_I8 per specificare una nuova posizione iniziale, in unità di 100 nanosecondi. Usare VT_EMPTY per iniziare dalla posizione corrente. Altri formati temporali potrebbero usare altri tipi PROPVARIANT .

Valore restituito

Il metodo restituisce un valore HRESULT. I valori possibili includono, ma non sono limitati a, quelli indicati nella tabella seguente.

Codice restituito Descrizione
S_OK
Il metodo è riuscito.
MF_E_ASF_OUTOFRANGE
La posizione iniziale è successiva alla fine della presentazione (origine multimediale ASF).
MF_E_HW_MFT_FAILED_START_STREAMING
Un dispositivo hardware non è riuscito ad avviare lo streaming. Questo codice di errore può essere restituito da un'origine multimediale che rappresenta un dispositivo hardware, ad esempio una fotocamera. Ad esempio, se la fotocamera è già utilizzata da un'altra applicazione, il metodo potrebbe restituire questo codice di errore.
MF_E_INVALIDREQUEST
La richiesta di avvio non è valida. Ad esempio, la posizione iniziale supera la fine della presentazione.
MF_E_SHUTDOWN
È stato chiamato il metodo Shutdown dell'origine multimediale.
MF_E_UNSUPPORTED_TIME_FORMAT
L'origine multimediale non supporta il formato dell'ora specificato in pguidTimeFormat.

Commenti

Questo metodo è asincrono. Se l'operazione ha esito positivo, l'origine multimediale invia gli eventi seguenti:

  • Per ogni nuovo flusso, l'origine invia un evento MENewStream . Questo evento viene inviato per la prima chiamata Start in cui viene visualizzato il flusso. I dati dell'evento sono un puntatore all'interfaccia IMFMediaStream del flusso.
  • Per ogni flusso aggiornato , l'origine invia un evento MEUpdatedStream . Un flusso viene aggiornato se il flusso esiste già quando è stato chiamato Start (ad esempio, se l'applicazione cerca durante la riproduzione). I dati dell'evento sono un puntatore all'interfaccia IMFMediaStream del flusso.
  • Se lo stato precedente è stato arrestato, l'origine invia un evento MESourceStarted .
  • Se lo stato precedente è stato avviato o sospeso e la posizione iniziale è la posizione corrente (VT_EMPTY), l'origine invia un evento MESourceStarted .
  • Se lo stato precedente è stato avviato o sospeso e viene specificata una nuova posizione iniziale, l'origine invia un evento MESourceSeeked .
  • Se l'origine invia un evento MESourceStarted , ogni flusso multimediale invia un evento MEStreamStarted . Se l'origine invia un evento MESourceSeeked , ogni flusso invia un evento MEStreamSeeked .
Se l'operazione di avvio ha esito negativo in modo asincrono (dopo che il metodo restituisce S_OK), l'origine multimediale invia un evento MESourceStarted che contiene un codice di errore, senza inviare altri eventi elencati qui. Se il metodo non riesce in modo sincrono (restituisce un codice di errore), non vengono generati eventi.

Una chiamata a Start genera una ricerca se lo stato precedente è stato avviato o sospeso e la nuova posizione iniziale non è VT_EMPTY. Non tutte le origini multimediali possono cercare. Se un'origine multimediale può cercare, il metodo IMFMediaSource::GetCharacteristics restituisce il flag MFMEDIASOURCE_CAN_SEEK .

Gli eventi dell'origine multimediale non vengono sincronizzati con gli eventi dei flussi multimediali. Se si cerca un'origine multimediale, è quindi possibile ricevere campioni dalla posizione precedente dopo aver ottenuto l'evento MESourceSeeked . Se è necessario sincronizzare le operazioni, attendere l'evento di flusso , MEStreamSeeked, che contrassegna il punto esatto nel flusso in cui si verifica la ricerca.

Fine del Stream

Quando un flusso viene riprodotto fino alla fine, il flusso invia un evento MEEndOfStream . Quando tutti i flussi selezionati hanno raggiunto la fine, l'origine multimediale invia un evento MEEndOfPresentation .

Se la posizione iniziale supera la fine di un flusso selezionato (ma prima della fine della presentazione), il flusso deve inviare MEEndOfStream immediatamente dopo MEStreamStarted/MEStreamSeeked. Se la riproduzione raggiunge la fine della presentazione e Start viene richiamata di nuovo dalla posizione corrente, i flussi reviano l'evento MEEndOfStream e l'origine multimediale invia nuovamente l'evento MEEndOfPresentation . Questi eventi informano la pipeline di non richiedere altri dati.

Durante la riproduzione inversa, l'inizio del file viene considerato la fine del flusso. Per altre informazioni, vedere Implementazione del controllo frequenza.

Implementazione dell'avvio

Quando un'origine multimediale esegue una ricerca, deve iniziare al primo fotogramma chiave prima dell'ora di ricerca, in modo che il decodificatore possa decodificare gli esempi per l'ora di inizio della destinazione. La pipeline eliminerà tutti gli esempi decodificati troppo presto.

Se l'ora di inizio è VT_EMPTY e lo stato precedente è stato avviato o sospeso, l'origine deve riprendere dalla posizione corrente. In questo caso, non è necessario inviare nuovamente il fotogramma chiave precedente, perché il decodificatore avrà comunque i dati inviati in precedenza.

Quando si convalida il parametro pPresentationDescriptor , l'origine multimediale deve verificare solo le informazioni necessarie per funzionare correttamente. In particolare, il client può aggiungere attributi privati al descrittore di presentazione. La presenza di attributi aggiuntivi non deve causare l'esito negativo del metodo Start .

Dopo aver chiamato Start , ogni flusso nell'origine multimediale deve eseguire una delle operazioni seguenti:

Per altre informazioni, vedere Scrittura di un'origine multimediale personalizzata.

Esempio

L'esempio seguente avvia la riproduzione a 1 secondo nella presentazione.

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

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

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2008 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione mfidl.h
Libreria Mfuuid.lib

Vedi anche

IMFMediaSource

Origini multimediali