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


Функции источника сети

Сетевой источник предоставляет базовую реализацию потоковых файлов мультимедиа и предоставляет интерфейс IMFMediaSource. Конкретная реализация источника сети зависит от протокола, используемого для открытия источника, например RTSP или HTTP. Источники сети, относящиеся к протоколу, расширяют основные возможности сети. Сведения о поддерживаемых схемах и протоколах см. в поддерживаемых протоколах.

Источник сети:

  • Реализует такие функции, как кэширование, обнаружение прокси-сервера и автоматическое повторное подключение.
  • Преобразует независимые от протокола вызовы от исходного сопоставителя в вызовы, относящиеся к протоколу.
  • Взаимодействует с слоем сокета и операционной системой. Анализирует описание SDP и использует его в качестве данных конфигурации и считывает потоковые данные из базового слоя сокетов. При получении сетевой источник отвечает за переупорядочение и запрос повторной передачи пакетов.

Создание источника сети

Создание источника мультимедиа для источника из сети отличается от источника мультимедиа для локального файла. Приложение передает URL-адрес источника в методы source Resolver, например IMFSourceResolver::CreateObjectFromURL или IMFSourceResolver::BeginCreateObjectFromURL и задает флаг MF_RESOLUTION_MEDIASOURCE. Дополнительные сведения об использовании этого флага см. в использованиесредства разрешения источника.

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

Дополнительные сведения см. в разделе Обработчики схем и обработчики Byte-Stream.

Media Foundation не поддерживает потоки байтов для сетевых источников. Объект потока байтов поддерживается только в сценарии скачаемого содержимого. Все данные передаются как можно быстрее, чтобы его можно было сохранить в виде файла на локальном компьютере. веб-серверы предоставляют скачанные данные. После начала скачивания не существует связи с клиентом с сервером. В этом случае используется протокол загрузки HTTP.

Если приложение запрашивает сопоставитель источника для создания объекта потока байтов для схем http:, mms:или RTSP:, вызов завершается ошибкой MF_E_UNSUPPORTED_SCHEME.

Заметка

В Windows 7 источник сети поддерживает файлы Windows Media Station (. NSC). Эти файлы используются в многоадресной потоковой передаче содержимого мультимедиа по сети. Создание сетевого источника для указанного. NSC-файл, приложение должно использовать исходный сопоставитель.

 

Если приложение использует обработчик схемы, асинхронный вызов игнорирует параметр dwFlags и возвращает указатель на источник сети при завершении.

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

блок-диаграмме с путями от приложения к серверу потоковой передачи с циклом между сетевым источником и сеансом мультимедиа

Конфигурация источника сети

В этом разделе описываются функции, поддерживаемые сетевым источником и связанными параметрами конфигурации. Приложение может настроить сетевой источник при создании объекта источника сети. Эти параметры хранятся в объекте IPropertyStore, который приложение должно передать в параметре pProps методов исходного сопоставителя или МВФSchemeHandler::BeginCreateObject.

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

Функция автоматического повторного подключения сетевого источника позволяет клиенту автоматически подключаться к серверу мультимедиа при сбое TCP-подключения к серверу или клиент не получает пакеты. При сбое подключения источник сети пытается повторно подключиться к серверу мультимедиа, используя ту же конфигурацию, которая использовалась в предыдущем подключении. Процесс повторного подключения асинхронен. Источник сети вызывает событие MEReconnectStart при начале повторного подключения и событие MEReconnectEnd при успешном или неудачном подключении.

Если число попыток повторного подключения превышает максимальное значение, указанное свойством MFNETSOURCE_AUTORECONNECTLIMIT, операция повторного подключения отменяется. Количество попыток повторного подключения хранится в свойстве MFNETSOURCE_AUTORECONNECTPROGRESS.

