четверг, 8 февраля 2018 г.

Надежная доставка с низкой задержкой по SRT и SLDP

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

Теперь давайте разберемся, как, используя продукты Haivision и Softvelum, создать сеть доставки с низкой задержкой и высокой надежностью. Этот подход основан на протоколах SRT и SLDP и направлен на решение всех ранее упомянутых задач.

Статья разбита на восемь разделов.
  1. Архитектура
  2. Технология
  3. Предварительные требования
  4. Настройка энкодера для сервера-источника (origin)
  5. Настройка соединения сервера-источника и сервера-посредника (edge)
  6. Настройка приема сервера-посредника
  7. Настройка воспроизведения с сервера-посредника.
  8. Вывод
Начнём.

1. Архитектура


Ниже даны основные этапы рабочего процесса, который стал темой данной статьи.
  1. Принять видео-поток на энкодер Haivision.
  2. Доставить поток, используя SRT, от энкодера на сервер-источник, работающий на базе Nimble Streamer от компании Softvelum. (Во время ожидания входящего потока от энкодера сервер-источник будет работать в режиме Listen).
  3. Повторная передача видео с помощью SRT на сервер-посредник Nimble Streamer. (сервер-посредник будет работать в режиме Pull, пока сервер-источник будет работать в режиме Listen).
  4. Вывод потока с использованием SLDP от сервера-посредника Nimble Streamer на устройства конечных пользователей.
Рабочий процесс (workflow): первоисточник → энкодер → сервер-источник (Origin) → сервер-посредник (Edge) → устройство конечного пользователя.

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

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

2. Технология


SRT означает "Secure Reliable Transport" (безопасный надежный транспорт). Это протокол на основе UDP, который оптимизирует производительность потоковой передачи в непредсказуемых сетях.

  • Применяется к конечным точкам передачи и распространения в качестве части рабочего процесса видеопотока и обеспечивает наилучшее качество видео и минимальную его задержку в любое время.
  • Выявляет и адаптирует в реальном времени к условиям сети между двумя конечными точками.
  • Помогает компенсировать колебания пропускной способности, возникающие из-за перегрузки по сетям с помехами.
  • Механизм восстановления ошибок минимизирует потери пакетов, типичные для интернет-соединений.
  • Шифрование AES 128/256 бит используется для сквозной безопасности, предохраняя ваши потоки от несанкционированного просмотра.

Протокол SRT был разработан компанией Haivision в 2014 году. В апреле 2017 года был создан SRT Alliance - группу, которая содействует внедрению технологии с открытым исходным кодом. Сегодня более чем 85 участников этого Альянса работают над улучшением совместимости потоковых видео-решений и способствуют сотрудничеству с лидерами отрасли для достижения более низкой задержки передачи интернет-видео.

Как участник Альянса SRT, Компания Softvelum активно работает над улучшением протокола и его экосистемы, внося свой вклад в сообщество. Softvelum стал одним из первых участников Альянса SRT, выпустивших готовое решение для SRT с собственной реализацией технологии в Nimble Streamer, флагманском продукте компании.

Nimble Streamer - это программный медиа-сервер с низким потреблением ресурсов и высокой производительностью. Доступный на платформах x64, ARM и POWER8 на всех основных операционных системах, он предоставляет широкий спектр возможностей для потокового вещания и видео-по-запросу наряду с набором функций paywall и серверной вставкой рекламы.

Nimble Streamer поддерживает все доступные режимы доставки SRT: Caller, Listener и Rendezvous, - для обеспечения связи источника и получателя. Поддерживаются все функции SRT: обнаружение ошибок, компенсация джиттера и шифрование потока. Это позволяет строить межконтинентальные крупномасштабные рабочие процессы доставки любого размера и сложности с узлами на базе Nimble Streamer.

Однако нам также нужно охватить доставку на “последней миле” от сервера-посредника до устройства конечного пользователя. Разумеется, в этом случае можно использовать отраслевые стандарты, такие как HLS или MPEG-DASH, однако для сценариев с низкой задержкой эти стандарты просто не будут работать. Тут мы и рассмотрим использование SLDP.

SLDP означает "Softvelum Low Delay Protocol". Он был разработан в первую очередь на замену пришедшей в упадок Flash-технологии, вследствие чего технология RTMP оказалась устаревшей для потоковой передачи в реальном времени на устройства конечного пользователя. Таким образом, цель заключалась в том, чтобы обеспечить доставку в режиме реального времени для современных браузеров с такими ключевыми возможностями:

  • Задержка менее секунды между выходом с сервера-источника и проигрыванием;
  • Независимость от кодеков: воспроизведение вне независимости от формата платформы конечного пользователя: H.264, VP8, VP9, or H.265/HEVC;
  • Поддержка ABR: переключение каналов занимает всего лишь время, равное GOP, и каждый канал может использовать свой собственный кодек;
  • HTTP и HTTPS поверх TCP: используйте его с любыми настройками сети.

Технология основана на Websockets и обеспечивает соблюдение всех вышеперечисленных требований.

