Jump to content

Recommended Posts

Posted

Привет.

Есть какие-нибудь идеи по мониторингу наличия каналов IPTV (multicast потоки)? Хочу к nagios'у прикрутить. Может VLC может как-то запускать поток и если потока нет - говорить об этом? Каналов ~80.

Posted

http://habrahabr.ru/post/66351/

Здесь есть некоторые наработки.

 

Плюс вот кусок на php. Ловит кодированные, не идушие каналы.

$channel = "udp://@230.0.0.1:1234";

//Формируем имя файла
$group = explode("@",$channel);
$group = explode('.',str_replace(':','.',$group[1]));
$filepath = "/tmp/{$group[0]}-{$group[1]}-{$group[2]}-{$group[3]}-{$group[4]}.avi";

//Записываем поток в файл
exec("cvlc $channel --daemon --sout '#standard{access=file,dst=\"$filepath\",mux=ts}' &> /dev/null");
sleep(20);                  //за 20 секунд точно должна произойти подписка
exec("killall -9 vlc");
if (filesize($filepath) > 100) {
   //Канал работает
   echo "[DEBUG] Проверка для канала {$group[0]}.{$group[1]}.{$group[2]}.{$group[3]}:{$group[4]} успешна.\n";
} else {
   //Канал не работает
   echo "[DEBUG] Проверка для канала {$group[0]}.{$group[1]}.{$group[2]}.{$group[3]}:{$group[4]} обнаружила отутсвие вещания.\n";
}
exec("rm -f $filepath");

Posted

Попробую посмотреть, но мне кажется, что оно умеет только графики рисовать, забирая данные по SNMP.

 

Оно не по SNMP работает. Оно само принимает поток, анализирует и складывает статистику в мускульную базу. Вы можете написать плагин к нагиосу, который обращается к базе и исходя из полученной инфы выдает алерты.

Posted

Может VLC может как-то запускать поток и если потока нет - говорить об этом?

Я бы запускал VLC секунд на 30 и через tcpdump проверял, идёт ли к нему мультикастовый udp-поток.

Posted
Я бы запускал VLC секунд на 30 и через tcpdump проверял, идёт ли к нему мультикастовый udp-поток.

Для подписки на мультикаст можно и на перле скрипт накатать строчек на 50, не больше.

Posted

я подписываюсь на группы простеньким скриптом

 

#!/usr/bin/perl -w
use strict;
use IO::Socket::Multicast;

if($#ARGV<1){
       print "Usage: igmp_join <ifname> <group ip>\n";
       exit 1;
}


my $mcast_address=$ARGV[1]; #"239.32.1.67";
my $mcast_port=1100;
my $mcast_interface=$ARGV[0]; #"eth1.81";
my $mcast_ttl=10;

my $s = IO::Socket::Multicast->new(PeerDest=>$mcast_address,
                                  PeerPort=>$mcast_port);
$s->mcast_if($mcast_interface);
$s->mcast_add($mcast_address,$mcast_interface);
#$s->mcast_ttl($mcast_ttl);

<STDIN>;

exit 2;

Posted

я подписываюсь на группы простеньким скриптом

 

#!/usr/bin/perl -w

use strict;

use IO::Socket::Multicast;

 

if($#ARGV<1){

print "Usage: igmp_join <ifname> <group ip>\n";

exit 1;

}

Его можно сделать ещё проще, если написать

die "Usage: ..." if @ARGV != 2;

 

Кроме того, не очень понятно, как себя поведет <STDIN> на двоичном потоке или если потока нет вообще.

Не правильнее ли использовать IO::Select?

Posted

Его можно сделать ещё проще, если написать

die "Usage: ..." if @ARGV != 2;

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

 

Кроме того, не очень понятно, как себя поведет <STDIN> на двоичном потоке или если потока нет вообще.

Не правильнее ли использовать IO::Select?

 

не понял о чем вы ? <stdin> там стоит, чтобы скрипт прерывался после нажатия Enter.

  • 2 weeks later...

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.