Ярославль


Страницы: (1372) « Первая ... 1290 1291 [1292] 1293 1294 ... Последняя »  ( Перейти к первому непрочитанному сообщению ) Закрытая темаСоздание новой темыСоздание опроса

Ростелеком

ping-85
Дата 2.06.2015 - 09:41
Цитировать сообщение




А оно тебе надо?
***

Профиль
Группа: Пользователи
Сообщений: 356
Пользователь №: 111459
Регистрация: 5.08.2012 - 21:12





to Buzzzzer

Ну уменя не самая последняя сборка Build: 3.9.2827~g477feab~wheezy. Плейлист загоняю следующим скриптом.

Цитата
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#===============================================================================
# m3u2hts.py - Generate TVHeadend 3.x channel/tag configuration files from
# IPTV M3U playlist
#
# © 2012 Gregor Rudolf
# Licensed under the MIT license:
# http://www.opensource.org/licenses/mit-license.php
#===============================================================================
from optparse import OptionParser
import codecs
import re
import os

try:
    import json
except ImportError:
    # old python? easy_install simplejson
    import simplejson as json

PROGNUM = re.compile(r"(\d+) - (.*)")  # #EXTINF:0,1 - SLO 1 -> #1 - num, 2 - ime

CHAN_NUMBERING_GENERATE = 0
CHAN_NUMBERING_DURATION = 1
CHAN_NUMBERING_NAMES = 2

channels = dict()
tags = dict()


def readm3u(infile, removenum, channumbering, inputcodec):
    """
    Read IPTV channels from .M3U file
    @param infile: input file
    @param removenum: try to remove channel numbers from names
    @param channumbering: how to get channel number
    @param inputcodec: encoding of input file
    """

    instream = codecs.open(infile, "Ur", encoding=inputcodec)
   
    urlRegex = re.compile(r"^((?P<schema>.+?)://@?)?(?P<host>.*?)(sad.gif?P<port>\d+?))?$")
    chancnt = 0
    tagcnt = 0
    chname = ''
    chtags = None
    chlanguage = None
    chnumber = None
    chxmltv = None
    chicon = None
    for line in instream.readlines():
        line = line.strip()
        if line.startswith("#EXTINF:"):
            #EXTINF:duration,channel number - channel name
            buff = line[8:].split(',')
            m = PROGNUM.search(buff[1])
            if removenum and m:
                chname = m.group(2)
            else:
                chname = buff[1]
            if m and channumbering == CHAN_NUMBERING_NAMES:
                chnumber = m.group(1)
            elif channumbering == CHAN_NUMBERING_DURATION:
                chnumber = buff[0]
        elif line.startswith('#EXTTV:'):
            #EXTTV:tag[,tag,tag...];language;XMLTV id[;icon URL]
            buff = line[7:].split(';')
            chtags = buff[0].split(',')
            for t in chtags:
                if not t in tags:
                    tagcnt += 1
                    tags[t] = {'num': tagcnt, 'name': t}
            chlanguage = buff[1]
            if chlanguage:
                if not chlanguage in tags:
                    tagcnt += 1
                    tags[chlanguage] = {'num': tagcnt, 'name': chlanguage}
                chtags.append(chlanguage)
            chxmltv = buff[2]
            chicon = buff[3] if len(buff) > 3 else None
        else:
            chgroup = re.search(urlRegex, line).groupdict()
            if not chgroup or not chgroup["schema"]:
                continue
            chancnt += 1
            if channumbering == CHAN_NUMBERING_GENERATE: chnumber = chancnt
            if chname in channels:
                print "%s already exists" % chname
                chname = chname + '.'
            channels[chname] = {'num': chancnt, 'number': chnumber, 'name': chname, 'tags': chtags, 'lang': chlanguage,
                                'ip': chgroup["host"], 'port': chgroup["port"], 'xmltv': chxmltv, 'icon': chicon}
            chname = ''
            chtags = None
            chlanguage = None
            chnumber = None
            chxmltv = None
            chicon = None


