Перейти к содержимому
Калькуляторы

Добрый день!

Подскажите как выйти из "положения":

 

Имеем входной поток IPTV около 130 каналов, поступает по rtp.

В связи с тем, что сеть на данный момент полностью не позволяет перейти на вещание по multicast, выкручиваюсь перегоном rtp в http.

 

screen -dmS vlc sudo -u xxx cvlc rtp://@230.3.3.84:5678 --sout-all --sout='#std{access=http,mux=ts,dst=10.1.255.100:8081}'

screen -dmS vlc sudo -u xxx cvlc rtp://@230.3.3.32:5678 --sout-all --sout='#std{access=http,mux=ts,dst=10.1.255.100:8082}'

и т.д.

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

Можно ли сделать, чтобы vlc начинал перегонять нужный поток только когда есть "потребность" (т.е. когда абонент включает канал) и прекращалось когда нет "потребности".

Или может есть другой выход из ситуации?

Заранее благодарен за любые мысли.

Изменено пользователем kirush

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

kirush

Можно так:

 

udpxy -a SERVER_IP -p HTTP_PORT -M 60

 

После этого, ссылка будет иметь вид http://SERVER_IP:HTTP_PORT/udp/MCAST_GROUP_IP:MCAST_PORT

 

Сервер будет подписываться на мулькаст-группу только по мере необходимости

Изменено пользователем s.lobanov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как раз сейчас наткнулся на этот демон. Сейчас изучаю его, спасибо за совет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Похожая ситуация.

С IP-стримера IPS-01 идёт мультикаст поток (239.255.2.0/24:1234) на сервер.

В этом сервере установлена вторая гигабитная сетувуха с IP 192.168.1.12, именно в эту сетевуху подключен кабель с ИП-стримера.

Для ретрансляции мультикаста в юникаст установил udpxy и запустил его с настройкой на 4022 порт.

Команда route add 239.255.2.0/24 192.168.1.12 позволила настроить роутинг потока.

По ссылке http://server:4022/udp/239.255.2.11:1234 теперь можно посмотреть канал.

Но картинка очень сильно рассыпается, а звук только иногда прорывается. Не хватает потока.

Статистика VLC показывает, что поток около 1 Мегабита/сек, а trafshow показывает около 130 килобайт/сек, что одно и тоже.

А для нормального качества поток одного канала должен быть около 4 Мегабит/сек.

Вопрос: почему и где зажимается поток?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

kirush

Можно так:

 

udpxy -a SERVER_IP -p HTTP_PORT -M 60

 

После этого, ссылка будет иметь вид http://SERVER_IP:HTTP_PORT/udp/MCAST_GROUP_IP:MCAST_PORT

 

Сервер будет подписываться на мулькаст-группу только по мере необходимости

Спасибо. Схема работает. Попробую в "боевых" условиях. Для ноутов с Ви-Фи должно быть самое оно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вам тоже большое спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня наоборот другая проблема - vlc пытаюсь перегнать 60 потоков multicast в unicast, но vlc больше 20 потоков одновременно не поднимает (Linux)

пример конфига vlm:

 

#Multicast to Unicast
new channel1 broadcast enabled
setup channel1 input udp://@234.5.2.1:20000
setup channel1 output #standard{access=http,mux=ts,dst=10.128.255.6:10001}
control channel1 play

new channel2 broadcast enabled
setup channel2 input udp://@234.5.2.2:20000
setup channel2 output #standard{access=http,mux=ts,dst=10.128.255.6:10002}
control channel2 play

new channel3 broadcast enabled
setup channel3 input udp://@234.5.2.3:20000
setup channel3 output #standard{access=http,mux=ts,dst=10.128.255.6:10003}
control channel3 play

udpxy не предлагать, нужны активные 60 потоков для мониторинга дропов mpeg2-ts

