7 февр. 2008 г.

Трансляция спутникового канала в локальную сеть

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

В связи с реорганизацией парка серверов пришлось переносить DVB-S карты и весь софт на другую машину.

Железо перекинуть не проблема (только не забывайте выключать оборудование перед отключением антенного фидера), а вот вспомнить что и как настроить в софте, оказалось проблематично.

Решил теперь все такие настройки организовывать в мануалы и оставлять на блоге - и себе и другим :)

Приступим.

Многое взято из статьи http://omsk.lug.ru/SatTVLinux

Однако в моей ситуации все сразу не получилось.

1. Ищем информацию по нашему спутнику.
Мне помог http://www.lyngsat.com
Спутник HotBird.


2. Составляем список каналов и записываем в /etc/channels.conf
У меня пока только:
Vesti:11034:v:0:27500:1020:1030:1710

3. Проверяем наличие сигнала:
#szap -c /etc/channels.conf -x -n 1 -a 2
-a определяет номер адаптера, у меня в машине их 3, выбираю третий.

4. Транслируем каналы мультикастом:
Много экспериментировал с трансляцией всего транспондера, но так и не получилось.
#/usr/local/bin/dvbstream -c 2 -i 224.1.2.10 -r 1234 -f 11034 -p V -s 27500 -ps -v 1020 -a 1030

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

Решение пришло неожиданно.
Оказалось что у машины нет DNS-записи типа А! - вот из-за чего падал dvbstream!!!

[Дополнение]
Необходимость в DNS-записи типа А была вызвана только тем, что в /etc/hosts небыло записи с настоящим именем машины. После добавления/изменения записи в данном файле необходимость в DNS вообще отпадает.

Так что, господа, незабываем сделать запись или лезем в исходники и фиксим...

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

В нашей сети используются интелектуальные коммутаторы hp 2824 и hp 2510-24.
Эти коммутаторы имеют возможности контроллирования распространения multicast-трафика - IGMP .

Описание этого процесса достойно отдельной статьи, либо прочтения руководства по настройке коммутатора ;)

22 комментария:

Олег Мороз комментирует...

Я делал всю ретрансляцию видео и аудио в сеть при помощи vlc. Весьма неплохо получилось.

Unknown комментирует...

Олег, так ты бы рассказал как это сделал, ато так не интересно.. ;)

Олег Мороз комментирует...

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

Анонимный комментирует...

Бред, а не статья!
С помощью vlc вещаю 40 каналов тв и
30 каналов радио. Вот строка запуска радио каналов:
vlc -d -vvv --color --ttl 12 --ts-es-id-pid --programs=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,53,54,59,60,61,63 dvb: \
--dvb-frequency=11515000 --dvb-srate=7300000 --dvb-voltage=13 \
--sout-standard-access=http --sout-standard-mux=raw --sout \
'#duplicate{dst=std{dst=10.0.1.4:9000/City_fm},select="program=1" \
,dst=std{dst=10.0.1.4:9002},select="program=2" \
,dst=std{dst=10.0.1.4:9003},select="program=3" \
,dst=std{dst=10.0.1.4:9000/Kino_Fm},select="program=4" \
,dst=std{dst=10.0.1.4:9000/Shanson},select="program=5" \
,dst=std{dst=10.0.1.4:9000/10708},select="program=6" \
,dst=std{dst=10.0.1.4:9000/BusinessFM},select="program=7" \
,dst=std{dst=10.0.1.4:9000/Energia},select="program=8" \
,dst=std{dst=10.0.1.4:9000/Mayak},select="program=9" \
,dst=std{dst=10.0.1.4:9000/Radio_Alla},select="program=10" \
,dst=std{dst=10.0.1.4:9011},select="program=11" \
,dst=std{dst=10.0.1.4:9000/AvtoRadio},select="program=12" \
,dst=std{dst=10.0.1.4:9000/DOROGNOE},select="program=13" \
,dst=std{dst=10.0.1.4:9000/Radio_Vanya},select="program=14" \
,dst=std{dst=10.0.1.4:9000/Record},select="program=15" \
,dst=std{dst=10.0.1.4:9000/Piter_RS},select="program=16" \
,dst=std{dst=10.0.1.4:9000/Shanson},select="program=17" \
,dst=std{dst=10.0.1.4:9018},select="program=18" \
,dst=std{dst=10.0.1.4:9019},select="program=19" \
,dst=std{dst=10.0.1.4:9000/Relax_FM},select="program=20" \
,dst=std{dst=10.0.1.4:9000/Mayak-24},select="program=53" \
,dst=std{dst=10.0.1.4:9054},select="program=54" \
,dst=std{dst=10.0.1.4:9059},select="program=59" \
,dst=std{dst=10.0.1.4:9060},select="program=60" \
,dst=std{dst=10.0.1.4:9061},select="program=61" \
,dst=std{dst=10.0.1.4:9063},select="program=63" \
}'

:)

Unknown комментирует...

Милый, Аноним, скажи пожалуйста, чем отличается мультикастинг от юникастинга?

А то что ты изобразил рбочий пример использования vlc, Большое Тебе спасибо!

Анонимный комментирует...

Олег, как настроить vlc для передачи видео по сети под Windows. ProgDVB у меня передает только по юникасту и все, дальше ступор. заранее благодарен

