Показать сообщение отдельно
Старый 22.09.2011, 22:54   #2
MATPOC
Senior Member
 
Регистрация: 27.12.2010
Адрес: Междуреченск, Кемеровская обл.
Сообщений: 291
По умолчанию

Цитата:
Сообщение от ego Посмотреть сообщение
Не совсем плагин это, но все-же пишу сюда.
Подскажите, для просмотра IPtv можно-ли как-нибудь импортировать .m3u в программу или нужно все каналы вручную набивать?
Да, я писал скрипт для конвертирования плейлиста в формате navi-x. Поправьте в переменной $MIFACE интерфейс, с которого делаются запросы к провайдеру IPTV. Скрипт очень простой - берёт плейлист в формате m3u со стандартного ввода (stdin) или указать имя файла в качестве агрумента. Файлы нумеруются с 1001 (iptv_1001 и т.д.) чтобы не пересекаться с возможными спутниковыми каналами. Файлы с определениями IPTV каналов создаются в домашней директории ~/.hts/tvheadend/iptvservices текущего пользователя, то есть нужно запускать от имени пользователя, под которым работает tvehadend:

Код:
sudo su -c './m3u2hts.pl iptv.m3u' - hts
Если директория ~/.hts/tvheadend/iptvservices не существует или недоступна для записи, скрипт завершает работу с выводом предупреждения.

Позиции плейлиста m3u должны задаваться парами строк вида:

#EXTINF:что угодно , Имя канала
proto://@233.32.240.236:1234

Где proto == udp или rtp, адрес обязательно из четырёх чисел, разделённых точками.

Сам код очень простой, но там есть все заготовки для вывода плейлиста в других форматах - в переменные $mproto, $mgroup, $mport из строки URL вычленяются соответственно протокол, мультикаст группа и порт. Так как для вывода в формат tvheadend некторые переменные не используются, то perl выдаёт предупреждения, которые можно игнорировать:

Цитата:
Name "main::mproto" used only once: possible typo at ./m3u2hts.pl line 27.
Name "main::murl" used only once: possible typo at ./m3u2hts.pl line 28.
PHP код:
#!/usr/bin/perl -w

my $DEBUG 0;
my $MIFACE "eth1";
my $MAXN 9999;

my $HTSIPTVDIR "~/.hts/tvheadend/iptvservices";
# my $HTSIPTVDIR = "~/.hts/tvheadend/iptvtransports"; // old version
my $fcount 1000;

# Check $HTSIPTVDIR exist?
### glob возвращает СПИСОК!!! нестабильно работает как скаляр
my @lghtsiptvdir glob($HTSIPTVDIR);
my $ghtsiptvdir $lghtsiptvdir[0];
die 
"Directory '$ghtsiptvdir' is not exist or not writable\n"
    
if !(-w $ghtsiptvdir);

sub out_tvheadend;

while (
defined($line = <>) ) {
    if (
$line =~ /#EXTINF:.*,\s*(.*)(\s*)/) {
    
$channel_name = $1;
    
$channel_name =~ s/\r+//;

        
if (defined($line = <>)
        and (
$line =~ '(udp|rtp)://@?(\d+\.\d+\.\d+\.\d+):(\d+)')) {
        
$mproto = $1$mgroup = $2$mport = $3;
        
$murl $line;
    }
    
out_tvheadend;
    }
}

sub out_tvheadend
{
    do 
    { 
# ищем несуществующий файл iptv_ с номером $fcount
        
$fname sprintf "%s/iptv_%04u"$ghtsiptvdir, ++$fcount;
    } 
until (!(-e $fname) and ($fcount $MAXN));

    print 
$fcount" "$channel_name" "$fname"\n" if $DEBUG;

    if (!(
open(FH">"$fname))) {
        
warn "Couldn't open $fname for writing: $!\n"
    
}
    else {
        print 
FH "{\n";
        print 
FH "\t\"pmt\": 0,\n";
        print 
FH "\t\"port\": $mport,\n";
        print 
FH "\t\"interface\": \"$MIFACE\",\n";
        print 
FH "\t\"group\": \"$mgroup\",\n";
        print 
FH "\t\"channelname\": \"$channel_name\",\n";
        print 
FH "\t\"mapped\": 1,\n";
        print 
FH "\t\"pcr\": 0,\n";
        print 
FH "\t\"disabled\": 0\n";
        print 
FH "}\n";
        
close FH or warn "Couldn't close $fname: $!\n";
    } 

Вложения
Тип файла: zip m3u2hts.zip (1.0 Кб, 550 просмотров)
__________________
Intel Core2 Duo, ASUS Nvidia GT220, GMC AVC M1, Linux // M8S+ Amlogic S805, Tronsmart Vega S96 Amlogic S912
MATPOC вне форума   Ответить с цитированием