Воспроизведение SLDP на устройствах конечных пользователей целиком покрывается набором плееров SLDP, о чем будет рассказано в разделе ”Доставка зрителям".

После рассказа о технологиях можно приступать к созданию сети.

3. Предварительные требования


Прежде чем двигаться дальше, убедитесь в следующем:

  • Энкодер Haivision Makito X установлен и работает.
  • Создан аккаунт в WMSPanel.
  • Nimble Streamer установлен на пробных серверах для демонстрационных целей. IP-адреса всех элементов:
    10.0.0.1 (оборудование энкодера),
    10.0.1.1 (сервер-источник - origin - Nimble Streamer),
    10.0.1.2 (сервер-посредник - edge - Nimble Streamer).
  • Имеется рабочий входящий поток для энкодера Makito X.
  • Доступны исходящие данные из Makito X.264/ААС с разрешением 720p.


4. Настройка энкодера для подключения сервера-источника


Исходящий поток энкодера


Давайте настроим исходящий поток от энкодера.
Как только мы получим готовый поток, нужно настроить энкодер для дальнейшей передачи его на сервер-источник Nimble Streamer. В SRT есть различные режимы передачи потока между отправителем и получателем:

  • Push (режим Caller) от отправителя и установка приемника в режим Listen;
  • Установка отправителя в режим Listen и отправка в ответ на запрос Pull от приемника;
  • Установка режима Rendezvous для обхода прокси.

Мы будем использовать первый вариант и установим наш энкодер для Push/Call к серверу 10.0.1.1.
Для настройки энкодера Makito X (устройство-источник SRT) обратитесь к онлайн-руководству пользователя Makito X:
1. Установка энкодера Makito X (стр. 44-57)
2. Добавить/создать поток (стр. 125-131)
3. Настройка SRT (стр. 133-135):

  1. Используя параметры, приведенные в таблице ниже, создайте и запустите исходящий поток на энкодере Makito X
  2. Как показано в примере ниже, установите режим (Mode) в "Caller".
  3. Установите Адрес 10.0.1.1 и порт назначения 1234. Исходящий порт Не требуется в режиме "Caller".
  4. Нажмите “Apply” в верхней части экрана.
  5. Нажмите “Start " рядом с кнопкой “Apply”.


После того как энкодер был настроен на вывод потока, вам нужно настроить Nimble Streamer, чтобы получить поток через режим Listen.

Принятие потока на сервер-источник Nimble Streamer


Войдите в WMSPanel и нажмите меню “Nimble Streamer” → “Live streams settings”, чтобы увидеть страницы настройки живого потока, затем нажмите на вкладку “MPEGTS In”. Появится пустой список настроек, который мы будем заполнять.


Нажмите на кнопку ”Add SRT stream", чтобы увидеть следующее диалоговое окно для создания нового входящего канала SRT.


В этом диалоговом окне "Receive mode" обозначает режим, используемый для получения потока. Переключите его на "Listen" - Nimble Streamer будет находиться в режиме ожидания и, сразу после получения входящих данных, начнет их обработку. Мы установили источник в режим "Push", как показано в предыдущем разделе.

Поля IP Address и Port определяют, какой интерфейс будет использоваться для подключения. Alias - имя, которое будет использоваться для дальнейших операций. Вы можете увидеть более подробную информацию о настройке SRT в этом блоге.

Как только вы сохраните настройку, она начнёт синхронизацию с сервером.

5. Настройка соединения сервера-источника с сервером-посредником


Теперь, когда у нас есть поток SRT от энкодера к нашему серверу-источнику, давайте доставим его на сервер-посредник, который может быть расположен в каком-то удаленном центре обработки данных. Мы рассмотрим доставку до одного сервера-посредника, но таких серверов может быть столько, сколько вам нужно. С Nimble Streamer все будет ограничиваться пропускной способностью сети, а не RAM или CPU сервера.

Настройка исходящего потока


У нас есть входящий канал SRT, по которому могут передаваться несколько потоков. Поэтому, чтобы настроить исходящие потоки, опишите каждый из них, чтобы Nimble мог обрабатывать их по отдельности.

Зайдите в меню "Nimble Streamer” → “Live streams settings”, чтобы открыть страницу установки параметров живого потока и откройте вкладку “MPEGTS Out”, чтобы просмотреть список исходящих потоков.


Нажмите на кнопку “Add outgoing stream”.


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


Теперь, когда у нас есть исходящий поток, давайте отправим его через SRT на сервер-посредник.

Отправка потока через SRT


Откройте вкладку “UDP streaming” на странице настройки живых потоков и нажмите на кнопку “Add SRT setting", чтобы увидеть диалоговое окно настройки SRT.


Теперь попробуем настроить режим Listen/Pull между сервером-источником и сервером посредником. В поле Mode выберите Listen. IP и Port будут установлены на "10.0.1.1" - это адрес текущего сервера-источника. Поля Source application и stream должны содержать имена потоков, которые вы хотите доставить. Вы ранее определили один поток в разделе Outgoing streams, поэтому сейчас можно использовать его здесь. Заметьте, что каждый поток будет иметь свой собственный PMT PID, Video PID and Audio PID. Более подробную информацию о настройке SRT можно найти здесь.

