Share via


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
S_OK
El método se ha llevado a cabo de forma correcta.
MF_E_ASF_OUTOFRANGE
La posición inicial está más allá del final de la presentación (origen multimedia asf).
MF_E_HW_MFT_FAILED_START_STREAMING
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.
MF_E_INVALIDREQUEST
La solicitud de inicio no es válida. Por ejemplo, la posición inicial está más allá del final de la presentación.
MF_E_SHUTDOWN
Se ha llamado al método Shutdown del origen multimedia.
MF_E_UNSUPPORTED_TIME_FORMAT
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 .
Si se produce un error en la operación de inicio de forma asincrónica (después de que el método devuelva S_OK), el origen multimedia envía un evento MESourceStarted que contiene un código de error, sin enviar ninguno de los demás eventos enumerados aquí. Si se produce un error en el método de forma sincrónica (devuelve un código de error), no se genera ningún evento.

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:

Para obtener más información, consulte Escritura de un origen multimedia personalizado.

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

Consulte también

IMFMediaSource

Orígenes multimedia