Настройка DVBlast
DVBlast - это программулина для работы с неким
мультикастовым "Транспортным потоком" приходящим, например, со спутника, с
транспондера, где в этом самом "Транспортном потоке" сидит куча
телевизионных каналов. Нам нужно эту кучу, с помощью этой программы,
разобрать на отдельные ТВ-каналы и каждому такому ТВ-каналу дать свой
личный IP-адрес и порт. Нужно это все для того, чтобы потом передавать эти
самые ТВ-каналы через мультикаст трафик дальше, клиентам, через некую
компьютерную сеть. Возникает вопрос. А почему бы не передавать сразу весь
"Транспортный поток"? Ведь у него тоже есть свой личный IP-адрес и порт,
которые можно ввести в какой-либо плейер. Ответ очевиден. Чтобы экономить
полосу пропускания нашей локальной сети (трафик). То есть, если у нас
программа работает и все получилось с настройкой DVBlast, то по нашей
локалке поползет мультикаст трафик только того канала, который в данный
момент смотрит клиент, а не все каналы скопом. Собственно в этом и
заключается весь смысл программы DVBlast. Она ничего не декодирует, не
кодирует, она просто тупо разделяет "Транспортный поток" на его отдельные
составляющие и присваивает этим составляющим, как я написал выше, свой
личный индивидуальный IP-адрес и порт.
Собственно, данный мануал я накатал для себя лично. На тот случай, если
что-то забуду. Ну, и на случай, может это еще кому-то пригодиться. А то у
меня вышло так, что когда я впервые столкнулся с этим "дэвэбластом", то
нужной инфы не смог для себя найти НИГДЕ! Вообще нигде! Вот потому и решил
записать это дело. И для себя любимого и для кого-то еще.
Все примеры в интернете - "строки для запуска" dvblast, основаны на том,
что в компе стоит уже некая железка, с которой мы будем брать
"Транспортный поток" с телеканалами. И потому мы в этой самой "строке
запуска" должны писать разные там частоты транспондеров и прочую лобуду.
Мне это не было нужно. Мне наш Главный инженер кинул в компьютер линк
(витую пару) со своей головной станции и сказал, что программой dvblast
нужно из этого линка вытащить "Транспорный поток", разобрать его на
отдельные составляющие и через вторую сетевую карту компьютера передать
эти отельные составляющие дальше в сеть, клиентам.
Итак, что было проделано для того, чтобы вся эта муть заработала:
01. Берем любой комп. Можно не очень мощный, старенького двух-ядерника
вполне должно хватить. Но в нашем случае это был барский полноценный проц
i3, оперативки 4 гига. И две гигабитные сетевые карты. Одна родная на
материнке, другая внешняя, установленная в уже устаревший системный слот
PCI.
02. На комп ставим Alt Linux Simply DeskTop v6.0.1 (64bit), буквально по
этой ссылке скачанный:
ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/p6/iso/simply/altlinux-6.0.1-simply-x86_64-ru-install-dvd5.iso
03. Сразу обновляем нашу новенькую ОС. Она типа, сама это предложит, как
только почует интернет на одной из наших сетевых карт.
04. В линуксе, из родного репозитория ALT-Linux, ставим пакет dvblast.
Если в репозитории не нашлось dvblast-а, который там просто ОБЯЗАН быть,
то это значит, что вы не подключены к инету, или у вас закомментированы
ссылки на репозитории ALT-Linux. Как это поправить написано ниже, в
"Примечании". Когда поставим пакет с dvblast, не нужно искать его в виде
иконки на рабочем столе или в Меню. Там его не будет. Это консольная
утилита. Проверить, поставилась они или нет, можно в Терминале, просто дав
команду dvblast. Программа запустится и немного покажет, как с ней
управляться.
05. В линуксе, из родного репозитория ALT-Linux, ставим пакет vlc. Это "VLC
media player", которым мы, собственно, будем контролировать то, что у нас
получилось. "VLC media player" - это полноценный графический плейер.
Обязан появится в Меню. Ищите его там.
06. После установки "VLC media player" его нужно ОБЯЗАТЕЛЬНО проверить на
работоспособность. Тупо запускаем его и открываем им любой видеофайл. Если
файл не проигрывается, (как случилось у меня любимого), то лезем в личное
меню "VLC media player" - "Инструменты", "Настройки", "Показывать
настройки" - Все, "Видео", "Модули вывода", Выбираем "Вывод через X11 (XCB).
Это в моем случае. В вашем случае будет что-то другое или вообще не
потребуется ничего делать.
07. Бежим к Главному инженеру и берем у него данные по его "Транспортному
потоку". А именно, IP-адрес и порт. Если он вам их не скажет, то посылаем
его в лес, просим выпить йаду и убиться ап стену, если таковая найдется в
лесу. В любом случае, без этих данных, ничего у нас не получится. Он их
вам должен сказать. По сути, IP-адрес и порт "Транспортному потока" - это
и есть наш "источник", который мы потом, в дальнейшем, будем разбирать на
составляющие.
08. Залезаем в файл /etc/net/sysctl.conf и правим строку:
net.ipv4.conf.default.rp_filter=0
То есть на конце ставим ноль. Сохраняемся. Перегружаемся.
Аналог этой строки можно сделать временной (работающей до перезагрузки)
командой:
sysctl -w net.ipv4.conf.eth0.rp_filter=0
или
sysctl -w net.ipv4.conf.eth1.rp_filter=0
или
sysctl -w net.ipv4.conf.default.rp_filter=0
По мануалам с интернета эта фишка поясняется так:
а) Это фильтр обратного пути (когда пакет приходит с одного интерфейса, а
уходит на другой). По умолчанию он включен, то есть никуда ничего не
поползет.
б) Если это маршрутизатор, то нужно разрешать форвардинг пакетов.
в) Включаем защиту от IP спуфинга (подмена адресов), и проверку маршрута
от источника.
г) Включаем маршрутизацию.
09. С правами админа залезаем в каталог /etc/rc.d и создаем там новый файл
"rc.local" командой:
echo > rc.local
или
vi rc.local
или
> rc.local
или
в просто коммандере "mc", запущенном с правами админа, жмем Shift+F4
Делаем этот файл "исполняемым" командой:
chmod +x rc.local
Пишем в файл эту строку:
sudo ip route add 224.224.200.0/24 dev eth0
Типа добавляем маршрут для нашего "Транспортного потока". Или если по
чайниковски, то говорим, с какой сетевой карты и из какой подсети наш
dvblast должен слушать "Транспортный поток". В этом же файле, следующей
строкой, добавляем команду:
sudo ip route add 224.244.244.0/24 dev eth1
Тем самым мы говорим на какую сетевую карту и в какую подсеть мы начнем
передавать наш будущий мальтикаст, полученный с помощью программы dvblast.
Если короче, то принимаем поток одной сетевой картой и из одной подсети
(224.224.200.0), а передаем в другую сетевую карту и в другую подсеть
(224.244.244.0). Или наоборот. Типа, принимаем "Транспортный поток"
сетевушкой Eth0, а передаем в Eth1.
(Команда: sudo ip route del 224.244.244.0/24 dev eth1 это для удаления
маршрута)
10. Перегружаемся. (Чет не верю я в программные перезагрузки сетевых
интерфейсов. Много раз это просто тупо не срабатывало.)
ВНИМАНИЕ!!! После ввода второй команды:
sudo ip route add 224.244.244.0/24 dev eth1
сетевой интерфейс "eth1", куда мы будем передавать уже сформированные
разделенные телеканалы, НУЖНО ОБЯЗАТЕЛЬНО куда-то воткнуть. Можно даже
просто в любой коммутатор. То есть, порт сетевой карты eth1 не должен
остаться висеть на воздухе. Его нужно ОБЯЗАТЕЛЬНО поднять физически в
состояние UP, иначе ни фига у нас работать не будет даже на самом компе,
где будет работать dvblast.
11. Втыкаем линк (витую пару), который нам дал Главный инженер, в сетевую
карту Eth0. То есть в ту, которой наш dvblast будет слушать "Транспортный
поток".
12. Запускаем "VLC media player", тыкаемся в Медиа/Открыть URLи пишем
буквально следующую строку:
udp://@224.224.200.4:1234
Это адрес и порт "Транспортного потока". Вам их скажет ваш Главный
инженер. Естественно, адрес и порт в вашем случае будут другие.
13. Линуксовый "VLC media player" должен будет начать показывать какой-то
произвольный телевизионный канал.
14. Тыкаем в меню "Воспроизведение/Программа" и в распахнувшемся списке мы
должны будем увидеть все программы находящиеся в нашем "Транспортом
потоке". И сможем все их просматривать. Если все они работают, то с
"Транспортным потоком" никаких проблем нет и можно смело двигаться дальше.
15. Закрываем "VLC media player".
16. Запускаем в терминале dvblast такой командной строкой:
dvblast -i1 -D 224.224.200.4:1234/udp
17. В Терминале мы должны будем увидеть что-то похожее на:
debug: * number=1 pid=200
debug: * number=2 pid=620
debug: * number=3 pid=610
debug: * number=4 pid=800
debug: * number=5 pid=500
debug: * number=6 pid=310
debug: * number=7 pid=410
debug: * number=8 pid=912
debug: * number=9 pid=908
debug: * number=10 pid=909
debug: * number=11 pid=261
debug: * number=12 pid=1029
debug: * number=13 pid=517
debug: * number=14 pid=773
Предпоследние цифры в этой таблице - это "number". Уникальные номера
каналов в пределах текущего "Транспортного потока". Они могут быть какими
угодно. Даже четырехзначными. Главное, что они, повторюсь, уникальны в
пределах одного "Транспортного потока". Именно они нам и нужны.
Останавливаем dvblast нажав клавиши Ctrl+C. Терминал не закрываем. Мы
будем смотреть в его окне, то что он нам выдал в следующем шаге.
18. Ломимся в каталог /home/slaviksg и создаем там текстовый файл
dvblast.cfg командой:
echo > dvblast.cfg
или
vi dvblast.cfg
или
> dvblast.cfg
или
в просто в коммандере "mc" жмем Shift+F4 и записываем в этот файл строки
такого вида:
#Programma-01
224.244.244.101:12345/udp 1 1
#Programma-02
224.244.244.102:12345/udp 1 2
#Programma-03
224.244.244.103:12345/udp 1 3
#Programma-04
224.244.244.104:12345/udp 1 4
#Programma-05
224.244.244.105:12345/udp 1 5
#Programma-06
224.244.244.106:12345/udp 1 6
#Programma-07
224.244.244.107:12345/udp 1 7
#Programma-08
224.244.244.108:12345/udp 1 8
#Programma-09
224.244.244.109:12345/udp 1 9
#Programma-10
224.244.244.110:12345/udp 1 10
#Programma-11
224.244.244.111:12345/udp 1 11
#Programma-12
224.244.244.112:12345/udp 1 12
#Programma-13
224.244.244.113:12345/udp 1 13
#Programma-14
224.244.244.114:12345/udp 1 14
Собственно, это и есть ключевой момент управления программой dvblast.
Теперь она разложит наш "Транспортный поток" на четырнадцать разных
потоков, каждый из которых будет содержать в себе только один ТВ-канал и
иметь свой уникальный, назначенный нами лично, IP-адрес и порт. Цифры на
конце строк - это и есть номера/идентификаторы каналов, которые мы
подсмотрим в нашем, незакрытом, Терминале. Повторюсь, цифры этим могут
быть совершенно различные. Даже четырехзначные. Повторяющаяся цифра один -
это, типа, разрешаем транслировать данный канал или нет. "/udp" - это
значит, что передавать будет в UDP, а не в RTP. Хочу обратить внимание,
что входной/выходной мультикаст-потоки НУЖНО засунуть в разные подсети. То
есть, если Главный инженер дал вам источник "Транспортного потока" из
подсети 224.224.200.0, то передавать, разделенный на телеканалы
"Транспортный поток", следует уже в другую подсеть. Например, как мы
написали выше, в подсеть - 224.244.244.0. На этих двух разных подсетях и
основан данный мануал. Ваши подсети. конечно, будет совершенно другие.
Только не забываем, что IP-адреса должны "Мультикастовыми", то есть они
должны юзаться из диапазона адресов с 224.0.0.0 до 239.255.255.255. ИНАЧЕ
НИЧЕГО У ВАС РАБОТАТЬ НЕ БУДЕТ!!!
18. Запускаем в терминале dvblast такой командной строкой:
dvblast -i1 -D 224.224.200.4:1234/udp -c dvblast.cfg
19. В терминале появится куча инфы. Где проскочат строчки со словом "new".
Ровно 14 таких слов. Типа, это значит, что dvblast заработал... Если кучи
инфы в Терминале вы не увидите, то это значит, что что-то не так. Ищите,
где закралась ошибка.
20. Запускаем "VLC media player". Тыкаем в Медиа/Открыть URLи пишем
буквально следующие строки:
udp://@224.244.244.101:12345
udp://@224.244.244.102:12345
...
или
...
udp://@224.244.244.113:12345
udp://@224.244.244.114:12345
В общем, перебираем по порядку все IP-адреса. Все 14 телепрограмм должны в
плейере работать.
21. Последний штрих... Делаем автозапуск dvblast при старе Линукса. Снова
залезаем в наш созданный ранее самодельный файл /etc/rc.d/rc.local и
прописываем туда строку запуска dvblast таким образом:
dvblast -i1 -D 224.224.200.4:1234/udp -c /home/slaviksg/dvblast.cfg
Обратите внимание, что путь к конфигурационному файлу dvblast.cfg НУЖНО
указывать полный. Это здесь нужно сделать ОБЯЗАТЕЛЬНО!!!
!!!ВАЖНО!!!
Если используется AltLinux Server, то наши dvblast - ы нужно запускать в
фоновом режиме. Запуск программы нужно делать с ключом "&". Иначе:
1. Мы не сможем запустить больше одной проги одновременно.
2. Если прога запустится из автостарта (при загрузке компа) с помощью
файла rc.local, то мы не сможем остановить dvblast. Никак!
3. Остановить процесс работы программы возможно будет сделать только
подключившись к компьютеру удаленно через SSH.
Короче, наш итоговый файл rc.local должен выглядеть следующим образом:
sudo ip route add 224.224.200.0/24 dev eth0
sudo ip route add 224.244.244.0/24 dev eth1
dvblast -i1 -D 224.224.200.4:1234/udp -c /home/slaviksg/dvblast4.cfg &
dvblast -i1 -D 224.224.200.5:1234/udp -c /home/slaviksg/dvblast5.cfg &
dvblast -i1 -D 224.224.200.6:1234/udp -c /home/slaviksg/dvblast6.cfg &
dvblast -i1 -D 224.224.200.7:1234/udp -c /home/slaviksg/dvblast7.cfg &
dvblast -i1 -D 224.224.200.8:1234/udp -c /home/slaviksg/dvblast8.cfg &
-------------------------------------------
Примечание тем, кто ставит dvblast на серверный Alt Linux:
Возможно, по умолчанию, ссылки на репозитории будут в файле конфигурации
закомментированы. Поэтому apt-get работать не будет. Лезем в файл:
/etc/apt/sources.list.d/alt.list
и убираем комментарии, как минимум с двух строк, заканчивающихся на:
x86_64 classic
и
noarch classic
Вводим в терминнале команду apt-get.
Перегружаемся.
Тем самым мы скажем нашему Линуксу, где находятся его родные репозитории.
Напоминаю, что для графического Алт-линукса в окне "Synaptic" жмем кнопку
"Получить сведения", иначе нужные пакеты не появятся.
И еще. В серверном Линуксе, в файле rc.local не нужно писать sudo. Строка
должна выглядеть так:
ip route add 224.224.200.0/24 dev eth0
-------------------------------------------
Итак, подытожим!
Команда для ручного запуска dvblast будет такой:
dvblast -i1 -D 224.224.200.4:1234/udp -c dvblast.cfg
Команды, которые должны быть прописаны в файлы rc.local должны выглядеть
так. (Где полный путь к файлу dvblast4.cfg ОБЯЗАТЕЛЕН)
sudo ip route add 224.224.200.0/24 dev eth0
sudo ip route add 224.244.244.0/24 dev eth1
dvblast -i1 -D 224.224.200.4:1234/udp -c /home/slaviksg/dvblast4.cfg &
dvblast -i1 -D 224.224.200.5:1234/udp -c /home/slaviksg/dvblast5.cfg &
dvblast -i1 -D 224.224.200.6:1234/udp -c /home/slaviksg/dvblast6.cfg &
dvblast -i1 -D 224.224.200.7:1234/udp -c /home/slaviksg/dvblast7.cfg &
dvblast -i1 -D 224.224.200.8:1234/udp -c /home/slaviksg/dvblast8.cfg
Конфиги файлов программы dvblast должны быть, примерно, такими:
225.224.224.101:12345/udp 1 1
225.224.224.102:12345/udp 1 2
225.224.224.103:12345/udp 1 3
225.224.224.104:12345/udp 1 4
225.224.224.105:12345/udp 1 5
225.224.224.106:12345/udp 1 6
225.224.224.107:12345/udp 1 7
225.224.224.108:12345/udp 1 8
225.224.224.109:12345/udp 1 9
225.224.224.110:12345/udp 1 10
225.224.224.111:12345/udp 1 11
225.224.224.112:12345/udp 1 12
225.224.224.113:12345/udp 1 13
225.224.224.114:12345/udp 1 14
Собственно, больше, вроде, никаких изменений в Линуксе делать не нужно.