Теперь давайте настроим сервер-посредник, чтобы получить поток SRT.

6. Настройка приема на сервер-посредник


Определение потока воспроизведения


На странице настроек Live Streams, в левом верхнем углу выберите сервер-посредник, чтобы увидеть его параметры.

Как и в разделе 3 выше, добавьте новый входящий поток MPEGTS. Выберите вкладку “MPEGTS In” и нажмите на кнопку “Add SRT stream”.



Разница теперь в том, что вы установите поле “Mode” в значение Pull. Вы также используете исходный IP-адрес и порт для определения соединения.

Наладив прием потока SRT, определите его исходящие параметры, как вы уже сделали в разделе 5. SRT может осуществлять доставку нескольких потоков, поэтому вам нужно разделить их. Перейдите на вкладку "MPEGTS Out" и нажмите кнопку "Add outgoing stream".


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

После применения этого параметра перейдите на вкладку” Global". Определите, какие протоколы будут обслуживаться с этого сервера-посредника.



Выберите Softvelum Low Delay, HLS и MPEG-DASH, чтобы получить возможность воспроизведения по другим протоколам.

Вы также можете задать эти параметры отдельно для каждого приложения. Просто перейдите на вкладку Applications и добавьте новые приложения - у каждого будет свой набор параметров.

Транскодирование для ABR


Теперь на вашем сервер-посреднике есть поток 720p, готовый для дальнейшего воспроизведения. Прежде чем перейти к аспектам SLDP, обратите внимание, что этот сервер-посредник можно использовать для перекодирования исходного потока в более низкие разрешения для создания потока с адаптивным битрейтом (ABR). Это можно сделать с Live Transcoder, который является премиум-пакетом для Nimble Streamer и предназначен для декодирования и кодирования потоков AVC/H.264, HEVC/H.265, VP8 или VP9. В нем можно применять набор любых фильтров к живому контенту с помощью drag-n-drop веб-интерфейса для создания любых цепочек перекодирования.

А пока в нашем случае мы будем использовать исходный поток 720p.

7. Установка воспроизведения на сервере-посреднике


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

Для веб-воспроизведения можно использовать HTML5 JavaScript player. Он работает в любых браузерах с поддержкой MSE в Windows, Linux, MacOS и Android. Можно скачать бесплатный плеер и встроить его в свои веб-страницы. Если вы хотите сделать свою реализацию или расширить функциональность, можно подписаться на Player SDK.

Для Android можно использовать воспроизведение через браузер или бесплатное приложение SLDP Player, а также использовать SDK для создания своих собственных приложений. Воспроизведение iOS SLDP доступно только с помощью приложения с соответствующим SDK для разработки пользовательских приложений.

Теперь нужно создать ссылку для воспроизведения потока.

Зайдите в верхнее меню “Nimble Streamer” и нажмите на меню “Live streams”. Вы увидите список серверов со ссылками на их входящие, исходящие и ABR-потоки. Щелкните номер исходящих потоков, чтобы открыть страницу со списком исходящих потоков.


Нажмите на знак вопроса, чтобы увидеть диалоговое окно с образцами URL.


Выберите URL для дальнейшего использования. Это будет выглядеть как
ws://10.0.1.2:8081/app/stream
Cкопируйте его для веб-проигрывателя SLDP.

Если вы хотите использовать IP, который не указан для этого сервера, вы можете нажать на ссылку в этом диалоговом окне: “Add more external IPs ...", чтобы перейти к списку сведений о сервере и добавить другие IP для работы на этом сервере.

В списке URL вы также увидите URL на потоки HLS and MPEG-DASH. Они генерируются в соответствии с настройками сервера. Мы включили их для того, чтобы использовать для воспроизведения на тех устройствах, которые еще не могут работать с SLDP. Таким образом, вы можете скопировать эти ссылки и использовать их в любом плеере, который поддерживает эти протоколы, но не поддерживает SLDP.

Для каждого протокола в списке, вы также сможете выбрать плеер из списка доступных и увидеть пример кода. Это поможет встроить поток вам на страницу.

Хорошая комбинация


Комбинация SRT для передачи видео по ненадежным сетям и SLDP для доставки на “последней миле” обеспечивает высокое качество, надежность и задержку потокового видео менее секунды. Это дает вам возможность работать с аудиторией в любом месте, в любое время и на любом устройстве. Продукты Haivision гарантируют высокое качество видео, а решения Softvelum обеспечивают эффективную доставку, поэтому мы рекомендуем это комбинацию всем, кто намерен охватить максимальное число зрителей и обеспечить им высокое качество просмотра всё время.

Больше материалов по теме


Рекомендуем ознакомиться с материалами ниже, чтобы расширить представление об использовании SRT в построении систем доставки видео:
Также посмотрите эти видео с примерами настройки: