Поделиться через


Определение поддерживаемых ставок

Перед изменением скорости воспроизведения приложение должно проверить, поддерживается ли скорость воспроизведения объектами в конвейере. Интерфейс МВФRateSupport предоставляет методы для получения максимальной ставки вперед и обратной передачи, поддерживаемой ставки, ближайшей к запрошенной ставке, и самой медленной. Каждый из этих запросов скорости может указать направление воспроизведения и использовать тоньше. Точный показатель воспроизведения запрашивается с помощью интерфейса МВФRateControl.

Сведения об изменении скорости воспроизведения см. в разделе "Настройка скорости воспроизведения" в сеансе мультимедиа.

Общие сведения о скоростях воспроизведения см. в разделе "О контроле скорости".

Определение текущей частоты воспроизведения

  1. Получите службу управления скоростью из сеанса мультимедиа.

    IMFRateControl *pRateControl = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateControl, 
           (void**) &pRateControl );
    

    Передайте инициализированный указатель интерфейса IMFMediaSession в параметре punkObject MFGetService.

    Приложение должно запрашивать службу управления скоростью через сеанс мультимедиа. Во внутреннем режиме сеанс мультимедиа запрашивает объекты в топологии.

  2. Вызовите метод IMFRateControl::GetRate, чтобы получить текущую скорость воспроизведения.

    hr = pRateControl->GetRate(&bThin, &rate);
    

    Параметр pfThin GetRate получает значение BOOL, указывающее, является ли поток тонким. Приложение должно передать значение NULL , если он не хочет запрашивать поддержку тонкая для потока. Параметр pflRate получает текущую частоту воспроизведения.

Определение ближайшей поддерживаемой частоты

  1. Получите службу поддержки частоты из сеанса мультимедиа.

    IMFRateSupport *pRateSupport = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateSupport, 
           (void**) &pRateSupport );
    

    Передайте инициализированный указатель интерфейса IMFMediaSession в параметре punkObject MFGetService.

  2. Вызовите метод МВФRateSupport::IsRateSupported, чтобы получить поддерживаемую скорость, ближайшую к запрошенной скорости воспроизведения.

    float rateRequested = 4.0;
    float actualRate = 0;
    hr = pRateSupport->IsRateSupported(
           TRUE, 
           rateRequested, 
           &actualRate );
    

    В примере запрашивается, поддерживается ли скорость воспроизведения 4.0 с утончением. Это указывается путем передачи TRUE в параметре fThin IsRateSupported. Если эта частота поддерживается, фактическийrate содержит частоту воспроизведения 4,0, и вызов завершается успешно с возвращаемым значением S_OK. Если точное значение частоты воспроизведения не поддерживается, то в фактической скорости будет получена ближайшая поддерживаемая скорость. Если скорость не поддерживается и не существует ближайшей скорости воспроизведения, вызов возвращает соответствующий код ошибки.

    Эти значения могут изменяться в зависимости от того, какие компоненты конвейера загружаются. Поэтому при загрузке новой топологии следует повторно запрашивать значения.

    Если требуемая скорость воспроизведения не поддерживается, один из вариантов — запрашивать каждый объект в топологии по отдельности, чтобы узнать, не поддерживает ли конкретный компонент частоту. Возможно, вы сможете перестроить топологию без этого компонента, а затем играть с требуемой скоростью. Например, если каждый компонент, кроме отрисовщика звука, поддерживает заданную частоту, можно перестроить топологию без звуковой ветви и воспроизвести по требуемой скорости без звука.

Определение самой медленно поддерживаемой скорости

  1. Получите службу поддержки частоты из сеанса мультимедиа.

    IMFRateSupport *pRateSupport = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateSupport, 
           (void**) &pRateSupport );
    

    Передайте инициализированный указатель интерфейса IMFMediaSession в параметре punkObject MFGetService.

  2. Вызовите метод МВФRateSupport::GetSlowestRate, чтобы получить самую низкую поддерживаемую скорость.

    float slowestRate = 0;
    hr = pRateSupport->GetSlowestRate(
           MFRATE_REVERSE, 
           TRUE, 
           &slowestRate);
    

    Примеры запросов к самой медленной скорости обратного воспроизведения с утончением. Нижняя ограничивающая скорость получается в параметре getSlowestRate.

    Если обратное воспроизведение или утончение не поддерживается, вызов возвращает соответствующий код ошибки.

Сеанс мультимедиа

Контроль скорости

Поиск, Быстрая прокрутка и обратный воспроизведение