def writechannels():
    svcpath = 'iptvservices'
    chnpath = 'channels'
    xmltvpath = "epggrab/xmltv/channels"
    if not os.path.exists(svcpath):
        os.mkdir(svcpath)
    if not os.path.exists(chnpath):
        os.mkdir(chnpath)
    if not os.path.exists(xmltvpath):
        os.makedirs(xmltvpath)
    for channel in channels.values():
        #iptvservices/iptv_?
        jssvc = {'pmt': 0,
                'channelname': channel['name'],
                'port': channel['port'],
                'interface': 'eth2',
                'group': channel['ip'],
                'mapped': 1,
                'pcr': 0,
                'disabled': 0}
        writejson(os.path.join(svcpath, "iptv_" + str(channel['num'])), jssvc)

        #channels/?
        jschan = {'name': channel['name'],
                  'dvr_extra_time_pre': 0,
                  'dvr_extra_time_post': 0}
        if channel['number'] is not None:
            jschan['channel_number'] = channel['number']
        if channel['xmltv'] is not None:
            jschan['xmltv-channel'] = channel['xmltv']
        if channel['tags'] is not None:
            jschan['tags'] = list(tags[x]['num'] for x in channel['tags'])
        if channel['icon'] is not None:
            jschan['icon'] = channel['icon']
        writejson(os.path.join(chnpath, str(channel['num'])), jschan)

        #epg, if defined
        #epggrab/xmltv/channels/?
        if channel['xmltv']:
            xmlid = channel['xmltv']
            jsepg = {
                'name': xmlid,
                'channels': [channel['number']]
            }
            writejson(os.path.join(xmltvpath, xmlid), jsepg)

    path = 'channeltags'
    if not os.path.exists(path):
        os.mkdir(path)
    for tag in tags.values():
        #channeltags/?
        jstag = {'enabled': 1,
                'internal': 0,
                'titledIcon': 0,
                'name': tag['name'],
                'comment': '', 'icon': '',
                'id': tag['num']}
        writejson(os.path.join(path, str(tag['num'])), jstag)



def uuid():
    import uuid

    return uuid.uuid4().hex


def writechannels39():
    xmltvpath = "epggrab/xmltv/channels"
    if not os.path.exists(xmltvpath):
        os.makedirs(xmltvpath)

    tagpath = 'channel/tag'
    if not os.path.exists(tagpath):
        os.makedirs(tagpath)

    chnpath = 'channel/config'
    if not os.path.exists(chnpath):
        os.makedirs(chnpath)

    #channel/tag/UUID
    for tag in tags.values():
        tag['id'] = uuid()
        jstag = {'enabled': 1,
                'internal': 0,
                'titledIcon': 0,
                'name': tag['name'],
                'comment': '',
                'icon': ''}
        writejson(os.path.join(tagpath, tag['id']), jstag)

    #input/iptv
    path = os.path.join('input', 'iptv')
    if not os.path.exists(path):
        os.makedirs(path)
    #input/iptv/config
    writejson(os.path.join(path, 'config'), {
        'uuid': uuid(),
        'skipinitscan': 1,
        'autodiscovery': 0
    })
    #input/iptv/networks/uuid()
    path = os.path.join(path, 'networks', uuid())
    if not os.path.exists(path):
        os.makedirs(path)
    writejson(os.path.join(path, 'config'), {
        'networkname': 'IPTV network',  # Network name
        'skipinitscan': 1,  # Skip initial scan
        'autodiscovery': 0, # Network discovery
        'idlescan': 0,      # Idle scan
        'max_streams': 2,  # Max input streams
        'max_bandwidth': 0, # Max bandwidth (Kbps)
        'max_timeout': 10  # Max timeout (seconds)
    })
    #input/iptv/networks/uuid()/muxes
    path = os.path.join(path, 'muxes')
    if not os.path.exists(path):
        os.mkdir(path)
    #one mux and service for each channel
    for channel in channels.values():
        muxid = uuid()
        muxpath = os.path.join(path, muxid)
        if not os.path.exists(muxpath):
            os.mkdir(muxpath)
        jsmux = {
            'iptv_url': "udp://@%s:%s" % (channel['ip'], channel['port']),
            'iptv_interface': 'eth2',
            'iptv_atsc': 0,
            'iptv_svcname': channel['name'],
            'iptv_muxname': channel['name'],
            'iptv_sname': channel['name'],
            'enabled': 1,
            'scan_result': 2  # mark scan result (1 - ok, 2 - failed)
        }
        #input/iptv/networks/uuid()/muxes/uuid()/config file
        writejson(os.path.join(muxpath, 'config'), jsmux)
        #input/iptv/networks/uuid()/muxes/uuid()/services/uuid()
        svcpath = os.path.join(muxpath, 'services')
        if not os.path.exists(svcpath):
            os.mkdir(svcpath)
        #TODO: create empty service with id 1 or don't
        if False:
            svcid = uuid()
            jssvc = {
                'sid': 1,  # guess service id
                'svcname': channel['name'],
                'name': channel['name'],
                'dvb_servicetype': 1,
                'enabled': 1
            }
            writejson(os.path.join(svcpath, svcid), jssvc)
        else:
            svcid = None

        #channel/config
        chanid = uuid()
        jschan = {
            'name': channel['name'],
            'dvr_pre_time': 0,
            'dvr_pst_time': 0,
            'services': [svcid]
        }
        if channel['number'] is not None:
            jschan['number'] = int(channel['number'])
        if channel['tags'] is not None:
            jschan['tags'] = list(tags[x]['id'] for x in channel['tags'])
        if channel['icon'] is not None:
            jschan['icon'] = channel['icon']
        writejson(os.path.join(chnpath, chanid), jschan)

        #epg
        #epggrab/xmltv/channels/#
        if channel['xmltv'] is not None:
            xmlid = channel['xmltv']
        else:
            xmlid = channel['name']
        jsepg = {
            'name': xmlid,
            'channels': [chanid]
        }
        writejson(os.path.join(xmltvpath, chanid), jsepg)


