Pull to refresh

VLC как служба Windows

Reading time3 min
Views25K
После долгого блуждания в гугло-мире я все же нашел решение своей проблемы. Проблема состояла в следующем — компания (вернее непосредственно начальство) узнала о существовании IP-камер, и в срочном порядке приняла решение купить и установить их в офис. Выбор пал на D-link DCS 2102-2121 так как больше ничего не нашли (дорогущие axis — одна стоила как 3 таких). Все бы не плохо, но было одно условие вывести картинку с них в великую сеть.

И так какие проблемы встают перед нами. Поднять веб-сервер (благо ip «белого цвета»), выбрать сервер для вещания потокового видео и перекодировки его в более менее пригодный формат, собственно обслуживание и наблюдение за системой. Все довольно просто в рамках давно изложенных материалов. По умолчанию сервак у нас крутится на Windows Server 2003 sp2 (а потому, что во фря так и не получилось vlc запустить как надо).

Сначала выбираем сервер для вещания видео. Был выбран VLC media player как наиболее популярное средство организации подобных вещей. Следуя довольно неплохому оконному интерфейсу мы видим, что настроить vlc на трансляцию в http довольно просто.




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



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

vlc.exe rtsp://192.168.0.40:554/play2.sdp :sout=#transcode{vcodec=h264,vb=800,fps=15,scale=0,acodec=mp4a,ab=128,channels=2,samplerate=44100}:http{dst=:8081/1.flv} :no-sout-rtp-sap :no-sout-standard-sap :ttl=1 :sout-keep

То мы получим то же самое только уже настроенное.
Теперь ставим apache+php в него flowplayer настраиваем его на http канал и вуаля, вот оно наше потоковое вещание. Подробнее про это можно почитать и в других статьях. Поищите =), найдете.
Но вот не задача, сервак ребутнулся и все наши окна vlc полетели в пух и прах. Блин! Тут приходит одна умная мысль – автозагрузка, но мб можно еще круче? Почему бы не заставить работать все еще круче, а вернее установим службу с vlc. Как это сделать? Ужас, я весь нет облазил (русскоязычный конечно), пока по кусочкам не понял, что тут нет ничего сложного, вообще vlc настолько многогранен, что остается только сидеть и удивлятся чего только тут нельзя! Так вот vlc с заданными нами параметрами потокового вещания можно запустить так:

start /D "C:\Program Files\VideoLAN\VLC\" vlc.exe -I ntservice --ntservice-install --ntservice-name=VLC --ntservice-extraintf=dummy --ntservice-options="rtsp://192.168.0.40:554/play2.sdp --rtsp-caching=1200 –loop
--sout=#transcode{vcodec=h264,vb=256,fps=10,scale=0,acodec=mp4a,ab=64,channels=1,samplerate=22050}:http{dst=:8081/1.flv} --no-sout-rtp-sap --no-sout-standard-sap --ttl=1 --sout-keep"


Тут я поясню некоторые параметры. –I означает запуск vlc с интерфейсом не по умолчанию, они бывают разными такие как http и другие если надо вам дорога к документации vlc. Как видите строка --ntservice-install означает установить службу vlc, --ntservice-name=VLC а это ее имя, можно написать конечно иное например нужно чтобы создавать разные службы работающие одновременно, ничего не напишите по умолчанию назовется VLC media player. Чтобы службу удалить пишем

start /D "C:\Program Files\VideoLAN\VLC\" vlc.exe -I ntservice --ntservice-uninstall --ntservice-name=VLC

Теперь параметр ntservice-extraintf=dummy означает в каком интерфейсе будет работать служба. Dummy означает, что его нет, если указать http то создастся http интерфейс, но о нем опять таки читайте в документации. --ntservice-options="" а вот здесь в кавычках как вы уже поняли мы указываем с какими параметрами запускаться нашей службе.




Отлично теперь все работает как часы, но и тут на горизонте вырисовывается проблема, камеры хоть и в Loop режиме, но периодически все равно отпадают и надо идти и ребутить нашу новосозданую службу. Почему бы великому PHP не назначить обработку этого досадного события? Создаем страничку со следующим содержимым:

<?php exec("net stop vlc");exec("net start vlc");?>

Ну вот теpперь если камера «умерла» ее и мой директор может сам ребутнуть, значит утром спим дольше и крепче.
Tags:
Hubs:
+37
Comments47

Articles