ещё пробовал Relaying (http://deineka.net/2010/12/06/relaying-multicast-v-http-i-obratno/) но у него другая проблема, один поток поднимается нормально, а когда поднимаешь два и более - начинаются mpeg2-ts больше 1к

Изменено пользователем KL!M

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

на чем пробовали relaying ? на freebsd прекрасно работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

на чем пробовали relaying ? на freebsd прекрасно работает.

relaying пробовал на Linux, на FreeBSD тоже пробовал - работало отлично, но проблема в том что IPTV-Analyzer только под Linux...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вам шашечки или ехать? не пойму - чем вам софт не устраивает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вам шашечки или ехать? не пойму - чем вам софт не устраивает?

Софт устраивает, но мне необходимо на Linux'е стримить 60 каналов и на нем же мониторить их с помощью IPTV-Analyzer (без поднятых потоков зонду анализировать будет нечего), как я уже писал выше - VLC отказывается стримить больше 20 каналов, собственно в этом главный вопрос и заключается - как заставить VLC стримить все 60 каналов.

я бы и рад использовать Relaying (больше нравится чем vlc) но на Linux'e он некорректно работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Софт устраивает, но мне необходимо на Linux'е стримить 60 каналов и на нем же мониторить их с помощью IPTV-Analyzer (без поднятых потоков зонду анализировать будет нечего)

 

Для того, чтобы получать на Linux железку multicast поток достаточно програмульки на перле

которая откроет "мультикаст" сокет, а потом из него будет читать данные. Уложится в 30-40

строчек кода (с хелпом, проверками и коментами - т.е. если писать "культурно").

Что на основе подобного кода.

 

my $sock = IO::Socket::Multicast->new(Proto=>'udp',LocalPort=>$mPort,Blocking=>1,ReuseAddr=>1);
$sock->mcast_add($mGroup) || die "Couldn't set group: $!\n";
while( 1==1 ) {
alarm $timeout;
if ( !defined($sock->recv($data,1316)) ) {
   #print "no data\n";
   $rcmd_res = "fail";
   } else {
   #print "exist stream\n";
   $rcmd_res = "ok";
}
alarm 0;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Софт устраивает, но мне необходимо на Linux'е стримить 60 каналов и на нем же мониторить их с помощью IPTV-Analyzer (без поднятых потоков зонду анализировать будет нечего)

 

Для того, чтобы получать на Linux железку multicast поток достаточно програмульки на перле

которая откроет "мультикаст" сокет, а потом из него будет читать данные. Уложится в 30-40

строчек кода (с хелпом, проверками и коментами - т.е. если писать "культурно").

Что на основе подобного кода.

 

my $sock = IO::Socket::Multicast->new(Proto=>'udp',LocalPort=>$mPort,Blocking=>1,ReuseAddr=>1);
$sock->mcast_add($mGroup) || die "Couldn't set group: $!\n";
while( 1==1 ) {
alarm $timeout;
if ( !defined($sock->recv($data,1316)) ) {
   #print "no data\n";
   $rcmd_res = "fail";
   } else {
   #print "exist stream\n";
   $rcmd_res = "ok";
}
alarm 0;
}

Сделал на perl'e, поднимает 80 потоков - 4 ядра ксеона уходят в полку с load average: 90.21, 86.14, 70.26

Интересно кто как мониторит дропы mpeg2-ts пакетов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот расскажи - зачем тебе это?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот расскажи - зачем тебе это?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кстати, в relaying кто нить разобраться как работает ключ --auth? Уж очень хочется basic авторизацию замутить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А что вы хотите получить на выходе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

чтобы мониторить чтото в тысячах километрах - нужно ставить аналайзер там, а не на стримере..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что именно? Мультик в Юник?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что именно? Мультик в Юник?

что угодно в юник :) возможно даже с транскодированием :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Лично меня интересует... Но пока руки не дошли... Да и временная техническая проблема прокинуть транспондеры в стойку... Тем более, что я хомячок... ;)

Просто 1:1 планирую делать на Астре4, которая пока глубокая опенбета... Если же применять транскодинг - думаю как лучше... Но ничего пока не придумывается...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня очень продвинутый самописный udpxy, но транскодить пока не учил :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

у меня вариант простой и эффективный: gstreamer(с выхлопом по multifilesink) + чуть-чуть самописного на python.

 

работает на cpython и pypy, держит 100k коннектов и легко укладывает пару гигабит(sendfile же :))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

100k коннектов на 2 гигабита — это 21 килобит. Видео. 21 килобит. sendfile при раздаче по сети.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.