Unix > Связка wowza media server + vlc + freebsd
08.02.2013 16:36:42
Наиболее часто встречающиеся слова в статье:
[style="font-size] [font-family] [mso-fareast-language] [mso-ansi-language] [lang="EN-US"] [/strong] [style="text-align] [class="MsoNormal"] [style="background] [сервера]
Статья:
Связка 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(файрволе).