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

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

Сетевой источник:

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

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

Создание источника мультимедиа для источника из сети ничем не отличается от источника мультимедиа для локального файла. Приложение передает URL-адрес источника в методы Сопоставителя источника , такие как 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 методов сопоставителя источника или IMFSchemeHandler::BeginCreateObject.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сеть в Media Foundation