def writejson(filename, obj):
    """
    Export obj to filename in JSON format
    @param filename: output file
    @param obj: object to export
    """
    outstream = codecs.open(filename, "w", encoding='utf-8')
    json.dump(obj, outstream, indent=4, ensure_ascii=False)
    outstream.close()


def main():
    par = OptionParser(usage="%prog [options] inputfile",
                      description="Generate TVHeadend 3.x channel/tag configuration files from IPTV M3U playlist")
    par.add_option('-r', '--removenum', action='store_true', help=u'remove program numbers from names')
    par.add_option('-n', '--numbering', type='int', default=0,
                  help=u'program numbers are generated(0), determined from duration(1) or extracted from program names(2)')
    par.add_option('-c', '--codec', action='store', dest='codec', default='cp1250',
                  help=u'input file encoding [default: %default]')
    par.add_option('--newformat', action='store_true',
                  help=u'generate TVHeadend 3.9+ compatible configuration files (experimental)')
    opt, args = par.parse_args()
    if len(args) == 1:
        readm3u(args[0], opt.removenum, opt.numbering, opt.codec)
        writechannels39() if opt.newformat else writechannels()
        print("OK")
    else:
        par.print_help()


if __name__ == '__main__':
    main()


Далее все зависит от версии tvheadend. Для моей мне приходится дополнительно просканировать все потоки. С EPG все просто ни каких лишних телодвижений, не понб где я его качал но там тоже скрипт на bash который должен лежать в /usr/bin/tv_grab_ru

Цитата
#!/bin/bash
dflag=
vflag=
cflag=
if (( $# < 1 ))
then
#  cat ~/.xmltv/tv_grab_file.xmltv
#  cat ~/.xmltv/*.xmltv
  wget -qO - http://www.teleguide.info/download/new3/xmltv.xml.gz | gunzip
  exit 0
fi

for arg
do
    delim=""
    case "$arg" in
    #translate --gnu-long-options to -g (short options)
      --description) args="${args}-d ";;
      --version) args="${args}-v ";;
      --capabilities) args="${args}-c ";;
      #pass through anything else
      *) [[ "${arg:0:1}" == "-" ]] || delim="\""
          args="${args}${delim}${arg}${delim} ";;
    esac
done

