Связка wowza media server + vlc + freebsd

Unix > Связка wowza media server + vlc + freebsd
08.02.2013 16:36:42



Статья:

Связка wowza media server + vlc+ freebsd

Потокове видео на своём хостинге. Вообщем возникает периодически необходимость организовать трансляцию RTMP потока из последовательно воспроизводимых файлов mp4(заранее подготовленных) c помощью VLC(в режиме реального времени , те то что проигрывает VLC в данный  момент времени) и  серверного плейлиста.

Wowza Media Server Pro общается с плеером клиента Flash Player по средством RTMP(Real-Time Messaging Protocol) протокола. Это позволяет иметь большой спектр мультимедийных и интерактивных FLASH приложений. Многие из RTSP/RTP encoders(декодеров) поддерживают большой перечень видео и аудио кодеков. При использовании этого метода в live streaming(прямой передаче видео с устройств видеозахвата), Wowza Pro поддерживает только H.264/AVC1(не MPEG4) для видео контента
Связь Wowza Media Server Pro с VLC возможна через RTP , Нативный RTP стриминг использует внутренние потоковые механизмы, называемые MediaCasters. Существует несколько свойств для MediaCaster, которые могут использоваться для контроля RTP потоков сервером Wowza Pro.

Установка JAVA

cd /usr/ports/java/diablo-jdk16
make install (и понадобится скачать предложенный пакет, согласившись с лицензией и выложить на /usr/ports/distfiles) и заново make install
Проверить установку командой java -version (выдаст инфо о java машине)
Установка wowza:

Скачать с официального сайта  версию wowza
1. Права на папку куда скачали инсталятор chmod +x WowzaMediaServerPro-xxxx.bin
2. Запуск ./WowzaMediaServerPro-xxxx.bin
Ставится в /usr/local/WomzaMediaServer

3. Поставим примеры cd /usr/local/WowzaMediaServer/examples
./installall.sh
4. cd /usr/local/WowzaMediaServer/bin
./startup.sh при первом запуске потребуется ввод лиц ключа , его бесплатно на 10 коннектов одновременно можно получить на сайте(если надо отвязать от консоли то можно так ./startup.sh & - но это только после первого успешного запуска , да и вообще после отладки)
Установка VLC( cd /usr/ports/multimedia/vlc && make install clean , появится  меню выбора опций  компиляции, если вы решили прервать компиляцию всвязи с неправильном выбором пунктов , то всегда можете запустить make config , чтобы  переопределить опции компиляции и заново запустить компиляцию  make install, ровным счётом если вы  захотите  после  компиляции VLC добавить новые драйвера или новые возможности, тоько выполнить предварительно  make deinstall) , собственно собираем с поддержкой только консоли(всякие поддержки Xwindows, всёже консольный  сервер) , кодеки H.264 выставить обязательно !!!
Запуск VLC на вещание RTP потока , сделаем так чтобы файл манифест sdp vlc положила непосредственно в директорию
/usr/local/WomzaMediaServer/content
Команда:

cvlc --daemon /home/x/playgorod2.xspf --loop --sout '#rtp{dst=192.168.229.128,port-video=10004,port-audio=10006,sdp=file:///usr/local/WowzaMediaServer/content/gorod.sdp}'

Тут внимание !!! dst- обязательно указывать реальный IP интерфейса где работает wowza,port-video и port-audio обязательно указать(особо это будет важно если несколько каналов планируется вещаться)....

Где playgorod2.xspf это у нас плейлист, задающий последовательность файлов mp4 , и эта команда применима если конечно все файлы лежат уже заранее закодированными в H.264/MPEG-4 AVC codec в контейнер MP4. В таком случае VLC не будет заниматься транскодирование и нагрузка на процессор будет минимальной (0.2-0.4%) , соотвественно VLC будет работать стабильно , у меня и 2 недели непрерывного проигрывания не падал...

Плейлист playgorod2.xspf (UTF-8 кодировка) типа так выглядит:

<?xml version="1.0" encoding="UTF-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/">
<title>Play</title>
<trackList>
<track>
<location>/home/iocsha/gorod1.mp4</location>
<extension application="http://www.videolan.org/vlc/playlist/0">
<vlc:id>0</vlc:id>
</extension>
</track>
<track>
<location>/home/iocsha/gorod2.mp4</location>
<extension application="http://www.videolan.org/vlc/playlist/0">
<vlc:id>1</vlc:id>
</extension>
</track>
</trackList>
<extension application="http://www.videolan.org/vlc/playlist/0">
<vlc:item tid="0" />
<vlc:item tid="1" />
</extension>
</playlist>

Если надо поток отдать с камеры через транскодирования то команда VLC будет таким образом:

vlc -vvv rtsp://camera.hostname:port/stream-name --sout "#transcode{venc=x264{keyint=60,profile=baseline,level=3.0,nocabac,

qpmax=36,qpmin=10,me=hex,merange=24,subme=9,qcomp=0.6},vcodec=x264,vb=128,scale=1,

