IPTV от МГТС: поиск каналов

    Write a paper, and give a talk, about any idea, no matter how insignificant it may seem to you.
    S. P. Jones, How to write a great research paper

    В Москве МГТС проводит мероприятия по замене медной проводки на оптику по технологии GPON. В результате абоненты МГТС получают возможность пользоваться не только телефонной связью, но и доступом в Интернет, а также смотреть IP-телевидение. Для просмотра программ ТВ МГТС предлагает арендовать приставку, которая и обеспечит просмотр.

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

    В последнее время всё чаще от знакомых и коллег по работе я стал слышать новое слово GPON — рассказ сопровождался душераздирающими подробностями: дескать, приходят к тебе в дом люди от МГТС, режут старый медный телефонный провод, прибивают около входной двери розетку 220 В и коробочку, через которую теперь и работает телефон, а при желании и Интернет, и даже телевидение.

    Дошло до того, что, будучи в гостях, я узрел это самое телевидение через GPON своими глазами — около телевизора красовалась приставка с надписью МТС, а в коридоре поблёскивала лампочками белая коробочка ZTE ZXA10 F660. Приставку с ZTE F660 соединял заурядный двухпарный кабель Cat5 с разъёмами RJ45 на концах; из описания ZTE F660 стало ясно, что для передачи данных на приставку используется Ethernet. Возникла крамольная мысль: «А ну как подключить вместо приставки ноутбук — смогу посмотреть ТВ?».

    Поиски привели меня на подходящий форум. Оказалось, что вопрос о просмотре ТВ без приставки мучает не только меня:
    Возможно ли смотреть телеканалы непосредственно на компьютере? У большинства провайдеров скачиваешь плейлист и открываешь его в клиенте, например, VLC. В МГТС GPON все заточено на использование приставки и телевизора… техподдержка от вопроса впадает в ступор. Если у кого-то был опыт настройки, поделитесь, плс.


    Из чтения форума стало ясно, что если ZTE F660 настроен «по умолчанию», то для просмотра ТВ обязательно подключаться в гнездо LAN4, а также надо обзавестись этим самым «плейлистом» (официального «плейлиста» от МГТС не существует).

    Удалось найти несколько «плейлистов»: например, вот здесь.

    Оказалось, что только некоторые каналы из «плейлистов» работают. А некоторые работают половинчато — вместо картинки показывает мусор, но звук транслируется нормально (такие каналы зашифрованы, для их просмотра требуется отдельно заплатить).

    Возникла мысль, что «плейлист» — штука изменчивая, и стоит сделать собственный при помощи перебора подходящих диапазонов IP-адресов на основе содержимого старых «плейлистов». Чтобы не проводить перебор вручную, был написан простой скрипт на bash. Скрипт перебирает адреса, с которых возможно ведётся вещание, и, в случае удачи, выдёргивает один кадр телепередачи:

    #!/bin/bash
    
    for i in $(seq 1 255); do
        IP=239.255.2.$i
        URL=udp://@$IP:5500
        echo "== $URL =="
        mplayer -ac none -really-quiet -vo png -frames 1 $URL 2>/dev/null
        mv 00000001.png $IP.png
    done
    


    Для каждого из IP-адресов, для которых удалось поймать ТВ-канал, будет создан файл с именем вида $IP.png.



    Далее не составляет труда стереть те файлы, которые соответствуют шифрованным (или нежелательным каналам) и сгенерировать собственный M3U «плейлист»:

    ( echo '#EXTM3U' ; \
    ls -1 *png | sort -V | sed "s/^\(.*\)\.png/#EXTINF:-1,\1\nudp:\/\/@\1\:5500/" ) > playlist
    


    У меня получился вот такой список на 28 открытых каналов:

    #EXTM3U
    #EXTINF:-1,5 канал
    udp://@239.255.2.18:5500
    #EXTINF:-1,Russian Musicbox
    udp://@239.255.2.37:5500
    #EXTINF:-1,Детский
    udp://@239.255.2.47:5500
    #EXTINF:-1,ТРО
    udp://@239.255.2.52:5500
    #EXTINF:-1,Перец
    udp://@239.255.2.54:5500
    #EXTINF:-1,Disney
    udp://@239.255.2.57:5500
    #EXTINF:-1,ТВЦ
    udp://@239.255.2.58:5500
    #EXTINF:-1,РЕН ТВ
    udp://@239.255.2.59:5500
    #EXTINF:-1,СТС
    udp://@239.255.2.61:5500
    #EXTINF:-1,Ю
    udp://@239.255.2.62:5500
    #EXTINF:-1,Домашний
    udp://@239.255.2.63:5500
    #EXTINF:-1,Россия 2
    udp://@239.255.2.65:5500
    #EXTINF:-1,Россия 1
    udp://@239.255.2.67:5500
    #EXTINF:-1,Россия К
    udp://@239.255.2.68:5500
    #EXTINF:-1,ТВ3
    udp://@239.255.2.90:5500
    #EXTINF:-1,Звезда
    udp://@239.255.2.91:5500
    #EXTINF:-1,НТВ
    udp://@239.255.2.95:5500
    #EXTINF:-1,Первый канал
    udp://@239.255.2.97:5500
    #EXTINF:-1,ПЯТНИЦА!
    udp://@239.255.2.98:5500
    #EXTINF:-1,ТНТ
    udp://@239.255.2.100:5500
    #EXTINF:-1,Россия 24
    udp://@239.255.2.109:5500
    #EXTINF:-1,СТС love
    udp://@239.255.2.112:5500
    #EXTINF:-1,2x2
    udp://@239.255.2.115:5500
    #EXTINF:-1,PRO Бизнес
    udp://@239.255.2.119:5500
    #EXTINF:-1,Россия HD
    udp://@239.255.2.120:5500
    #EXTINF:-1,HD life
    udp://@239.255.2.156:5500
    #EXTINF:-1,Первый канал HD
    udp://@239.255.2.185:5500
    #EXTINF:-1,ОТР
    udp://@239.255.2.210:5500
    


    Применение описанной выше методики как нельзя лучше подтверждает эмпирический закон Парето: небольшими усилиями (написание простейшего скрипта и несколько минут на просмотр «галереи картинок») удалось получить вполне пригодный для практического применения результат (M3U «плейлист»).

    Конечно, хотелось бы получать «плейлист» с минимальным вложением ручного труда. Сделать этом можно, к примеру, просмотрев трафик сетевой приставки сразу после её включения и приложив усилия по расшифровке протокола, по которому приставка получает данные о списке каналов. Но это совсем другая история...

    P.S. Перед публикацией я решил запустить скрипт, перебирающий адреса, ещё разок и обнаружил по крайней мере три новых канала:

    #EXTINF:-1,ТНВ Татарстан
    udp://@239.255.2.86:5500
    #EXTINF:-1,Ля Минор
    udp://@239.255.2.233:5500
    #EXTINF:-1,МТС
    udp://@239.255.2.249:5500
    
    Поделиться публикацией

    Комментарии 19

      0
      Я дампил трафик приставки на Ростелекоме, там протокол получения списка каналов работает по http (без шифрования), и отдаёт все каналы с соответствующей ему мультикастной группой (а не только те, на которые оформлена подписка. приставка сама потом не пускает на неоплаченные каналы), потом этот трафик автоматически парсил и получил более-менее вменяемый результат.
      Наверное mplayer (или аналогичные) может сказать, шифрованный канал он получил или нет (в принципе, это не сложно и самому сделать — нужно все пакеты просмотреть на наличия бита в заголовке 188-байтового ТВ пакета). Более того, в служебных таблицах может идти и название канала, и в целом можно автоматизировать получение плейлиста.
      Единственное что неясно (для меня) — как просканировать весь мультикастный диапазон.
        0
        Да, есть такой баг у них…
        из-за этого все собирались шифрование каналов включить )
        но пока не включают.
          0
          Абсолютно точно не знаю, но предполагаю что с шифрованием есть сложности с зоопарком приставок. В т.ч. может быть что нестабильно работают приставки на шифрованных каналах. Более-менее выход, на мой взгляд, это igmp radius authentication на подъездных коммутаторах.
            0
            У меня вообще DSL, какие подъездные коммутаторы )
            Оно конечно можно и на DSLAM на АТС настраивать…

            Зоопарк кстати не такой и большой, в моем городе на вскидку вида 3 приставок всего было распространенных…
        +2
        Самый простой способ: подключаете обычный неуправляемый коммутатор между приставкой и роутером, запускаете на компьютере сниффер (например tcpdump), перебирайте каналы на телевизоре и смотрите трафик в какие мультикаст группы сыпется.
          +2
          Ну вот, все уже продолжительное время пользуются темой, только не афишировали. А теперь закроют :(
            +1
            Как закроют то? На мой взгляд, все что в посте описано, является критичным для функционирования IPTV. Если что-то и прикроют, то им придется прикручивать свои проприетарные костыли, а это врядли целесообразно.
              0
              Зашифруют каналы.
                0
                Ок. Провентилировал этот вопрос — для меня было шоком, что за базовый пакет каналов тоже установлена абонентская плата. Тут в Петрозаводске у основных провайдеров базовый пакет телеканалов бесплатен и доступен всем абонентам при наличии технической возможности. Потому и плейлисты лежат прямо на промо-сайтах посвященных данной услуге. Не ожидал подобного жлобства от МГТС.
                  0
                  На сколько мне не изменяет память, в случае коммерческой эксплуатации телевидерия, оператор обязан сделать несколько федеральных и местных каналов бесплатными и нешифроваными. Это какие-то требования то ли МЧС, то ли роскомнадзора. Ведь даже если вы ставите спутниковую тарелку, некоторые федеральные каналы будут показывать без карточки (россия, нтв, орт)
                    0
                    На спутнике — все платно за исключением пары неинформативных «инфоканалов».
                    То, что, например, Триколор ТВ обещает «бесплатно» — бесплатно только для владельцев оборудования (в т.ч. карты доступа), просто подписка на этот набор каналов — сразу делается на много лет вперед и за ее продление дополнительных денег не берут.
                      0
                      У интернет-провайдеров тоже есть финт ушами — смотреть бесплатные тв-каналы можно бесплатно, только для просмотра надо оплатить услугу доступа к тв-сети.
                        0
                        Ну так да, я и написал в случае коммерческой эксплуатации. То есть платить все равно придется.
              0
              Я через js+vlc plugin плейст составлят, а то провайдер в тестовом режиме и за своим плейлистом не следил. Пришлось свой велосипед делать, а т.к. это все было в браузере, то потом сразу каналы просматривал и названия прописывал.
                0
                Я приверженец ручного подхода — просто генерирую плейлист со всеми возможными каналами и прохожусь по ним в VLC.

                #!/bin/bash
                
                OUTPUT="#EXTINF\n"
                
                for i in $(seq 5 254)
                do
                	OUTPUT="${OUTPUT}#EXTINF:0,Channel ${i}\nudp://@233.49.170.${i}:5000\n"
                done
                
                echo -ne "${OUTPUT}"
                

                Бывает, некоторые каналы открываются не с первого раза, поэтому автоматический подход не всегда срабатывает. Медленно, согласен, зато одного прохода достаточно для того, чтобы найти все доступные каналы.
                  0
                  Проверил твой рецепт — отлично работает. Причём работает одновременно с родной ТВ-приставкой (оно и понятно, но проверить в реальных условиях интересно было). Одна проблема — приходится отдельный кабель тянуть от роутера, от того порта который в режиме бриджа. Так что у меня главный вопрос — как сделать чтобы можно было видео смотреть в локалке, т.е. с тех портов роутера которые тегированые.
                    0
                    Зависит от маршрутизатора, у меня ТВ работает аналогично (не МГТС), решается поднятием на маршрутизаторе интерфейса под нужный VLAN и маршрутом из VLAN в локальную сеть (в этом помогает igmpproxy). Или же udpxy — завернет стриминг в http
                      0
                      Если я правильно понял то для просмотра на компе тв необходим роутер с поддержкой iptv для случая openwrt прошивки необходим igmpproxy и собсно прога на компе для просмотра тв типа iptv player или vlc player с соответствующим плейлистом.
                      Если интересно в частном порядке могу дать ссыль по настройке openwrt и просмотра iptv у провайдера qwerty в Москве.
                      +5
                      Не смотрю эфирные телеканалы уже лет 15 и прекрасно себя чувствую.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.