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


Смена протокола

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

Смена протокола — это процесс, в результате которого объект чтения обнаруживает лучший протокол потоковой передачи, доступный на сервере. Средство чтения использует смену протокола при каждом открытии URL-адреса, содержащего схему mms.

Средство чтения поддерживает несколько протоколов:

  • Протокол потоковой передачи в реальном времени (RTSP)
  • Протокол HTTP
  • Microsoft Media Server (MMS)

Протоколы RTSP и MMS поставляются в двух вариантах: один использует UDP в качестве базового протокола доставки, а другой — TCP.

Объект чтения всегда использует TCP для команд управления воспроизведением, но он может использовать TCP или UDP для доставки потокового содержимого. UDP является предпочтительным для доставки содержимого, так как он накладывает меньшие затраты на пропускную способность, чем TCP. Протокол TCP обеспечивает надежную транспортировку за счет использования "виртуальных каналов", но стоимость этого означает, что TCP не так хорошо подходит для цифровых потоков мультимедиа, где эффективное использование пропускной способности важнее, чем случайные потерянные пакеты.

Если URL-адрес указывает "mms://", средство чтения пытается использовать следующие протоколы для доставки данных в следующем порядке:

  1. RTSPU (RTSP с использованием UDP)
  2. RTSPT (RTSP с использованием TCP)
  3. MMSU (MMS с использованием UDP)
  4. MMST (MMS с использованием TCP)
  5. HTTP

HTTP — это односторонний протокол, основанный на ПРОТОКОЛе TCP и используемый веб-серверами. Потоковая передача с использованием HTTP менее эффективна, чем rtsp. Однако большинство брандмауэров настроены для приема HTTP-запросов, тогда как они обычно отклоняют другие протоколы потоковой передачи.

Службы Windows Media 9 серии в Microsoft Windows Server 2003 отклоняют любые запросы MMSU или MMST от средства чтения пакета SDK для формата Windows Media, так как RTSP является предпочтительным протоколом потоковой передачи. Службы Windows Media версии 4.1 и более ранних версий не поддерживают RTSP. В этом случае объект средства чтения возвращается к MMSU или HTTP.

Смена протокола не применяется, если схема URL-адресов предоставляет определенный протокол, например "rtspu://" для RTSPU или "https://" для HTTP. Если схема URL-адреса имеет значение "rtsp://", средство чтения пытается использовать RTSPU и RTSPT, но не пытается использовать другие.

После того как средство чтения откроет файл, можно запросить используемый протокол, вызвав метод IWMReaderAdvanced2::GetProtocolName в средстве чтения. Во время потоковой передачи или скачивания содержимого этот метод возвращает имя, как только содержимое полностью кэшируется, а метод GetProtocolName возвращает строку Cache.

Чтобы получить имена всех протоколов сервера Windows Media, поддерживаемых средством чтения, вызовите метод IWMReaderNetworkConfig::GetSupportedProtocolName в средстве чтения. Вы можете отключить один или несколько протоколов в списке переключения протоколов средства чтения с помощью интерфейса IWMReaderNetworkConfig . Например, метод IWMReaderNetworkConfig::SetEnableTCP включает или отключает протоколы на основе TCP, а IWMReaderNetworkConfig::SetEnableUDP включает или отключает протоколы на основе UDP. Эти методы применяются только к смене протокола; протоколы по-прежнему доступны, если схема URL-адресов содержит определенный протокол. Обычно нет причин отключать какой-либо из протоколов, используемых при смене протокола; это может снизить производительность. Однако это может быть полезно для тестирования.