Определение поддерживаемых ставок
Перед изменением скорости воспроизведения приложение должно проверка, поддерживается ли скорость воспроизведения объектами в конвейере. Интерфейс IMFRateSupport предоставляет методы для получения максимальной скорости вперед и обратного, поддерживаемой скорости, ближайшей к запрошенной ставке, и самой медленной скорости. Каждый из этих запросов скорости может указать направление воспроизведения и использовать ли истончение. Точная скорость воспроизведения запрашивается с помощью интерфейса IMFRateControl .
Сведения об изменении скорости воспроизведения см. в разделе Настройка скорости воспроизведения в сеансе мультимедиа.
Общие сведения о скорости воспроизведения см. в разделе Сведения об управлении скоростью.
Определение текущей скорости воспроизведения
Получите службу управления скоростью из сеанса мультимедиа.
IMFRateControl *pRateControl = NULL; hr = MFGetService( pMediaSession, MF_RATE_CONTROL_SERVICE, IID_IMFRateControl, (void**) &pRateControl );
Передайте указатель инициализированного интерфейса IMFMediaSession в параметр punkObjectMFGetService.
Приложение должно запрашивать службу управления скоростью через сеанс мультимедиа. Внутренний сеанс мультимедиа запрашивает объекты в топологии.
Вызовите метод IMFRateControl::GetRate, чтобы получить текущую скорость воспроизведения.
hr = pRateControl->GetRate(&bThin, &rate);
Параметр pfThingetRate получает значение BOOL , указывающее, является ли поток истонченным в данный момент. Приложение должно передать значение NULL , если оно не хочет запрашивать поддержку истончения для потока. Параметр pflRate получает текущую скорость воспроизведения.
Определение ближайшего поддерживаемого тарифа
Получите службу поддержки по тарифам из сеанса мультимедиа.
IMFRateSupport *pRateSupport = NULL; hr = MFGetService( pMediaSession, MF_RATE_CONTROL_SERVICE, IID_IMFRateSupport, (void**) &pRateSupport );
Передайте указатель инициализированного интерфейса IMFMediaSession в параметр punkObjectMFGetService.
Вызовите метод IMFRateSupport::IsRateSupported , чтобы получить поддерживаемую скорость, ближайшую к запрошенной скорости воспроизведения.
float rateRequested = 4.0; float actualRate = 0; hr = pRateSupport->IsRateSupported( TRUE, rateRequested, &actualRate );
В примере запрашивается, поддерживается ли скорость воспроизведения 4.0 с истончением. На это указывает передача TRUE в параметре fThinisRateSupported. Если эта скорость поддерживается, функция actualRate содержит скорость воспроизведения 4,0, а вызов завершается успешно с возвращаемым значением S_OK. Если точная скорость воспроизведения не поддерживается, ближайший поддерживаемый показатель будет получен в параметре actualRate. Если скорость не поддерживается и ближайшей скорости воспроизведения нет, вызов возвращает соответствующий код ошибки.
Эти значения могут изменяться в зависимости от того, какие компоненты конвейера загружаются. Поэтому при загрузке нового topololgy значения следует запрашивать снова.
Если требуемая скорость воспроизведения не поддерживается, один из вариантов — запросить каждый объект в топологии по отдельности, чтобы узнать, не поддерживает ли определенный компонент скорость. Возможно, вы сможете перестроить топологию без этого компонента, а затем воспроизвести с требуемой скоростью. Например, если каждый компонент, кроме отрисовщика звука, поддерживает заданную скорость, можно перестроить топологию без аудиоветвления и воспроизвести с нужной скоростью без звука.
Определение самой медленной поддерживаемой скорости
Получите службу поддержки по тарифам из сеанса мультимедиа.
IMFRateSupport *pRateSupport = NULL; hr = MFGetService( pMediaSession, MF_RATE_CONTROL_SERVICE, IID_IMFRateSupport, (void**) &pRateSupport );
Передайте указатель инициализированного интерфейса IMFMediaSession в параметр punkObjectMFGetService.
Вызовите метод IMFRateSupport::GetSlowestRate, чтобы получить самую низкую поддерживаемую скорость.
float slowestRate = 0; hr = pRateSupport->GetSlowestRate( MFRATE_REVERSE, TRUE, &slowestRate);
В примере запрашивается самая низкая скорость обратного воспроизведения с истончением. Нижняя граница частоты получается в параметре slowestRategetSlowestRate.
Если обратное воспроизведение или истончение не поддерживается, вызов возвращает соответствующий код ошибки.
Связанные темы
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по