Форум XBMC и Kodi. Помощь, поддержка, обсуждение, плагины.

Форум XBMC и Kodi. Помощь, поддержка, обсуждение, плагины. (http://xbmc.ru/forum/index.php)
-   Помощь по плагинам (http://xbmc.ru/forum/forumdisplay.php?f=9)
-   -   hts tvheadend m3u import (http://xbmc.ru/forum/showthread.php?t=1254)

ego 22.09.2011 20:22

hts tvheadend m3u import
 
Не совсем плагин это, но все-же пишу сюда.

Подскажите, для просмотра IPtv можно-ли как-нибудь импортировать .m3u в программу или нужно все каналы вручную набивать?

MATPOC 22.09.2011 22:54

Вложений: 1
Цитата:

Сообщение от ego (Сообщение 15398)
Не совсем плагин это, но все-же пишу сюда.
Подскажите, для просмотра 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";
    } 



ego 22.09.2011 23:10

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

bam 29.10.2011 21:11

Спасибо за скрипт.
Было бы полезно добавить возможность обновления каналов tvheadend новыми каналами из плейлиста, а не импортировать каждый раз все каналы.

Stranger 30.10.2011 12:23

чтобы темы не плодить, тоже здесь спрошу. никто не знает, можно xbmc+tvheadend заставить работать через udproxy? имеется прокси udp, который на выходе выдает поток по http протоколу (формат строки запроса http://192.168.1.1:81/udp/234.5.2.64:1234).

MATPOC 30.10.2011 23:11

Цитата:

Сообщение от bam (Сообщение 16704)
Спасибо за скрипт.
Было бы полезно добавить возможность обновления каналов tvheadend новыми каналами из плейлиста, а не импортировать каждый раз все каналы.

Такой скрипт за пять сек не рисуется. Я делаю проще - при помощи команды diff или fc получаю разницу между предыдущим и новым плейлистом и уже на этот маленький кусочек натравливаю скрипт.

MATPOC 30.10.2011 23:27

Цитата:

Сообщение от Stranger (Сообщение 16727)
чтобы темы не плодить, тоже здесь спрошу. никто не знает, можно xbmc+tvheadend заставить работать через udproxy? имеется прокси udp, который на выходе выдает поток по http протоколу (формат строки запроса http://192.168.1.1:81/udp/234.5.2.64:1234).

tvheadend понимает только udp и rtp. XBMC понимает почти всё, поэтому вы можете поднять udpxy и использовать локальные плейлисты, но без прелестей tvheadend. Для локальных плейлистов я рекомендую плагин Navi-X, обсуждение которого ведётся в ветке Плагин для IP-TV провайдеров на третьей странице.

bam 04.11.2011 20:22

Цитата:

Сообщение от MATPOC (Сообщение 16764)
Такой скрипт за пять сек не рисуется. Я делаю проще - при помощи команды diff или fc получаю разницу между предыдущим и новым плейлистом и уже на этот маленький кусочек натравливаю скрипт.

Хм. Это тоже идея. Спасибо.
Думаю настроить запуск вашего скрипта при пробуждении системы из сна.
Возникает вопрос - если при этом будут проимпортированы новые каналы, заметит ли это tvheadend без перезапуска?

MATPOC 05.11.2011 13:35

Цитата:

Сообщение от bam (Сообщение 16930)
Думаю настроить запуск вашего скрипта при пробуждении системы из сна.
Возникает вопрос - если при этом будут проимпортированы новые каналы, заметит ли это tvheadend без перезапуска?

Так часто обновляется плейлист? И tvheadebd автоматом не подхватит новые каналы, как минимум надо послать ему сигнал HUP.

bam 05.11.2011 15:04

:) плейлист обновляется конечно не так часто - но бывает, за неделю пару каналов добавят, а то и больше. Просто не нашёл другого более подходящего события, по которому можно было бы автоматом обновлять плейлист, а cron я как-то по возможности избегаю. Да и обновление это вроде бы не такая тяжелая операция, зато точно знаешь - после включения TV список каналов у тебя всегда актуальный.
А вот про сигнал HUP не знал - благодарю.


Текущее время: 01:58. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.