Método IMFMediaSource::Start (mfidl.h)
Inicia, busca o reinicia el origen multimedia especificando dónde iniciar la reproducción.
Sintaxis
HRESULT Start(
[in] IMFPresentationDescriptor *pPresentationDescriptor,
[in] const GUID *pguidTimeFormat,
[in] const PROPVARIANT *pvarStartPosition
);
Parámetros
[in] pPresentationDescriptor
Puntero a la interfaz IMFPresentationDescriptor del descriptor de presentación del origen de medios. Para obtener el descriptor de presentación, llame a IMFMediaSource::CreatePresentationDescriptor. Puede modificar el descriptor de presentación antes de llamar a Start para seleccionar o anular la selección de secuencias o cambiar los tipos de medios.
[in] pguidTimeFormat
Puntero a un GUID que especifica el formato de hora. El formato de hora define las unidades del parámetro pvarStartPosition . Si el valor es GUID_NULL, el formato de hora es de 100 nanosegundos. Algunos orígenes multimedia pueden admitir GUID de formato de tiempo adicionales. Este parámetro puede ser NULL. Si el valor es NULL, equivale a GUID_NULL.
[in] pvarStartPosition
Especifica dónde iniciar la reproducción. Las unidades de este parámetro se indican mediante el formato de hora proporcionado en pguidTimeFormat. Si el formato de hora es GUID_NULL, el tipo de variante debe ser VT_I8 o VT_EMPTY. Use VT_I8 para especificar una nueva posición inicial, en unidades de 100 nanosegundos. Use VT_EMPTY para empezar desde la posición actual. Otros formatos de hora pueden usar otros tipos PROPVARIANT .
Valor devuelto
El método devuelve un valor HRESULT. Entre los valores posibles se incluyen los que se indican en la tabla siguiente, entre otros.
Código devuelto | Descripción |
---|---|
|
El método se ha llevado a cabo de forma correcta. |
|
La posición inicial está más allá del final de la presentación (origen multimedia asf). |
|
Un dispositivo de hardware no pudo iniciar el streaming. Este código de error se puede devolver mediante un origen multimedia que representa un dispositivo de hardware, como una cámara. Por ejemplo, si otra aplicación ya usa la cámara, el método podría devolver este código de error. |
|
La solicitud de inicio no es válida. Por ejemplo, la posición inicial está más allá del final de la presentación. |
|
Se ha llamado al método Shutdown del origen multimedia. |
|
El origen multimedia no admite el formato de hora especificado en pguidTimeFormat. |
Comentarios
Este método es asincrónico. Si la operación se realiza correctamente, el origen multimedia envía los siguientes eventos:
- Para cada nueva secuencia, el origen envía un evento MENewStream . Este evento se envía para la primera llamada Start en la que aparece la secuencia. Los datos del evento son un puntero a la interfaz IMFMediaStream de la secuencia.
- Para cada secuencia actualizada , el origen envía un evento MEUpdatedStream . Se actualiza una secuencia si la secuencia ya existía cuando se llamó a Start (por ejemplo, si la aplicación busca durante la reproducción). Los datos del evento son un puntero a la interfaz IMFMediaStream de la secuencia.
- Si se detuvo el estado anterior, el origen envía un evento MESourceStarted .
- Si el estado anterior se inició o se ha pausado y la posición inicial es la posición actual (VT_EMPTY), el origen envía un evento MESourceStarted .
- Si el estado anterior se inició o se ha pausado y se especifica una nueva posición inicial, el origen envía un evento MESourceSeeked .
- Si el origen envía un evento MESourceStarted , cada secuencia multimedia envía un evento MEStreamStarted . Si el origen envía un evento MESourceSeeked , cada secuencia envía un evento MEStreamSeeked .
Una llamada a Start da como resultado una búsqueda si el estado anterior se inició o se ha pausado, y la nueva posición inicial no es VT_EMPTY. No todos los orígenes multimedia pueden buscar. Si un origen multimedia puede buscar, el método IMFMediaSource::GetCharacteristics devuelve la marca MFMEDIASOURCE_CAN_SEEK .
Los eventos del origen multimedia no se sincronizan con eventos de las secuencias multimedia. Si busca un origen multimedia, por lo tanto, todavía puede recibir muestras de la posición anterior después de obtener el evento MESourceSeeked . Si necesita sincronizar las operaciones, espere al evento de secuencia, MEStreamSeeked, que marca el punto exacto de la secuencia donde se produce la búsqueda.
Fin de Stream
Cuando se reproduce una secuencia al final, la secuencia envía un evento MEEndOfStream . Cuando todas las secuencias seleccionadas han llegado al final, el origen multimedia envía un evento MEEndOfPresentation .Si la posición inicial está más allá del final de una secuencia seleccionada (pero antes del final de la presentación), la secuencia debe enviar MEEndOfStream inmediatamente después de MEStreamStarted/MEStreamSeeked. Si la reproducción llega al final de la presentación y se vuelve a llamar a Start desde la posición actual, las secuencias vuelven a enviar el evento MEEndOfStream y el origen multimedia vuelven a enviar el evento MEEndOfPresentation . Estos eventos informan a la canalización de no solicitar más datos.
Durante la reproducción inversa, el inicio del archivo se considera el final de la secuencia. Para obtener más información, vea Implementing Rate Control.
Inicio de implementación
Cuando un origen multimedia ejecuta una búsqueda, debe comenzar en el primer fotograma clave antes del tiempo de búsqueda, de modo que el descodificador pueda descodificar las muestras para la hora de inicio de destino. La canalización descartará los ejemplos descodificados que sean demasiado pronto.Si la hora de inicio es VT_EMPTY y el estado anterior se inició o se ha pausado, el origen debe reanudarse desde su posición actual. En este caso, no es necesario volver a enviar el fotograma clave anterior, ya que el descodificador seguirá teniendo los datos que se enviaron anteriormente.
Al validar el parámetro pPresentationDescriptor , el origen multimedia solo debe comprobar la información que necesita para funcionar correctamente. En concreto, el cliente puede agregar atributos privados al descriptor de presentación. La presencia de atributos adicionales no debe provocar un error en el método Start .
Después de llamar a Start , cada secuencia del origen multimedia debe realizar una de las siguientes acciones:
- Entregar datos multimedia en respuesta a las llamadas IMFMediaStream::RequestSample .
- Envíe eventos MEStreamTick para indicar un intervalo en la secuencia.
- Envíe un evento MEEndOfStream para indicar el final de la secuencia.
Ejemplos
En el ejemplo siguiente se inicia la reproducción en 1 segundo en la presentación.
PROPVARIANT var;
PropVariantInit(&var);
var.vt = VT_I8;
var.hVal.QuadPart = 10000000; // 10^7 = 1 second.
hr = pSource->Start(pPresentationDescriptor, NULL, &var);
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista [aplicaciones de escritorio | aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2008 [aplicaciones de escritorio | aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | mfidl.h |
Library | Mfuuid.lib |