- Медиа серверы (Wowza, Erlyvideo, FMS) и компоненты систем видео трансляций
- Бесплатные уроки: «Медиа-сервер Wowza Streaming Engine. Быстрое погружение»
- Вступление
- В качестве источников видео и аудио сигналов могут применяться следующие устройства:
- В качестве видеокодеров как правило используются программы:
- На сегодняшний день существую несколько популярных Медиа серверов:
- Существую следующие варианты трансляций (способов отправки):
- Основные плееры
- Устройства, на которых пользователи могут просматривать видео трансляции, как правило, имеют одну из следующих операционных систем:
- Устройств на базе операционной системы Windows и Linux
- Устройств на базе операционной системы Android
- Для устройств на базе операционных систем IOS
- Сравнительные таблицы
- Заключение
- Facecast сделали бесплатный RTMP сервер для сообщества
- Онлайн вещание через Nginx-RTMP: несколько готовых рецептов
- Коротко об RTMP
- Публикация видеозаписи
- Онлайн-трансляция
- Веб-камера
- Аналоговая камера
- Захват экрана
- Ретрансляция
- Тюнинг, решение проблем
- Плеер на сайте
- Что дальше?
Медиа серверы (Wowza, Erlyvideo, FMS) и компоненты систем видео трансляций
В сегодняшней статье поговорим о том, как реализовать видео трансляцию и выбрать оптимально элементы такой системы. Посмотрим какие способы трансляции подходят больше всего в той или иной ситуации.
Бесплатные уроки: «Медиа-сервер Wowza Streaming Engine. Быстрое погружение»
Вступление
Речь пойдет о популярных компонентах систем с помощью которых создаются видео трансляции. Для того чтобы создать качественную систему видео трансляций в первую очередь нужно понять и ответить на следующие ключевые вопросы:
- Какой Медиа сервер использовать? Wowza сервер или какой-то другой?
- Какой способ трансляций использовать?
- Какой плеер использовать на стороне клиентов?
- На каких устройствах пользователи будут смотреть трансляции?
Далее в статье, мы будем последовательно отвечать на поставленные выше вопросы. Начнем с источников сигналов.
В качестве источников видео и аудио сигналов могут применяться следующие устройства:
- IP камеры.
- USB камеры.
- Платы видеозахвата
- ТВ тюнеры и др.
В качестве видеокодеров как правило используются программы:
- WireCast.
- Adobe Flash Media Live Encoder.
- XSplit.
- Сам источник видео и аудио сигналов. Например, многие IP камеры могут сами отправлять поток на Wowza медиа сервер.
На сегодняшний день существую несколько популярных Медиа серверов:
- Wowza медиа сервер.
- Adobe Flash Media Server (FMS).
- Erlyvideo.
- Red5.
Каждый из серверов включает в себя определенный набор способов отправки потоков пользователям.
Существую следующие варианты трансляций (способов отправки):
- Протокол RTMP (Real-Time Messaging Protocol).
- HDS (Flash HTTP Dynamic Streaming).
- HLS (Apple HTTP Live Streaming).
- RTP/RTSP (Real-Time Transport Protocol/Real-Time Streaming Protocol).
Основные плееры
Например, при использовании плеера JW player. Wowza позволяет отдавать одновременно потоки по протоколам RTMP и HLS. Клиенты которые могут работать c Flash будут использовать протокол RTMP (просмотр в JW player) а клиенты которые будут работать с HLS будут проигрывать видео в другом плеере, встроенном в браузер.
Устройства, на которых пользователи могут просматривать видео трансляции, как правило, имеют одну из следующих операционных систем:
Устройств на базе операционной системы Windows и Linux
Также хотелось бы отметить, что для устройств с операционной системой Windows и Linux поддержка тех или иных протоколов зависит от установленного программного обеспечения.
Устройств на базе операционной системы Android
Современные устройства на базе операционной системы Android с версией старше 2.2 поддерживаю работу с Flash плеером и могут воспроизводить потоки RTMP и Flash HTTP. Компания Adobe Systems Incorporated сообщила о своем намерении свернуть выпуск новых версий Flash Player для мобильных устройств. Создание новых версий будет прекращено, но выпуск патчей и обновлений продолжится.
Есть и другой способ трансляций для которого не требуется Flash. ОС Android поддерживает работу по протоколу RTP (Real-Time Transport Protocol). RTP используется совместно с протоколами:
- UDP (User Datagram Protocol) и
- RTSP(Real-Time Streaming Protocol).
RTSP — протокол прикладного уровня, его основная функция — это управление и синхронизация медиа-потоков. Android устройства не поддерживают работу RTSP/RTP по протоколу гарантированной доставки TCP, поэтому необходимо использовать протокол негарантированной доставки UDP. Также начиная с версии Android 3.0 поддерживается работа по протоколу HLS, однако на данный момент могут возникать проблемы в работе по этому протоколу.
Для устройств на базе операционных систем IOS
IPhone, iPad и iPod устройства не поддерживают работу с Flash player и RTSP/RTP. Они могут работать только по протоколу Apple HTTP Live Streaming.
Сравнительные таблицы
Ниже представлены наглядные таблицы совместимости разных компонентов систем видео трансляций. Информация, представленная в таблицах была проверена нами на собственном опыте.
Таблица 1. Медиа сервер / Способ трансляции
Медиа сервер/Способ трансляции | RTMP | HDS | HLS | RTP/RTSP |
---|---|---|---|---|
Wowza | + | + | + | + |
Flash Media Server | + | + | + | — |
Erlyvideo | + | + | + | + |
Таблица 2. Плеер / Способ трансляции
Плеер/Способ трансляции | RTMP | HDS | HLS | RTP/RTSP |
---|---|---|---|---|
JW Player | + | Не поддерживается | +\- Для ios поддерживается в виде HTML5. Для Flash в платной версии | — |
Flowplayer | + | + | +/- Только для IOS. | — |
Strobe Media Playback | + | + | +/- Только для IOS. | — |
Таблица 3. Операционная система / Способ трансляции
ОС/Способ трансляции | RTMP | HDS | HLS | RTP/RTSP |
---|---|---|---|---|
Windows | + | + | + | + |
Android | + | + | + | + |
Linux | + | + | + | + |
IOS | + |
Если вам нужно что-то настроить или получить консультацию по медиа-серверам и системам, можете обращаться ко мне и нашей команде.
Заключение
Эта статья была написана и опубликована совместно c моим коллегой Евгением Петровым. Как установить и настроить Wowza медиа сервер смотрите в видео (скринкасте), ниже. Скринкаст был создан Евгением Петровым.
Facecast сделали бесплатный RTMP сервер для сообщества
Партнёры сообщества стримеров AVStream, компания Facecast, сделали бесплатный публичный RTMP сервер для участников сообщества! Теперь можно стримить в студию из полей, делать телемосты, и т.д.
Партнёры сообщества стримеров AVStream, компания Facecast, сделали бесплатный публичный RTMP сервер для участников сообщества! Теперь можно стримить в студию из полей, делать телемосты, и т.д.
Сервер выступает в качестве простой «трубы», что прислали — то же можно прочитать по тому-же URL. Никакой обработки и изменений в трафик не привносится.
Отправляете с кодера поток RTMP на сервер, а vMix с другой стороны принимаете по тому же адресу.
Ограничение на один поток — 5 «зрителей».
Стримить на rtmp://rtmp.facecast.io/live ключ SHARED_KEY , читать с rtmp://rtmp.facecast.io/live/SHARED_KEY где SHARED_KEY — ваш уникальный ключ.
Придумайте собственный уникальный, длинный ключ (8-16 символов), до которого гарантированно никто не додумается и не застримит с таким же ключом, иначе возможны ошибки. Можно использовать столько ключей, сколько необходимо и менять хоть каждый день.
Например: stream, alex, live и т.п. — плохие ключи, matvey_sopronenkov-28-01 — хороший ключ.
Ключ должен состоять только из латинских букв, цифр, символ подчеркивания и тире, никаких спецсимволов и слэшей.
Трафик без ограничений, но не злоупотребляйте, используйте по делу.
Facecast — платформа и оборудование для стриминга, CDN, специализированные решения для доставки видео через интернет и в корпоративных сетях.
Ребята с удовольствием делают проекты в партнёрке, так что и ваши клиенты и вы останетесь довольны.
Онлайн вещание через Nginx-RTMP: несколько готовых рецептов
Недавно я наткнулся на топик «Сервер онлайн-вещаний на базе nginx» о замечательном модуле Романа Арутюняна (@rarutyunyan) для nginx: nginx-rtmp-module. Модуль очень прост в настройке и позволяет на основе nginx создать сервер публикации видеозаписей и живого вещания.
Про сам модуль можно прочитать на его странице на GitHub, я же хочу привести несколько простых примеров использования. Надеюсь, топик поможет новичкам в видеоделах (таким как я).
Коротко об RTMP
RTMP (Real Time Messaging Protocol) — проприетарный протокол вещания от Adobe. В качестве транспорта по умолчанию используется TCP (порт 1935). Также можно инкапсулировать RTMP в HTTP (RTMPT). Клиент RTMP — это в первую очередь Adobe Flash Player.
Кодек видео — H.264, кодек аудио AAC, nellymoser или MP3, контейнеры MP4 или FLV.
Публикация видеозаписи
Иначе говоря, видео по запросу (VOD). Просто добавьте в nginx.conf в секцию rtmp < server <… >>.
(Прим.: конечно, секцию не обязательно называть vod)
Теперь можно положить в папку /var/videos видеофайл в правильном формате и «скормить» плееру источник, например rtmp://server/vod/file.flv. Насколько я понял, MP4 нативно поддерживает перемотку видео, а FLV придется индексировать отдельно.
Все приведенные далее примеры будут уже про «живую» трансляцию с помощью ffmpeg под Windows. Впрочем, эта информация будет полезна и для пользователей Linux.
Онлайн-трансляция
Мы можем отправить поток видео и аудио на сервер используя все тот же протокол RTMP для публикации. А наши клиенты смогут трансляцию смотреть. Для этого на сервере надо добавить секцию:
Рекомендую сразу закрыть доступ на публикацию всем, кроме доверенных IP, как показано в примере.
На машине, с которой мы будем вещать, для начала надо получить список устройств DirectShow. Пуск — Выполнить — cmd, переходим в папку ffmpeg/bin и запускаем:
Если в названии вашего источника есть русские буквы, то они могут отобразиться кракозябрами. ТруЪ админы заюзают iconv, а простые парни вроде меня раскодируют бяку на сайте Лебедева. FFmpeg’у нужно скормить читабельную надпись.
Теперь, зная имя видео и аудио источника, можно захватить его при помощи ffmpeg и отправить на сервер.
Веб-камера
Как минимум нужно указать источник видео, кодек и сервер:
Вместо «Webcam C170» нужно подставить название вашей камеры из списка.
Ключ -an говорит о том, что мы не передаем аудио поток. Если аудио поток нужен, то строка запуска будет выглядеть примерно так:
Здесь мы использует кодек libfaac, частота дискретизации 44100, 2 канала (стерео). Можно вместо AAC использовать MP3 (кодек libmp3lame).
Аналоговая камера
Если у вашей камеры аналоговый выход, то ее можно подключить к компьютеру с помощью устройства захвата. Я использую дешевую PAL камеру и USB плату захвата с Dealextreme.
Захват экрана
Тут есть два варианта: установить FFSplit или использовать screen-capture-recorder с FFmpeg.
FFSplit использовать проще, т.к. у него есть удобный GUI, но он не работает под XP/2003.
Если вы решили выбрать второй способ, то строка запуска FFmpeg будет выглядеть примерно так:
Аудио-поток можно захватить с virtual-audio-capturer.
Пример захвата экрана в приложении
Ретрансляция
Естественно, вы можете ретранслировать видео или аудио файл (или поток) FFmpeg на сервер. В примере ниже мы передаем MJPEG видео с удаленной камеры:
Но для таких целей более разумно использовать опцию push на самом RTMP-сервере, чтобы исключить промежуточное звено и вытягивать поток на самом сервере.
Какая-то веб-камера в Японии
Тюнинг, решение проблем
-preset имя У H.264 есть несколько наборов настроек соотношения компрессия/скорость: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow. Поэтому если вы хотите повысить производительность, стоит использовать:
-crf число непосредственно влияет на битрейт и качество. Принимает значения от 0 до 51 — чем больше, тем ниже качество картинки. По умолчанию 23, 18 — losless качество. Битрейт примерно удваивается при уменьшении CRF на 6.
-r число задает входной и выходной FPS. Для источников, с которых вы захватываете картинку, можно установить вместо -r -re, чтобы использовать «родной» FPS.
-rtbufsize число размер буфера реального времени. Если у вас постоянно появляются сообщения о переполнении буфера и отбрасывании кадров, вы можете поставить большой буфер (например, 100000k), однако это может увеличить задержку передачи.
-pix_fmt задает цветовую модель. Если у вас вместо картинки показывается черный квадрат, а звук работает, попробуйте поставить yuv420p или yuv422p.
-s ширинаxвысота входной и выходной размер картинки.
-g число насколько я понял, это максимальное число кадров между ключевыми. Если у вас FPS очень маленький, то можно поставить это значение поменьше, чтобы уменьшить задержку начала трансляции.
-keyint_min число минимальное число кадров между ключевыми.
-vf «crop=w:h:x:y» обрезать видео
-tune zerolatency «волшебная» опция уменьшения задержки трансляции. Что она конкретно делает я так и не нашел (-:
-analyzeduration 0 отключает анализ длительности, что помогает снизить задержку трансляции
Помимо рассмотренных выше параметров аудио вам может понадобиться -acodec copy в том случае, если ваш аудио поток не требует дополнительной перекодировки в MP3/AAC.
Пример: вещаем с веб-камеры с низкой задержкой без звука, рисуем в верхней части картинки текущее время
Плеер на сайте
Тут все просто. Поставьте на свой сайт один из популярных плееров, например Flowplayer или JW Player.
Пример подключения JW Player вы можете посмотреть на странице демо трансляции.
Что дальше?
С помощью модуля rtmp можно создать не только видеотрансляцию, но и видеочат, интернет-радио, простую платформу для вебинаров. Дерзайте!
Я рассмотрел лишь базовую функциональность nginx-rtmp-module и ffmpeg. Возможности у них гораздо шире, поэтому обратите внимание на документацию:
Блог nginx-rtmp-module
Wiki nginx-rtmp-module
Документация FFmpeg
Streaming Guide
x264 Encoding Guide
Filtering Guide