Олег Мороз комментирует...

НИкогда не настраивал под виндой но там вроде все проще. Файл->открыть повидимому выбираешь источник видео и аудио. Потом внизу есть "расширенные параметры" вещать/сохранить. И там есть кнопочка настройки. Выбираешь что как надо куда направлять, как сжимать и т.д. Насчет ProgDVB там по моему есть проблема с невозможностью указания произвольного мультикаст адреса. Хотя может я и ошибаюсь.

Анонимный комментирует...

На самом деле всё проще особенно с виндой кому интересно стукните в аську чем смогу помагу так как писать особо лень .Могу выложить для простоты действий мануалы в видио формате на тотже лититбит либо депозит .Вещаю без проблем весь транспондер без проблем .Особенно мультикастом.
Что касается уникаста то вещать получиться только вот нагрузка на машину будет неимоверно возрастать при подключении пользователей.Так как мультикаст пинает поток в сеть всем и подключение к машине вещающего не производиться что делат нагрузку ток на сеть и маршрутизацию а уникаст если по русски обьяснить пинает поток определённому пользователю (в нашем случае тому кто подключился )

ася--483765357 Wetal

Unknown комментирует...

В случае unicast нагрузка не только на машину, но еще и на сеть - вмето одного потока всем, будет идти один и тот же поток, но например 10ти пользователям - мультикаст то не зря придумали!

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

Unknown комментирует...

Очень хотелось бы понять, откуда в списке программ они вообще берутся. Перерыл всё на свете, нет комментариев. Вот это: ,dst=std{dst=10.0.1.4:9002},select="program=2" \
,dst=std{dst=10.0.1.4:9003},select="program=3" \ ,
откуда взялось? Каждый канал на своём PID'е. Откуда VLC их вытаскивает? Или, как вы ему их скармливаете?

Олег Мороз комментирует...

да это пид канала. и находятся они с помощью утилиты scan из комплекта linux-dvb-apps

Unknown комментирует...

Это понятно, как он находится. Как его подпихнуть vlc в строке?

Олег Мороз комментирует...

select="program=2"
как то вот так. Подставив его в качестве параметра program

Unknown комментирует...

Ну, вы даёте...
Я уже сам разобрался, а то тут по разным зонам Интернета стоит вой: большинство не понимает, как настраиваться на конкретный канал. И у разработчиков об этом ни гу-гу.
Вот эти вот цифири после "programs":

--programs=1,2,3,4 ,-

есть ничто иное, как SID канала (см. lyngsat.com).

Unknown комментирует...

Не могу удержаться, чтобы не расставить все точки над i.
Угрохал кучу времени на vlc, чтобы в конце-концов понять, что продукт до невозможности сырой в серверной части. Начинаешь отлаживать, и сыпятся ошибки на уровне qt4... Для чего, спрашивается, серверу все эти графические навороты? (Они, видишь ли, vls более не поддерживают...)

А вот связка dvbstream в качестве сервера и vlc в качестве клиента даёт прекрасный результат.

И нет никаких проблем с броадкастингом, именно это получается лучше всего. Нужно всего-навсего после скорости потока поставить число 8192. И vlc будет вытаскивать все каналы из принятого потока. Разумеется, карта должна быть бюджетной.

И я не понял, при чём тут "...у машины нет DNS-записи типа А"? Используется физическая адресация, какой-такой DNS?

У меня всё на Ubuntu 8.10.

Unknown комментирует...

Я писал:

"
Решение пришло неожиданно.
Оказалось что у машины нет DNS-записи типа А! - вот из-за чего падал dvbstream!!!

[Дополнение]
Необходимость в DNS-записи типа А была вызвана только тем, что в /etc/hosts небыло записи с настоящим именем машины. После добавления/изменения записи в данном файле необходимость в DNS вообще отпадает."


Именно так и было. Я ставил на Слаке 12.
Если интересно попробуй проверь у себя на убунте ;)

Мне лично dvbstream нравится за юникс-way подход - нет не нужных рюшечек :)

Unknown комментирует...

Вопрос немного не в тему.
Запуск dvbstream как осуществляете? Непосредственно по загрузке? Или из web-интерфейса?

Unknown комментирует...

Я запускал из скрипта при старте системы. Нашим требованиям это удовлетворяло.

Скрипт конечно можно и из веб-страниц запускать :)

Unknown комментирует...

Вот из веб-то как раз имеются трудности... :-(
Что-то блокирует запуск dvbstream из-под браузера.
И вообще dvbstream настолько странно написана, что даже вывод нельзя переадресовать в файл.

Unknown комментирует...

Yourij B, вывод в файл точно переадресовывается - я сам когда начинал dvbstream настраивать сначала поток в файл выводил.

А если вас интересует вывод ошибки в файл, так это другой пайп, почитайте доку по шелу.

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

Unknown комментирует...

Все так говорят, "не хватает прав...". Но проблема сложнее. Можно разрешить dvbstream запускать кому угодно, можно www-data назначить права root - всё равно не запускается.
У меня предположение, что dvbstream запускает в свою очередь какое-то приложение. И вот тут-то прав и не хватает...

Unknown комментирует...

... остается открыть исходники и посмотреть.