width=640,height=480,acodec=mp4a,channels=1,fps=15,samplerate=4750} :rtp{dst=local.amazon.ip.ofwowzainstance,port-video=10000,port-audio=10002

,sdp=file:///wowza-installation-dir/content/vlc.sdp}" -R -d


Ещё пример траскодирования:
#!/bin/sh cvlc --logo-file /home/iocsha/logo.png --logo-position=6 /home/iocsha/playgorod2.xspf --loop --sout '#transcode{vcodec=h264,venc=x264{me=dia,merange=16,subme=1,analyse=none,direct=spatial,pbratio=1.5,bframes=1,vbv-maxrate=400,vbv-bufsize=400,ratetol=400.0},vb=400,deinterlace=yes,nohurry-up,acodec=mp4a,ab=64,channels=1,sfilter=logo}:rtp{dst=192.168.229.128,port-video=10004,port-audio=10006,sdp=file:///usr/local/WowzaMediaServer/content/gorod.sdp}'


На стороне клиента в плеере получить поток просто например в JW плеере:

Мы будим воспроизводить поток  через приложение rtplive


<object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="600" height="450">
<param name="movie" value="player.swf" />
<param name="allowfullscreen" value="true" />
<param name="allowscriptaccess" value="always" />
<param name="flashvars" value="streamer=rtmp://192.168.229.128/rtplive&file=gorod.sdp&provider=rtmp&autostart=true" />
<embed
type="application/x-shockwave-flash"
id="player2"
name="player2"
src="player.swf"
width="600"
height="450"
allowscriptaccess="always"
allowfullscreen="true"
flashvars="streamer=rtmp://192.168.229.128/rtplive&file=gorod.sdp&provider=rtmp&autostart=true"
/>
</object>

 

Полезные возможности  wowza:

http://public-dns-name-of.instance:8086/streammanager/   Управление  потоками

http://public-dns-name-of.instance:8086/connectioncounts   Просмотр оперативной  информации о потоках

Только сначала  надо настроить имя пользователя и пароля  в файле /usr/local/WowzaMediaServer/conf/admin.password   и рестартануть wowza

 PS. справка

Существует два способа для вещания RTP основанного на H.264/HE-AAC live(взятым с устройств видеозахвата) контенте на Wowza Media Server Pro. Более общий метод - использовать encoder(декодер), который поддерживает комманду оповещения QuickTime.

Используя этот метод, encoder(декодер) создает RTSP сессию с Wowza Pro и отправляет данные по Session Description Protocol(протоколу описания сессии), использующему команду оповещения.

RTSP сессия использована для управления запуском и завершением RTP сессии.

Второй метод - нативное решение, базирующееся на протоколе RTP. SDP данные передаются Wowza Pro через файловую систему или HTTP-запросы. Следующие два раздела описывают два этих метода.

Real-Time Streaming Protocol(RTSP) Streaming (Протокол передачи потоковых данных в реальном времени)

Wowza Media Server Pro изначально поддерживает Real-Time Streaming Protocol(RTSP) для входящих потоков H.264/HE-AAC контента. Такая возможность доступна на любом порту, который определен при конфигурации сервера в файле VHost.xml.

Доступ RTSP потокам предоставляется через аутентификацию. Wowza Pro поддерживает три метода RTSP аутентификации; none(без аутентификации), basic(пароль и имя пользователя отправляются в виде текста), и digest(цифровая) аутентификация (пароль шифруется с использованием алгоритма MD5 и никогда не отправляется в виде текста по сети).

Конфигурация аутентификации заключена в конфигах VHost.xml, Application.xml и Authentication.xml.

Стандартным методом аутентификации является digest(цифровой), который является более сильным и более защищенным методом. Имена пользователей и пароли определены в файле rtp.password в директории сервера conf.

Перед тем, как RTSP сессия будет создана, соответствующие имя пользователя и пароль должны быть добавлены в файл rtp.password.

RTSP сессия базируется на четырех аттрибутах: адрес сервера(и порт), путь к потоку(местоположение потока), имя пользователя и пароль.

Об имения пользователя и пароле говорилось выше.

Имя сервера - это адрес сервера Wowza Pro с портом. По умолчанию, RTSP протокол использует порт 554, который не является портом, слушаемым сервером Wowza.

Wowza Pro, по умолчанию слушает порт 1935. По этой причине, настройка "адрес сервера" должена быть установлена в [server-ip-address]:1935, где [server-ip-address] это ip адрес сервера, на котором запущена Wowza Pro.

Путь к потоку - это уникальное имя, присвоенное live stream(потоку с устройства видеозахвата). В сервере Wowza Pro этот путь используется для определения application name (названия приложения), application instance name (имя интсанса сервера) и stream name(имени потока), который требуется для Flash потоков.

Формат должен быть таким: [application]/[appinstance]/[streamname]

Где [application] имя приложения

[appinstance] имя инстанса

[stream name] имя потока

Имя потока может содержать дополнительные элементы в пути.

Например, путь к потоку: streamtest/myStream.sdp должен быть интерпретирован как:


[application] streamtest
[appinstance] _definst_
[streamname] myStream.sdp



Путь к потоку:

streamtest/_definst_/livevideos/myStream.sdp

Должен быть интерпретирован как


[application] streamtest
[appinstance] _definst_
[streamname] livevideos/myStream.sdp



Видео и аудео информация передается серверу Wowza Pro одним из двух путей:

4 отдельных UDP порта или смешанно через RTSP TCP соединение.

Когда для передачи данных используется UDP, encoder(декодер) и Wowza Pro будут общаться на множестве портов, использующих для передачи данных RTP. Диапазон UDP порта 6970-9999. Важно, чтобы эти порты были открыты для UDP трафика на firewall(файрволе).