Jump to content
Калькуляторы

IPTV multicast<>http

Добрый день!

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

 

Имеем входной поток 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 начинал перегонять нужный поток только когда есть "потребность" (т.е. когда абонент включает канал) и прекращалось когда нет "потребности".

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

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

Edited by kirush

Share this post


Link to post
Share on other sites

kirush

Можно так:

 

udpxy -a SERVER_IP -p HTTP_PORT -M 60

 

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

 

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

Edited by s.lobanov

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

С 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 Мегабит/сек.

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

Share this post


Link to post
Share on other sites
kirush

Можно так:

 

udpxy -a SERVER_IP -p HTTP_PORT -M 60

 

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

 

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

У меня наоборот другая проблема - 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к

Edited by KL!M

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

Софт устраивает, но мне необходимо на 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;
}

Share this post


Link to post
Share on other sites

Софт устраивает, но мне необходимо на 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 пакетов?

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this