#Reset the positional parameters to the short options
eval set -- $args

while getopts "dvc" option
do
    case $option in
        d)  dflag=1;;
        v)  vflag=1;;
        c)  cflag=1;;
        \?) printf "unknown option: -%s\n" $OPTARG
            printf "Usage: %s: [--description] [--version] [--capabilities] \n" $(basename $0)
            exit 2
            ;;
    esac >&2
done

if [ "$dflag" ]
then
  printf "tv_grag_ru Grab TV listings for Russian channels\n"
fi
if [ "$vflag" ]
then
  printf "0.1\n"
fi
if [ "$cflag" ]
then
  printf "baseline\n"
fi

exit 0


ну как то во так.
PMПисьмо на e-mail пользователю
Top
Buzzzzer
Дата 2.06.2015 - 10:11
Цитировать сообщение




OMG!
*****

Профиль
Группа: Пользователи
Сообщений: 2408
Пользователь №: 53280
Регистрация: 16.06.2010 - 20:05





ping-85
Ну я точно так же и делаю smile.gif и версия такая же (Build: 3.9.2827~g477feab~trusty)
Правда не все EPG каналов грабятся, пока не переназначишь.
иконки каналов и группы делить приходится заново на Основые\Познавательные\Музон\Шлак\Детские\etc заново, что напрягает немного.
С иконками я вроде решил пропатчив скрипт и назвав pngшки так же как каналы, а вот с группами фигово. из за них в cron уже не пихнуть обновлятор листа unsure.gif ну или дописывать скрипт нужно...

Это сообщение отредактировал Buzzzzer - 2.06.2015 - 10:12
PMПисьмо на e-mail пользователю
Top
дядя_Саша
Дата 2.06.2015 - 11:01
Цитировать сообщение




Unregistered












Писать целую программу, чтобы телевизор посмотреть... Вы не страдаете извращениями, вы ими наслаждаетесь.
Top
Buzzzzer
Дата 2.06.2015 - 11:17
Цитировать сообщение




OMG!
*****

Профиль
Группа: Пользователи
Сообщений: 2408
Пользователь №: 53280
Регистрация: 16.06.2010 - 20:05





Цитата (дядя_Саша @ 2.06.2015 - 12:01)
Писать целую программу, чтобы телевизор посмотреть... Вы не страдаете извращениями, вы ими наслаждаетесь.

Это всё же лучше, чем за деньги то вместо переключения канала втыкать в рекламу говнотеки с древнючим, как жопа мамонта, контентом за конский ценник...Или зависоны ловить...

Это не только телик. Это еще и фототека, радио, музыка, качалка и сразу просмотр торрентов\youtube\и тд, игрулек типа сеги и денди, домашнее файлохранилище и тд и тп.
Вообщем всё в одном.

Это сообщение отредактировал Buzzzzer - 2.06.2015 - 11:21
PMПисьмо на e-mail пользователю
Top
ping-85
Дата 2.06.2015 - 11:18
Цитировать сообщение




А оно тебе надо?
***

Профиль
Группа: Пользователи
Сообщений: 356
Пользователь №: 111459
Регистрация: 5.08.2012 - 21:12





Зато удобно. Все есть, можно и писать по раписанию и красивая вебморда.
PMПисьмо на e-mail пользователю
Top
дядя_Саша
Дата 2.06.2015 - 13:07
Цитировать сообщение




Unregistered












Я одно понимаю - ваши линухи - система исключительно для программистов. Любое действие в ней начинается с написания новой программы.
Top
Roman
Дата 2.06.2015 - 18:33
Цитировать сообщение




люблю кофе и табак
********

Профиль
Группа: Организаторы СП
Сообщений: 29027
Пользователь №: 252
Регистрация: 4.08.2003 - 19:19





линухи не линухи, а вот когда инета нет, очень не привычно становится.

Телеком, отдай интернет. Менделеева 25, почините аварию..... билайн сволочь плохо работает.... свисток после шнурка не катит.....
PMПисьмо на e-mail пользователю
Top
дядя_Саша
Дата 2.06.2015 - 21:52
Цитировать сообщение




