IP-Телевидение: плейлист для VLC (udp ссылки)

Тема в разделе 'IT, железо, софт, интернет, игры', создана пользователем Зло, 10 дек 2018.

  1. TopicStarter Overlay
    Зло

    Зло Местный

    На форуме с:
    8 окт 2014
    Сообщения:
    456
    Преимущество UDP - это возможность одновременного просмотра ТВ на множестве устройств

    Для формирования списка каналов (ссылок) написал небольшой код на PERL
    Код:
    #!/usr/bin/perl -w
    use strict 'vars';
    use Time::HiRes qw(sleep);
    use LWP::UserAgent;
    #use Compress::Raw::Zlib;
    use HTTP::Cookies;
    use LWP::ConnCache;
    use JSON;
    use utf8;
    binmode STDIN, ':utf8';
    binmode STDOUT, ':utf8';
    binmode STDERR, ':utf8';
    
    use constant LOGIN_IDC_TV  => '1234567';
    use constant PASSW_IDC_TV  => '123456';
    
    my $browser = LWP::UserAgent->new(requests_redirectable => ['GET','HEAD','POST'],
                                        cookie_jar => {},
                                        conn_cache => LWP::ConnCache->new);
    my @ns_headers = (
        'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36',
        'Accept' => 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*',
        'Accept-Charset' => 'utf-8',
        'Accept-Language' => 'en-US',
        #'Accept-Encoding' => 'gzip'
        );
    
    login_idc();
    list_tv();
    list_film();
    
    sub login_idc{
        my $response  = $browser->post('http://iptvn.idc.md/',[
        'act' => 'login',
        'code_login' =>  LOGIN_IDC_TV,
        'code_pass'  =>  PASSW_IDC_TV,
        'softid' =>'web-ktv-001',],
        @ns_headers, 'Referer' => 'http://iptvn.idc.md/') or warn "Can't login http://iptvn.idc.md/: $@\n";
    
        if ($response->is_success()) {
            $response->decoded_content
        } else {print "\nОшибка ответа на POST login"; exit}
    }
    
    sub list_tv{ #список каналов
        my ($rec_g,$rec_c,$hashRef,$hashRef_url);
        my $str_gr='';
        my $data='';
        my $id_ch=0;
    
        my $response = $browser->get('http://iptvn.idc.md/api/json/channel_list',@ns_headers,'Referer' => 'http://iptvn.idc.md/')
                            or warn "Can't connect http://iptvn.idc.md/api/json/channel_list: $@\n";
        if ($response->is_success()) {
            $data=$response->content;
        }  else{
                print "\nОшибка открытия http://iptvn.idc.md/api/json/channel_list"; exit 0
        }
    
        $hashRef = JSON->new->decode($data);
    
        open my $FoNewlist,'>:encoding(UTF-8)','IPTV-list.xspf';
        print $FoNewlist '<?xml version="1.0" encoding="UTF-8"?>',"\n",
                        '<playlist xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/" version="1">',"\n",
                        '<title>Плейлист</title>',"\n",'<trackList>',"\n";
    
     foreach  $rec_g (@{$hashRef->{'groups'}}){
        print ${$rec_g}{'id'},' ',${$rec_g}{'name'},"\n";
        $str_gr.='<vlc:node title="'.${$rec_g}{'name'}.'">';
            foreach  $rec_c (@{${$rec_g}{'channels'}}){
                $response = $browser->get('http://iptvn.idc.md/api/json/get_url?cid='.${$rec_c}{'id'},@ns_headers,'Referer' => 'http://iptvn.idc.md/') or warn "Can't connect http://iptvn.idc.md/api/json/channel_list: $@\n";
                if ($response->is_success()) {
                    $data=$response->content
                } else {print "\nОшибка открытия http://iptvn.idc.md/api/json/channel_list"; exit 0}
                $hashRef_url = JSON->new->decode($data);
                print '  -',${$rec_c}{'id'},' ',${$rec_c}{'name'},' ',$hashRef_url->{'url'},"\n";
                print $FoNewlist    '<track>',"\n",'<location>',$hashRef_url->{'url'},'</location>',"\n",
                            '<title>',${$rec_c}{'name'},'</title>',"\n",
                            '<image>http://iptvn.idc.md//img/ico/',${$rec_c}{'id'},'.gif</image>',"\n",
                            '<extension application="http://www.videolan.org/vlc/playlist/0">',"\n",
                            '<vlc:id>',$id_ch,'</vlc:id>',"\n",'<vlc:option>network-caching=1000</vlc:option>',"\n",'</extension>',"\n",'</track>';
            $str_gr.='<vlc:item tid="'.$id_ch++.'"/>';
            sleep 0.5
            }
        $str_gr.='</vlc:node>';
     }
     print $FoNewlist '</trackList><extension application="http://www.videolan.org/vlc/playlist/0">',
            $str_gr,'</extension></playlist>';  
     close $FoNewlist;
    }
    
    sub list_film{ ## последнии 100 фильмов
        my ($rec_g,$rec_c,$hashRef,$hashRef_info,$hashRef_urlf,$tmp_str,$best_format);
        my $id_ch=0;
        my $id_ser;
        my $data='';
    
        my $response = $browser->get('http://iptvn.idc.md/api/json/vod_list?type=last&nums=100',@ns_headers,'Referer' => 'http://iptvn.idc.md/')
                                    or warn "Can't connect http://iptvn.idc.md/api/json/vod_list?type=last: $@\n";
        if ($response->is_success()) {
                $data=$response->content;
        } else {
                print "\nОшибка открытия http://iptvn.idc.md/api/json/vod_list?type=last&nums="; exit 0}
    
        $hashRef = JSON->new->decode($data);
        open  my $FoNewlist,'>:encoding(UTF-8)','IPTV-films.xspf';
            print $FoNewlist '<?xml version="1.0" encoding="UTF-8"?>',"\n";
            print $FoNewlist '<playlist xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/" version="1">',"\n";
            print $FoNewlist '<title>Плейлист</title>',"\n",'<trackList>',"\n";
    
        foreach  $rec_g (@{$hashRef->{'rows'}}){
            print ${$rec_g}{'id'},' ',${$rec_g}{'name'},"\n";
    
            $response = $browser->get('http://iptvn.idc.md/api/json/vod_info?id='.${$rec_g}{'id'},@ns_headers,'Referer' => 'http://iptvn.idc.md/') or warn "Can't connect http://iptvn.idc.md/api/json/vod_info: $@\n";
            if ($response->is_success()) {
                $data=$response->content;
            } else {print "\nОшибка открытия http://iptvn.idc.md/api/json/vod_info?id="; exit 0}
            $hashRef_info = JSON->new->decode($data);
           
            if ($hashRef_info->{'film'}) {
            $best_format=$hashRef_info->{'film'}->{'videos'}->[-1]->{'format'};
            foreach $rec_c (@{$hashRef_info->{'film'}->{'videos'}}){
                if ($rec_c->{'format'} eq $best_format){
                    print '=',$rec_c->{'id'},"=\n";
    
                    $response = $browser->get('http://iptvn.idc.md/api/json/vod_geturl?fileid='.$rec_c->{'id'}.'&ad=1',@ns_headers,'Referer' => 'http://iptvn.idc.md/')
                            or warn "Can't connect http://iptvn.idc.md/api/json/vod_geturl?fileid=: $@\n";
                    if($response->is_success()) {
                        $data=$response->content;
                    } else {print "\nОшибка открытия http://iptvn.idc.md/api/json/vod_geturl?fileid="; exit}
                $hashRef_urlf = JSON->new->decode($data);
                print "=",$hashRef_urlf->{'url'},"=\n";
                #print JSON->new->encode($rec_c); exit;
                $tmp_str='<track>'."\n".'<location>'.$hashRef_urlf->{'url'}.'</location>'."\n";
                $tmp_str.='<title>'.${$rec_g}{'name'}.' '.$rec_c->{'title'}.'</title>'."\n";
                $tmp_str.='<annotation>'.${$rec_g}{'description'}.'</annotation>'."\n";
                $tmp_str.='<image>http://iptvn.idc.md'.${$rec_g}{'poster'}.'</image>'."\n";
                $tmp_str.='<extension application="http://www.videolan.org/vlc/playlist/0">'."\n";
                $tmp_str.='<vlc:option>network-caching=1000</vlc:option>'."\n".'</extension>'."\n".'</track>';
                $tmp_str=~s/&\w+;/ /g;
                print $FoNewlist $tmp_str;
                sleep 0.5;
              }
             }  
            $id_ch++
            } else{}
        }
        print $FoNewlist '</trackList></playlist>';  
        close $FoNewlist;
    }

    прикрепленный файл - это древовидный VLC плейлист
     

    Вложения:

    • IPTV-list.zip
      Размер файла:
      6,9 КБ
      Просмотров:
      3.066
    Читатель, korvin и РТ-79 нравится это.
  2. РТ-79

    РТ-79 Старожил

    На форуме с:
    13 окт 2016
    Сообщения:
    4.241
    а .m3u лист?
     
  3. TopicStarter Overlay
    Зло

    Зло Местный

    На форуме с:
    8 окт 2014
    Сообщения:
    456
    открыть в VLC и пересохранить в .m3u

    [​IMG]

    [​IMG]
     
    Last edited: 10 дек 2018
    РТ-79 нравится это.
  4. iNoNemo

    iNoNemo Старожил

    На форуме с:
    10 мар 2017
    Сообщения:
    3.420
    там в конце Демо-канал лучше сделать
    location>udp://@224.31.180.4:1234</location>
    <title>Тирасполь - Площадь Суворова.</title>
     
    VIGO нравится это.
  5. TopicStarter Overlay
    Зло

    Зло Местный

    На форуме с:
    8 окт 2014
    Сообщения:
    456
    "Демо-канал" это раздел древовидного плейлиста
    раскрой "Spoiler: Для наглядности" из предыдущего моего поста


    P.S. Список Каналов из пакета «IPTV Standart»

    было бы неплохо, если бы обладатели пакета «IPTV Comfort» воспользовались скриптом и поделились с нами полным списком каналов
     
    Last edited: 10 дек 2018
    VIGO нравится это.
  6. херувим1

    херувим1 Местный

    На форуме с:
    17 июл 2014
    Сообщения:
    424
    Чёто лыжи не едут.
    Либо не работет совсем, липо пару секунд показывает и всё, радио работает через раз, т.е. сразу ароде работает, но если поклацать каналы, то и оно перестаёт работать (.
    Ось ХР, VLC 2.1.3
     
  7. TopicStarter Overlay
    Зло

    Зло Местный

    На форуме с:
    8 окт 2014
    Сообщения:
    456
    Какой у Вас тип подключения, скорость (оптика, ADSL, тариф) ?

    есть вероятность, что множество потоков мультикаста просаживают трафик - не спишите щелкать каналы

    попробуйте настроить IGMP на версию 2 (мне помогло уменьшить время отклика)
     
    Last edited: 10 дек 2018
  8. херувим1

    херувим1 Местный

    На форуме с:
    17 июл 2014
    Сообщения:
    424
    Оптика Fttb за 112р, заявленая скорость 10 Mбит/с внешка и 60 локалка
    ИДК ТВ через их плеер (с логином и паролем) работает нормально.
    Ладно бы просадка скорости на HD каналах, но даже радио не хочет нормально работать. Видео, может несколько секунд показать и останавливается.
     
    IraS нравится это.
  9. TopicStarter Overlay
    Зло

    Зло Местный

    На форуме с:
    8 окт 2014
    Сообщения:
    456
    возможно на роутере igmp proxy не тянет несколько потоков,

    у меня модем в режиме моста (igmp proxy установлен на компе с прямым подключением), VLC 3.0.4 - 3 компа без задержек могут одновременно переключаться и принимать HD каналы
     
  10. херувим1

    херувим1 Местный

    На форуме с:
    17 июл 2014
    Сообщения:
    424
    IGMP на версию 2 прописал, перезагрузил, роутер из цепочки извлёк (подключил напрямую) - без изменений, при первом включении - 2 слова и остановка, в дальнейшем даже 2х слов нет.

    Обновил VLC до 3,0,4 - без изменений
     
    Last edited: 10 дек 2018
    IraS нравится это.
  11. TopicStarter Overlay
    Зло

    Зло Местный

    На форуме с:
    8 окт 2014
    Сообщения:
    456
    попробуйте отключить системный и антивирусный firewall

    Догадки (не проверял):
    возможно на разных тарифах («IPTV Light»,«IPTV Optimum»,«IPTV Standart», «IPTV Comfort») используется разные URL (IP) - надо сравнивать плейлисты

    или для разных тарифов используются разные фильтры IGMP пакетов - попробуйте каналы которые Вам доступны с «IPTV Light»
     
    Last edited: 10 дек 2018
  12. korvin

    korvin Старожил

    На форуме с:
    31 авг 2013
    Сообщения:
    4.657
    У меня на vlc аж бегает. Во всяком случае днём так было.
     
  13. херувим1

    херувим1 Местный

    На форуме с:
    17 июл 2014
    Сообщения:
    424
    Проверил на втором ПК (без антивируса вообще), обновил кодаки - так же не работает ни один канал, даже "Первый ПМР", "ТСВ" и "Тирасполь - Площадь Суворова"
    IPTV «IPTV Optimum» в плеере от ИДК на пакете «Оптика Light» работает на обоих ПК
    Музыка в разделе "Интернет" самого плеера VLC работает без проблем.
     
    IraS нравится это.
  14. TopicStarter Overlay
    Зло

    Зло Местный

    На форуме с:
    8 окт 2014
    Сообщения:
    456
    У меня GPON, наверное есть отличие в подключении к IPTV - попробуйте самостоятельно сформировать плейлист используя скрипт PERL
    (или в личку скинте свой пароль и логин от IPTV - я Вам сформирую)
     
  15. nomerodin1

    nomerodin1 Старожил

    На форуме с:
    23 мар 2014
    Сообщения:
    1.072
    Вот такой у меня плейлист. Смотрю его на DUNE
     

    Вложения:

    • IP TV IDC.zip
      Размер файла:
      2,6 КБ
      Просмотров:
      1.017
  16. VIGO

    VIGO Хранитель форума

    На форуме с:
    10 май 2015
    Сообщения:
    33.195
    Попробуйте это. Я его использую через IP-TV Player.
     

    Вложения:

  17. VIGO

    VIGO Хранитель форума

    На форуме с:
    10 май 2015
    Сообщения:
    33.195
    Сегодня такая же фигня, перестал работать IP-TV и IDC.TB.
    Кто как решил?
     
  18. TopicStarter Overlay
    Зло

    Зло Местный

    На форуме с:
    8 окт 2014
    Сообщения:
    456
    На GPON (huawei) все в порядке

    [​IMG]

    обновленный список каналов (GPON «IPTV Standart» древовидный VLC плейлист)
     

    Вложения:

    • IPTV-list.zip
      Размер файла:
      7,3 КБ
      Просмотров:
      817
    Last edited: 11 дек 2018
  19. VIGO

    VIGO Хранитель форума

    На форуме с:
    10 май 2015
    Сообщения:
    33.195
    Позвонил в техподдержку, там что то настроили, но показывает на ПК только через IDC.TB с вводом логина и пасса, а через IP-TV Player ни в какую ни на компе, ни на смартфоне (кстать на смарте IDC.TB не работает почему то) (((
    Что можно предпринять?
     
  20. TopicStarter Overlay
    Зло

    Зло Местный

    На форуме с:
    8 окт 2014
    Сообщения:
    456
    "подсмотреть" текущие ссылки на каналы
    как это сделать:
    В настройках IDC.ТВ плеера,
    -на вкладке настройка:
    указать полный путь к VLC плееру в поле Проигрыватель
    включить опцию Вкл. доп. настройки
    - на вкладке Допол. настройки в опции Модуль проигрывателя выбрать 1_vlc-playr.mod

    после настройки просмотор будет открываться в VLC плеере, в котором можно будет увидеть ссылку на выбранный канал в IDC.ТВ
     
    VIGO нравится это.