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


Реализация элемента управления скоростью

В этом разделе описывается, как пользовательские объекты конвейера могут поддерживать переменные частоты воспроизведения, включая обратное воспроизведение. Сведения об использовании управления скоростью из приложения см. в разделе "Контроль скорости".

Этот раздел состоит из следующих подразделов.

Если вы пишете объект конвейера Microsoft Media Foundation (источник мультимедиа, преобразование или приемник мультимедиа), возможно, потребуется поддерживать частоту воспроизведения переменных. Для этого реализуйте следующие интерфейсы:

  1. Реализуйте интерфейс IMFGetService.
  2. Поддержка службы MF_RATE_CONTROL_SERVICE. (См. раздел Интерфейсы служб.)
  3. Реализуйте интерфейс МВФRateSupport, который получает показатели воспроизведения, поддерживаемые объектом.
  4. Реализуйте интерфейс IMFRateControl, который получает или задает скорость воспроизведения.

Источники мультимедиа

Если источник средств массовой информации поддерживает контроль скорости, он должен реализовать как МВФRateSupport, так и МВФRateControl. В противном случае сеанс мультимедиа сообщает, что минимальная и максимальная скорость воспроизведения составляет 1,0, независимо от того, какие другие компоненты находятся в конвейере.

Скорость воспроизведения не влияет на время презентации выборок, поэтому источник мультимедиа не должен настраивать метки времени. Вместо этого часы презентации выполняются быстрее или медленнее. Для обратного воспроизведения источник предоставляет образцы в обратном порядке с уменьшением меток времени.

Параметр fThin метода IMFRateControl::SetRate указывает, должен ли источник мультимедиа стегать содержимое. Утончение применяется в основном к видеопотокам. В тонком режиме источник удаляет разностные кадры и предоставляет только ключевые кадры. При очень высоких скоростях воспроизведения источник может пропустить некоторые ключевые кадры (например, доставлять все остальные ключевые кадры).

Источнику не нужно удалять звуковые образцы в тонком режиме. Однако при очень высоких скоростях воспроизведения источник может не считывать данные достаточно быстро, чтобы заполнить примеры запросов конвейера. В этом случае источнику может потребоваться удалить некоторые звуковые данные. Если это так, он должен попытаться доставить звуковые образцы, близкие вовремя к примерам видео (если источник имеет оба типа потока).

При переходе потока между тонким и нетонким режимом он отправляет событие MEStreamThinMode .

Когда источник мультимедиа завершит вызов SetRate, он отправляет событие MESourceRateChanged.

Во время обратного воспроизведения:

  • Источник мультимедиа предоставляет образцы в обратном порядке, не изменяя метки времени.
  • Метки времени в потоке должны монотонно уменьшаться.
  • Начало содержимого считается окончанием потока. После доставки первого примера в потоке (то есть времени презентации = 0), он отправляет событие MEEndOfStream .

Преобразования Media Foundation

Как правило, преобразование Media Foundation (MFT) не требует явной поддержки управления скоростью, если MFT не реализует нетонченное обратное воспроизведение.

Если MFT не реализует интерфейс МВФRateSupport , сеанс мультимедиа предполагает следующее:

  • MFT поддерживает скорости воспроизведения с помощью arbitary для прямого воспроизведения, как тонких, так и нетонченных.
  • MFT поддерживает тонкую обратную воспроизведение, но не поддерживает нетоненькое обратное воспроизведение.

Если одно из этих условий не верно, MFT должен реализовать МВФRateSupport и МВФRateControl.

Обратное воспроизведение

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

Если MFT не предоставляет интерфейс МВФRateSupport, сеанс мультимедиа использует утончение для обратного воспроизведения, как показано ниже.

  • Сеанс мультимедиа отправляет ключевые кадры в MFT обычным способом, вызвав МВФTransform::P rocessInput.

  • Сеанс мультимедиа удаляет разностные кадры и заменяет их событиями MEStreamTick .

  • Между каждым примером сеанс мультимедиа очищает MFT, чтобы избежать ошибок, вызванных тем, что метки времени снижаются.

Пример считается ключевым кадром, если он имеет атрибут MFSampleExtension_CleanPoint значение TRUE, и считается разностным кадром, если этот атрибут имеет значение FALSE или не задан.

Если MFT реализует МВФRateSupport, сеанс мультимедиа использует этот интерфейс, чтобы определить, поддерживает ли MFT нетонченное обратное воспроизведение. Если MFT поддерживает нетонченное обратное воспроизведение, сеанс мультимедиа предоставляет все образцы в обратном порядке, не сбрасывая образцы или сбрасывая MFT.

Если MFT поддерживает нетонченное обратное воспроизведение, он должен реализовать интерфейс IMFRateControl. Сеанс мультимедиа будет использовать этот интерфейс для уведомления MFT при обратном воспроизведении. На этом этапе MFT должен быть готов к уменьшению меток времени и для разностных кадров, которые будут поступать в обратном порядке. Декодировщик обычно должен буферировать образцы, пока он не получит всю группу изображений (GOP), а затем декодировать весь GOP и выводить декодированные кадры в правильном (обратном) порядке.

Приемники мультимедиа

Если приемник мультимедиа не имеет скорости, сеанс мультимедиа предполагает, что приемник мультимедиа может обрабатывать любую скорость воспроизведения. Приемник средств массовой информации не нуждается в реализации МВФRateSupport. (Приемник мультимедиа без скорости возвращает флаг MEDIASINK_RATELESS из Метод IMFMediaSink::GetCharacteristics .)

В противном случае приемник мультимедиа должен реализовать МВФRateSupport , если он может обрабатывать показатели воспроизведения, отличные от 1,0.

Приемники мультимедиа не должны реализовывать МВФRateControl. При изменении скорости воспроизведения часы презентации вызывают метод IMFClockStateSink::OnClockSetRate.

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

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