kirush Posted February 8, 2011 Posted February 8, 2011 (edited) Добрый день! Подскажите как выйти из "положения": Имеем входной поток 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 February 8, 2011 by kirush Вставить ник Quote
s.lobanov Posted February 8, 2011 Posted February 8, 2011 (edited) kirush Можно так: udpxy -a SERVER_IP -p HTTP_PORT -M 60 После этого, ссылка будет иметь вид http://SERVER_IP:HTTP_PORT/udp/MCAST_GROUP_IP:MCAST_PORT Сервер будет подписываться на мулькаст-группу только по мере необходимости Edited February 8, 2011 by s.lobanov Вставить ник Quote
kirush Posted February 8, 2011 Author Posted February 8, 2011 Как раз сейчас наткнулся на этот демон. Сейчас изучаю его, спасибо за совет. Вставить ник Quote
IVOL Posted February 24, 2011 Posted February 24, 2011 Похожая ситуация. С 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 Мегабит/сек. Вопрос: почему и где зажимается поток? Вставить ник Quote
iMPoSsibLe_iT Posted February 26, 2011 Posted February 26, 2011 kirush Можно так: udpxy -a SERVER_IP -p HTTP_PORT -M 60 После этого, ссылка будет иметь вид http://SERVER_IP:HTTP_PORT/udp/MCAST_GROUP_IP:MCAST_PORT Сервер будет подписываться на мулькаст-группу только по мере необходимости Спасибо. Схема работает. Попробую в "боевых" условиях. Для ноутов с Ви-Фи должно быть самое оно... Вставить ник Quote
KL!M Posted April 27, 2012 Posted April 27, 2012 (edited) У меня наоборот другая проблема - 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 April 27, 2012 by KL!M Вставить ник Quote
server801 Posted April 27, 2012 Posted April 27, 2012 на чем пробовали relaying ? на freebsd прекрасно работает. Вставить ник Quote
KL!M Posted April 27, 2012 Posted April 27, 2012 на чем пробовали relaying ? на freebsd прекрасно работает. relaying пробовал на Linux, на FreeBSD тоже пробовал - работало отлично, но проблема в том что IPTV-Analyzer только под Linux... Вставить ник Quote
server801 Posted April 27, 2012 Posted April 27, 2012 вам шашечки или ехать? не пойму - чем вам софт не устраивает? Вставить ник Quote
KL!M Posted April 27, 2012 Posted April 27, 2012 вам шашечки или ехать? не пойму - чем вам софт не устраивает? Софт устраивает, но мне необходимо на Linux'е стримить 60 каналов и на нем же мониторить их с помощью IPTV-Analyzer (без поднятых потоков зонду анализировать будет нечего), как я уже писал выше - VLC отказывается стримить больше 20 каналов, собственно в этом главный вопрос и заключается - как заставить VLC стримить все 60 каналов. я бы и рад использовать Relaying (больше нравится чем vlc) но на Linux'e он некорректно работает. Вставить ник Quote
mag@ Posted April 28, 2012 Posted April 28, 2012 Софт устраивает, но мне необходимо на 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; } Вставить ник Quote
KL!M Posted April 28, 2012 Posted April 28, 2012 Софт устраивает, но мне необходимо на 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 пакетов? Вставить ник Quote
server801 Posted April 28, 2012 Posted April 28, 2012 Вот расскажи - зачем тебе это? Вставить ник Quote
KL!M Posted April 28, 2012 Posted April 28, 2012 Вот расскажи - зачем тебе это? Собственно для мониторинга качества транслируемого контента, регионов много, интересно знать что происходит в сотне-тысяче км. от тебя. Вставить ник Quote
shicoy Posted January 16, 2013 Posted January 16, 2013 Кстати, в relaying кто нить разобраться как работает ключ --auth? Уж очень хочется basic авторизацию замутить. Вставить ник Quote
Ivan_83 Posted January 16, 2013 Posted January 16, 2013 А что вы хотите получить на выходе? Вставить ник Quote
martini Posted January 16, 2013 Posted January 16, 2013 чтобы мониторить чтото в тысячах километрах - нужно ставить аналайзер там, а не на стримере.. Вставить ник Quote
^rage^ Posted August 27, 2013 Posted August 27, 2013 Что именно? Мультик в Юник? что угодно в юник :) возможно даже с транскодированием :) Вставить ник Quote
20Ilya Posted August 28, 2013 Posted August 28, 2013 Лично меня интересует... Но пока руки не дошли... Да и временная техническая проблема прокинуть транспондеры в стойку... Тем более, что я хомячок... ;) Просто 1:1 планирую делать на Астре4, которая пока глубокая опенбета... Если же применять транскодинг - думаю как лучше... Но ничего пока не придумывается... Вставить ник Quote
Ivan_83 Posted August 28, 2013 Posted August 28, 2013 У меня очень продвинутый самописный udpxy, но транскодить пока не учил :) Вставить ник Quote
^rage^ Posted August 28, 2013 Posted August 28, 2013 у меня вариант простой и эффективный: gstreamer(с выхлопом по multifilesink) + чуть-чуть самописного на python. работает на cpython и pypy, держит 100k коннектов и легко укладывает пару гигабит(sendfile же :)) Вставить ник Quote
maxlapshin Posted August 29, 2013 Posted August 29, 2013 100k коннектов на 2 гигабита — это 21 килобит. Видео. 21 килобит. sendfile при раздаче по сети. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.