Unregistered












Цитата (Roman @ 2.06.2015 - 18:33)
когда инета нет, очень не привычно становится.

Как ты этот комплимент под видом неудовольствия подал. Не то плохо, что инета нет, а то что ощущения от таких событий давно забыты. Верните человеку полезную привычку, а то он вредными обзаведётся.
Top
Roman
Дата 3.06.2015 - 19:05
Цитировать сообщение




люблю кофе и табак
********

Профиль
Группа: Организаторы СП
Сообщений: 29027
Пользователь №: 252
Регистрация: 4.08.2003 - 19:19





дядя_Саша кстати да, РТ молодцы, инет с сентября не отваливался, а вчера отвалился хз почему. Зато монтеры и агитаторы от конкурентов ходили вчера по дому. Надеюсь что это не они попортили мой инет.
PMПисьмо на e-mail пользователю
Top
дядя_Саша
Дата 3.06.2015 - 22:14
Цитировать сообщение




Unregistered












Цитата (Roman @ 3.06.2015 - 19:05)
дядя_Саша кстати да, РТ молодцы, инет с сентября не отваливался, а вчера отвалился хз почему. Зато монтеры и агитаторы от конкурентов ходили вчера по дому. Надеюсь что это не они попортили мой инет.

Ну что ты, что ты. Все агенты следят за Михасём Саакашвили. А у тебя просто паранойя.

Но если ты кого-нибудь поймаешь за порчей чего-нибудь, я никому не расскажу, что это ты им морду набил. Мысленно тоже по каждому два раза пну.
Top
MayFlovver
Дата 4.06.2015 - 12:19
Цитировать сообщение




Новичок
*

Профиль
Группа: Новички
Сообщений: 2
Пользователь №: 119354
Регистрация: 5.11.2012 - 15:13





Я подключён к РТК к тарифу "Верная Цена 2" за 550 рублей, 70/100 + IPTV 2 пакета каналов, но фактически скорость выше 20-ти с небольшим не поднимается, предложили перейти на Билайн (300 р. 100 м/бит в секунду)? Стоит ли связываться с Билайном? Или остаться на РТК?
PMПисьмо на e-mail пользователю
Top
joun
Дата 4.06.2015 - 12:21
Цитировать сообщение




В малиновых штанах
*****

Профиль
Группа: Пользователи
Сообщений: 1552
Пользователь №: 50555
Регистрация: 20.04.2010 - 09:20





MayFlovver
Техподдержка в курсе ваших проблем? Измеряли напрямую или через Wi-Fi?
PMПисьмо на e-mail пользователю
Top
Roman
Дата 4.06.2015 - 18:10
Цитировать сообщение




люблю кофе и табак
********

Профиль
Группа: Организаторы СП
Сообщений: 29027
Пользователь №: 252
Регистрация: 4.08.2003 - 19:19





MayFlovver
роутер поди тухловат, меряй по шнурку. у меня телеком все четко отдает.

Это сообщение отредактировал Roman - 4.06.2015 - 18:21
PMПисьмо на e-mail пользователю
Top
Sedan1
Дата 9.06.2015 - 21:41
Цитировать сообщение




geronimo
*******

Профиль
Группа: Пользователи
Сообщений: 16568
Пользователь №: 62672
Регистрация: 30.11.2010 - 18:04





ребят, проблем с DNS нет ни у кого? страницы открываются норм?
PM
Top
Fisher
Дата 10.06.2015 - 06:48
Цитировать сообщение




В малиновых штанах
*****

Профиль
Группа: Пользователи
Сообщений: 2336
Пользователь №: 161496
Регистрация: 19.06.2014 - 06:43





Нормально
PM
Top

Опции темы Страницы: (1372) « Первая ... 1290 1291 [1292] 1293 1294 ... Последняя » Закрытая темаСоздание новой темыСоздание опроса

 



[ Время генерации скрипта: 0.1206 ]   [ Использовано запросов: 15 ]   [ GZIP включён ]



Яндекс.Метрика

Правила Ярпортала (включая политику обработки персональных данных)

Все вопросы: yaroslavl@bk.ru