Автоматическое повторное подключение обеспечивает плавное воспроизведение содержимого мультимедиа даже при сбое TCP-подключения к серверу мультимедиа. Для плавного воспроизведения клиент должен иметь достаточно данных, по крайней мере 1–2 минуты, чтобы продолжить воспроизведение до повторного подключения. Максимальный объем данных, которые может буферировать источник сети, можно задать в свойстве MFNETSOURCE_MAXBUFFERTIMEMS.

Быстрая потоковая передача

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

Чтобы указать объем данных быстрой потоковой передачи, которые клиент может запрашивать, задайте свойство MFNETSOURCE_ACCELERATEDSTREAMINGDURATION. Если сетевой источник использует UDP в качестве транспортного протокола, укажите максимальный объем данных быстрой потоковой передачи, задав вместо этого свойство MFNETSOURCE_MAXUDPACCELERATEDSTREAMINGDURATION.

Быстрая потоковая передача на клиенте также возможна с помощью функции fast Cache — потоковая передача содержимого по запросу быстрее, чем в режиме реального времени и кэширование данных в локальном кэше клиента. Чтобы использовать этот тип быстрой потоковой передачи, в сетевом источнике необходимо включить быстрый кэш, а сервер должен поддерживать его. Когда клиент запрашивает содержимое с сервера, источник сети сначала проверяет, находится ли содержимое в кэше клиента. Если содержимое находится в локальном кэше клиента и не истекло, оно отрисовывается. Если содержимое не находится в локальном кэше или уже истекло, содержимое передается в поток и кэшируется, а сетевой источник воспроизводит его из локального кэша. В последующих запросах для списков воспроизведения кэшируются только отсутствующие записи, а затем воспроизводится. Если запись списка воспроизведения уже находится в локальном кэше клиента, он воспроизводится из него и не кэшируется снова.

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

  • Клиент должен иметь дополнительную пропускную способность для скачивания и кэширования содержимого быстрее, чем обычная скорость.
  • Клиент должен иметь достаточно места на диске. Если клиент имеет менее 100 МБ свободного места на диске после кэширования запрошенного содержимого по запросу, он не кэшируется, но выполняется потоковая передача и отрисовка одновременно.

Функция быстрого кэширования управляется свойством MFNETSOURCE_CACHEENABLED.

Управление буферами

Сетевой источник обеспечивает эффективное управление буферами, которое отслеживает состояние буфера на клиенте. По умолчанию сетевой источник буферизирует 5 секунд данных при запуске. Это значение можно настроить, задав свойство MFNETSOURCE_BUFFERINGTIME. Исходя из этого значения свойства, сетевой источник вычисляет размер буфера, достаточный для обеспечения плавного и непрерывного воспроизведения содержимого мультимедиа. Если для этого свойства задано значение 0, управление буферами отключено. Если объем содержимого в буфере низкий, сетевой источник начинает буферизацию и вызывает событие MEBufferingStarted, чтобы указать, что буферизация началась. После получения этого события конвейер останавливает отрисовку. После завершения буферизации сетевой источник вызывает событие MEBufferingStopped, и клиент может снова начать отрисовку.

Клиент начинает отрисовку содержимого после того, как он накапливает объем данных, указанных размером буфера первого примера. Если это значение меньше вычисляемого размера буфера, воспроизведение начинается немедленно. Это поведение очень похоже на функцию быстрого запуска.

Свойство MFNETSOURCE_MAXBUFFERTIMEMS сохраняет максимальный объем данных, которые могут быть буферированы.

Выбор пропускной способности

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

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

Результат динамического измерения пары пакетов является более точным, чем оценка пропускной способности канала, возвращаемой статическим измерением пары пакетов, так как процесс статической пары пакетов отправляет один пакет фиксированного размера, который может не дать точные результаты для сетей высокой пропускной способности.

Приложение может получить предполагаемую пропускную способность с помощью свойства MFNETSOURCE_PPBANDWIDTH.

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

Сети в Media Foundation