Доставка сжатых примеров с помощью асинхронного средства чтения

[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией. Он был заменен средством чтения исходного кода и модуля записи приемника. Средство чтения исходного кода и модуль записи приемника оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код по возможности использовал средство чтения исходного кода и модуль записи приемника вместо пакета SDK для Windows Media Format 11. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

Асинхронное средство чтения может доставлять сжатые примеры из потоков в ASF-файлах. Приложения обычно доставляют сжатые примеры при копировании потока из одного файла в другой. Не рекомендуется повторно сжимать данные, которые были восстановлены из сжатого потока, так как данные теряются в процессе кодирования. Цифровой носитель, сжатый более одного раза, будет иметь заметное снижение качества.

Пакет SDK для формата Windows Media не предоставляет методы декодирования данных после их извлечения из ASF-файла. Если вы получаете сжатые примеры, а затем хотите распаковать их, вам потребуется предоставить собственный код для этого. Один из способов обойти это ограничение — записать сжатые примеры в новый ASF-файл, а затем повторно считывать их в обычные несжатые примеры.

Чтобы получить сжатые примеры с помощью асинхронного средства чтения, выполните следующие действия.

  1. Реализуйте обратный вызов IWMReaderCallbackAdvanced::OnStreamSample . Этот обратный вызов по сути идентичен функции IWMReaderCallback::OnSample , за исключением того, что он доставляет выборки по номеру потока, а примеры по-прежнему сжимаются.
  2. Перед началом воспроизведения получите указатель на интерфейс IWMReaderAdvanced объекта чтения, вызвав IWMReader::QueryInterface.
  3. Настройте средство чтения для доставки сжатых примеров для нужного потока, вызвав метод IWMReaderAdvanced::SetReceiveStreamSamples.
  4. Повторите шаг 3 для каждого потока, для которого необходимо выполнить доставку сжатого образца.

Примечание

Потоки изображений недопустимы для доставки сжатого потока. При копировании потока изображений из одного файла в другой он не будет работать в новом файле. Чтобы скопировать поток изображения из файла в файл, извлеките примеры потока изображений по выходному номеру и включите их в новый файл, как если бы включал новый поток изображений.

 

Интерфейс IWMReaderCallbackAdvanced

Чтение файлов с помощью асинхронного средства чтения