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


Взаимное исключение

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

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

Бывают ситуации, когда не требуется, чтобы каждый поток доставлялся клиенту. Например, если вы создаете видеофайл с пятью аудиопотоками, по одному для каждого из пяти языков, необходимо, чтобы одновременно предоставлялся только один из них. Взаимное исключение — это функция пакета SDK для формата Windows Media, которая позволяет указать ряд взаимоисключающих потоков, которые приравниваются к одному и тому же выходу.

Взаимное исключение определяется в профиле, используемом для создания файла. Взаимное исключение настраивается в профиле с помощью объектов взаимного исключения. Потоки добавляются по одному к объекту взаимного исключения, задают тип и включают объект в профиль.

Пакет SDK для формата Windows Media распознает четыре типа взаимного исключения:

  • Скорость
  • Язык
  • Уровень представления
  • Неизвестно

Взаимное исключение по скорости

Взаимное исключение скорости битов — это особый тип взаимного исключения, который чаще всего называется взаимным исключением с множественной скоростью (MBR). Взаимное исключение MBR содержит несколько потоков, которые происходят из одного и того же входного значения, но кодируются с разной скоростью. При воспроизведении файла с помощью MBR средство чтения определяет оптимальный поток для использования на основе доступной пропускной способности.

Пакет SDK для формата Windows Media поддерживает MBR для аудио- и видеопотоков. Пакет SDK также поддерживает особый тип видео MBR, называемый несколькими размерами MBR. Это похоже на обычное видео MBR, за исключением того, что отдельные потоки могут иметь разные размеры кадров. Например, некоторые потоки могут иметь размер видео по умолчанию 320 x 240, а некоторые — с более высокой скоростью передачи и размером видео 640 x 480.

Взаимное исключение по языку

Языковое взаимное исключение предназначено для использования с содержимым (обычно аудио), записанным на нескольких языках. Языковое взаимное исключение включает несколько потоков, которые исходят из уникальных входных данных. Все входные данные — это одно и то же содержимое, но на разных языках.

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

Взаимное исключение по представлению

Взаимное исключение на основе презентации предоставляется для поддержки видеопотоков, содержащих одно и то же содержимое, закодированное с разными пропорциями. Как правило, это используется при предоставлении видео в версии почтового ящика (пропорции 16:9), а также для телевизионных экранов (пропорции 4:3).

Выбор презентации для воспроизведения чаще всего определяется пользователем. Если вы пишете приложение для воспроизведения ASF-файлов и хотите поддерживать файлы с взаимным исключением на основе презентации, необходимо предоставить пользователю возможность выбора типа презентации для просмотра.

Неизвестное взаимное исключение

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

Расширенные функции взаимного исключения

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

Средство чтения автоматически выбирает потоки для всех взаимных исключений. Для всех типов взаимного исключения, кроме MBR и языкового взаимного исключения, средство чтения всегда выбирает поток по умолчанию, который является первым потоком, добавленным в объект взаимного исключения в профиле. Для MBR средство чтения выбирает поток, который лучше всего соответствует доступной пропускной способности на момент воспроизведения. Если вы не хотите использовать поток по умолчанию, можно задать для выбора потока значение вручную, прежде чем приступить к чтению файла.

Выбор потока вручную применяется ко всему файлу. Трудности могут возникнуть при наличии взаимных исключений разных типов в одном файле. Например, файл может содержать как взаимное исключение на основе скорости, так и пользовательское взаимное исключение. Чтобы выбрать поток, отличный от стандартного, в пользовательском взаимном исключении необходимо выбрать поток вручную. Однако при выборе потока вручную средство чтения не будет автоматически выбирать поток с несколькими скоростами. Если вы планируете поддерживать несколько типов взаимного исключения в одном файле, необходимо запланировать эту возможность в приложении. Обычно это означает создание собственных процедур выбора потоков для обычно автоматических типов взаимного исключения.

Функции файлов ASF

Использование взаимного исключения