Implementación del control de velocidad
En este tema se describe cómo los objetos de canalización personalizados pueden admitir velocidades de reproducción variables, incluida la reproducción inversa. Para obtener información sobre el uso del control de velocidad desde una aplicación, consulte Control de velocidad.
Este tema contiene las siguientes secciones:
Si va a escribir un objeto de canalización de Microsoft Media Foundation (un origen multimedia, una transformación o un receptor multimedia), es posible que tenga que admitir velocidades de reproducción variables. Para ello, implemente las interfaces siguientes:
- Implemente la interfaz IMFGetService.
- Admita el servicio MF_RATE_CONTROL_SERVICE . (Consulte Interfaces de servicio).
- Implemente la interfaz IMFRateSupport , que obtiene las tasas de reproducción admitidas por el objeto .
- Implemente la interfaz IMFRateControl , que obtiene o establece la velocidad de reproducción.
Orígenes multimedia
Si una fuente de medios admite el control de tasas, debe implementar IMFRateSupport y IMFRateControl. De lo contrario, la sesión multimedia informa de que la velocidad de reproducción mínima y máxima es 1,0, independientemente de qué otros componentes estén en la canalización.
La velocidad de reproducción no afecta a los tiempos de presentación de las muestras, por lo que el origen multimedia no debe ajustar sus marcas de tiempo. En su lugar, el reloj de presentación se ejecuta a una velocidad más rápida o más lenta. Para la reproducción inversa, el origen entrega muestras en orden inverso, con marcas de tiempo decrecientes.
El parámetro fThin del método IMFRateControl::SetRate indica si el origen multimedia debe ajustar el contenido. Thinning se aplica principalmente a las secuencias de vídeo. En modo fino, el origen quita fotogramas delta y entrega solo fotogramas clave. A velocidades de reproducción muy altas, el origen podría omitir algunos fotogramas clave (por ejemplo, entregar cada otro fotograma clave).
El origen no tiene que quitar muestras de audio en modo fino. Sin embargo, a velocidades de reproducción muy altas, es posible que el origen no pueda leer los datos lo suficientemente rápido como para rellenar las solicitudes de ejemplo de la canalización. En ese caso, es posible que el origen tenga que quitar algunos datos de audio. Si es así, debe intentar entregar muestras de audio próximas a las muestras de vídeo (suponiendo que el origen tenga ambos tipos de secuencia).
Cuando una secuencia pasa entre el modo fino y no fino, envía un evento MEStreamThinMode .
Cuando el origen multimedia completa una llamada a SetRate, envía el evento MESourceRateChanged.
Durante la reproducción inversa:
- El origen multimedia entrega muestras en orden inverso, sin ajustar las marcas de tiempo.
- Las marcas de tiempo dentro de una secuencia deben disminuir de forma monotónica.
- El principio del contenido se considera el final de la secuencia. Después de que cada secuencia multimedia entregue el primer ejemplo de la secuencia (es decir, tiempo de presentación = 0), envía el evento MEEndOfStream .
Transformaciones de Media Foundation
En general, una transformación de Media Foundation (MFT) no necesita compatibilidad explícita para el control de velocidad, a menos que MFT implemente la reproducción inversa no delgada.
Si un MFT no implementa la interfaz IMFRateSupport , la sesión multimedia asume lo siguiente:
- El MFT admite velocidades de reproducción arbitary para la reproducción hacia delante, tanto delgadas como no delgadas.
- El MFT admite la reproducción inversa delgada, pero no admite la reproducción inversa no delgada.
Si alguna de estas condiciones no es cierta, el MFT debe implementar IMFRateSupport y IMFRateControl.
Reproducción inversa
La sesión multimedia puede reproducirse inverso incluso si una o varias transformaciones de la canalización no admiten explícitamente la reproducción inversa.
Si un MFT no expone la interfaz IMFRateSupport , la sesión multimedia usa el fino para la reproducción inversa, como se indica a continuación:
La sesión multimedia envía fotogramas clave al MFT de la manera habitual, llamando a IMFTransform::P rocessInput.
La sesión multimedia quita fotogramas delta y los reemplaza por eventos MEStreamTick .
Entre cada ejemplo, la sesión multimedia vacía el MFT para evitar errores causados por el hecho de que las marcas de tiempo están disminuyendo.
Un ejemplo se considera un fotograma clave si tiene el atributo MFSampleExtension_CleanPoint establecido en TRUE y se considera un marco delta si este atributo es FALSE o no está establecido.
Si el MFT implementa IMFRateSupport, la sesión multimedia usa esta interfaz para detectar si el MFT admite la reproducción inversa no delgada. Si el MFT admite la reproducción inversa no delgada, la sesión multimedia entrega todos los ejemplos, en orden inverso, sin quitar muestras ni vaciar el MFT.
Si un MFT admite la reproducción inversa no delgada, debe implementar la interfaz IMFRateControl. La sesión multimedia usará esta interfaz para notificar al MFT cuando se produzca la reproducción inversa. En ese momento, el MFT debe estar preparado para que las marcas de tiempo disminuyan y para que los fotogramas delta lleguen en orden inverso. Normalmente, un descodificador tendrá que almacenar en búfer muestras hasta que haya recibido un grupo completo de imágenes (GOP), descodificar todo el GOP y generar los fotogramas descodificados en el orden correcto (inverso).
Receptores de medios
Si un receptor multimedia no tiene velocidad, la sesión multimedia supone que el receptor de medios puede controlar cualquier velocidad de reproducción. El receptor de medios no necesita implementar IMFRateSupport. (Un receptor de medios sin velocidad devuelve la marca MEDIASINK_RATELESS de la MÉTODO IMFMediaSink::GetCharacteristics ).
De lo contrario, un receptor multimedia debe implementar IMFRateSupport si puede controlar las tasas de reproducción que no sean 1.0.
Los receptores de medios no deben implementar IMFRateControl. Cuando cambia la velocidad de reproducción, el reloj de presentación llama al método IMFClockStateSink::OnClockSetRate del receptor multimedia.
Temas relacionados