Page 4 of 6 FirstFirst ... 23456 LastLast
Results 46 to 60 of 85

Thread: [HOW-TO] TVheadend - видеомагнитофон для IPTV на роутере

  1. #46
    Join Date
    Nov 2006
    Location
    Russia, Moscow
    Posts
    3,640
    Quote Originally Posted by ryzhov_al View Post
    ...
    Time shifting отключен по той причине, что в нашем GCC нет некоторых атомарных ф-ций:
    Code:
    ./build.linux/src/timeshift/timeshift_filemgr.o: In function `atomic_add_u64':
    /home/BuildRepo/openwrt_trunk/build_dir/target-mipsel-linux-gnu/tvheadend-3.2.3-20130209/src/atomic.h:36: undefined reference to `__sync_fetch_and_add_8'
    /home/BuildRepo/openwrt_trunk/build_dir/target-mipsel-linux-gnu/tvheadend-3.2.3-20130209/src/atomic.h:36: undefined reference to `__sync_fetch_and_add_8'
    /home/BuildRepo/openwrt_trunk/build_dir/target-mipsel-linux-gnu/tvheadend-3.2.3-20130209/src/atomic.h:36: undefined reference to `__sync_fetch_and_add_8'
    ./build.linux/src/timeshift/timeshift_writer.o: In function `atomic_add_u64':
    /home/BuildRepo/openwrt_trunk/build_dir/target-mipsel-linux-gnu/tvheadend-3.2.3-20130209/src/atomic.h:36: undefined reference to `__sync_fetch_and_add_8'
    collect2: ld returned 1 exit status
    make[3]: *** [build.linux/tvheadend] Error 1
    , а в имеющейся libatomicops их тоже нет. Хотя у меня есть чувство, что я не там ищу
    Народ уже на это налетел в Raspberry Pi - http://www.lonelycoder.com/redmine/boards/5/topics/7421 но там ARM. Эта бага/недоделка зарегистрирована в багзилле 56300, но официальна решена только в gcc 4.8(в 4.7 ещё нет). В 4.7 довольно несложно сбекпортить, но я не хотел бы без критической необходимости(а её вроде пока нет) мигрировать тулчейн на 4.7 до выхода 4.7.3, а с бэкпортом в gcc 4.6 придётся повозиться - много изменений и я не знаю потрохов gcc (требуемые функции определены в gcc/config/mips/sync.md).

    Внимание вопрос - а надо ли?
    Last edited by lly; 14-02-2013 at 19:53.

  2. #47
    Quote Originally Posted by lly View Post
    Внимание вопрос - а надо ли?
    На мой взгляд — нет. Слишком жирно из-за одной софтины весь тулчейн править. Уж лучше посмотрю возможность сторонней реализации необходимых ф-ций, если они не завязаны на внутренности GCC. Точнее даже из-за одной фичи: time shift ощутят только владельцы самодельных плееров на xmbc/openelec и клиентом tvheadend на борту.

    Обновил tvheadend до последней версии, обновил инструкцию на первой странице. Крайне желательно снести старые конфиги из /opt/etc/tvheadend перед апгрейдом.

    Насколько я понял, у tvheadend проблема записи HD-звука давняя и решается выбором контейнера ts или raw вместо matroska.

    На картинке ниже — график потребления памяти процессом tvheadend на RT-N66U при загрузке ТВ-программы для всех 340 каналов с teleguide.info. По оси абсцисс — время в секундах, по оси ординат — mapped память в килобайтах:



    Картинка поможет вам ответить на ряд вопросов:
    • сколько времени занимает загрузка программы для N каналов,
    • сколько каналов вы можете подгружать из ТВ программы на вашем роутере,
    • когда ждать «вылета» tvheadend,
    и прочих.

    gSpot, не бросайте свой скрипт
    Last edited by Omega; 15-02-2013 at 20:11. Reason: 2 posts merged

  3. #48
    Во первых, огромное спасибо всем приложившим руки и главное, голову! Я правда еще разбираюсь, но... уже предвкушаю какие красивые вещи можно вытворять. Один вопрос, пока... В настройках есть выбор русского языка, но он что-то не появляется... Просто по русски было бы ну совсем красиво!
    RT-N66U Tomato Firmware 1.28.0000 MIPSR2-109 K26 USB AIO-64K
    WL-500W: 1.9.2.7-d-r2624 + huawei 353 - дачный интернет

  4. #49
    Только на порядок предпочитаемых звуковых дорожек при многоканальном звуке.

  5. #50
    Quote Originally Posted by ryzhov_al View Post
    Только на порядок предпочитаемых звуковых дорожек при многоканальном звуке.
    Добрый день. Спасибо, понятно. Теперь еще одна непонятка всплыла... Что-то я не увидел параметра сдвига времени в програме. Ну ладно с "Орбитами" можно выкрутиться, а как быть с каналами, которые вещают только по московскому времени, например "Вести". Переводить часы роутера на московское время или я чего недопонимаю?
    RT-N66U Tomato Firmware 1.28.0000 MIPSR2-109 K26 USB AIO-64K
    WL-500W: 1.9.2.7-d-r2624 + huawei 353 - дачный интернет

  6. #51
    Quote Originally Posted by skuwakin View Post
    Что-то я не увидел параметра сдвига времени в програме. Ну ладно с "Орбитами" можно выкрутиться, а как быть с каналами, которые вещают только по московскому времени, например "Вести". Переводить часы роутера на московское время или я чего недопонимаю?
    Лучше поискать локальную ТВ-программу:
    Quote Originally Posted by ryzhov_al View Post
    В принципе, число грабберов ТВ-программ ничем не ограничено, вы можете поискать в сети те, что отражают ваш эфир и ваш часовой пояс.
    Ещё проще, наверно, править sed'ом налету часовой пояс в имеющемся граббере. Tvheadend, судя по strace, опирается на /etc/TZ.

    PS помню, что когда жил во Владивостоке и Севастополе меня самого подбешивало то, что некоторый софт не имеет настройки тайм-зоны.

  7. #52
    Quote Originally Posted by skuwakin View Post
    Добрый день. Спасибо, понятно. Теперь еще одна непонятка всплыла... Что-то я не увидел параметра сдвига времени в програме. Ну ладно с "Орбитами" можно выкрутиться, а как быть с каналами, которые вещают только по московскому времени, например "Вести". Переводить часы роутера на московское время или я чего недопонимаю?
    Не помню умеет ли tvh пересчитывать время передач самостоятельно, но могу предложить версию граббера с пересчётом времени в передачах на awk. Для своего рекордера писал подобный парсер, хотя потом отказался от этой идеи в виду пожирания лишних ресурсов и, в целом, ненужности (я в Москве обитаю и программа с teleguide.info не требует дополнительных преобразований). В последствии реализовал пересчёт часового пояса в EPG на клиентской стороне средствами Java Script, это значительно удобнее, можно в любой момент "пересчитать" программу c любым доступным сдвигом без новой обработки xmltv. Но коли уж "быдлокод" написан, то чего добру пропадать...
    В общем, предлагаю добавить в пакет tvheadend два граббера: первый без пересчёта времени (tv_grab_wl500g_info - предыдущий, без awk. Это позволит тем, кому не нужен пересчёт времени, избежать лишних трат системных ресурсов), второй с пересчётом часового пояса (tv_grab_wl500g_info_toffset)...

    tv_grab_wl500g_info (немного переписал его, но суть осталась прежней):
    Code:
    #!/bin/sh
    
    # Please edit /opt/etc/tv_grab_wl500g_info.cfg first!
    # Place desired channel id's there, one number per line.
    # You may see channel id list by running tv_grab_wl500g_info --configure
    
    IDLIST="/opt/etc/tv_grab_wl500g_info.cfg"
    XMLTV_FILE="/opt/tmp/xmltv"
    XMLTV_SRC="http://www.teleguide.info/download/new3/xmltv.xml.gz"
    SEDCMD="/bin/sed"
    WGETCMD="/usr/bin/wget"
    GZIPCMD="/bin/gunzip"
    
    
    GetXmltv () {
    
        $WGETCMD -q -O - $XMLTV_SRC | $GZIPCMD > $XMLTV_FILE
        [ -e "$XMLTV_FILE" ] || exit 1;
    
    }
    
    
    case $1 in
    
        "--configure")
            GetXmltv
            $SEDCMD -n '/<channel/p;/<display-name/p' $XMLTV_FILE
            rm -f $XMLTV_FILE
        ;;
        "--version")
            echo "This is a tv_grab_wl500g_info v.0.1 grabber"
            echo "for russian www.teleguide.info site. Made by wl500g.info community."
        ;;
        "--description")
            echo "teleguide.info grabber by wl500g.info community"
        ;;
        "--capabilities")
            echo "teleguide.info"
        ;;
        *)
            GetXmltv
    
            printf "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE tv SYSTEM \"xmltv.dtd\">\n<tv>\n"
    
            while read chanid
            do
    
                $SEDCMD -n -e "
                /id=\"${chanid}\"/,/<\/channel\>/p
                /channel=\"${chanid}\"/,/programme\>/{
                /<[/]\{0,1\}programme/{
                p
                b end
                }
                /<[/]\{0,1\}title/{
                p
                b end
                }
                b end
                }
                :end
                " $XMLTV_FILE
    
            done < $IDLIST
    
            printf "</tv>\n"
    
            rm -f $XMLTV_FILE
    
        ;;
    
    esac
    
    
    exit 0;
    tv_grab_wl500g_info_toffset:
    Code:
    #!/bin/sh
    
    # Please edit /opt/etc/tv_grab_wl500g_info.cfg first!
    # Place desired channel id's there, one number per line.
    # You may see channel id list by running tv_grab_wl500g_info --configure
    
    IDLIST="/opt/etc/tv_grab_wl500g_info.cfg"
    OFFSET_FILE="/opt/etc/tv_grab_wl500g_info.offset"
    XMLTV_FILE="/opt/tmp/xmltv"
    XMLTV_SRC="http://www.teleguide.info/download/new3/xmltv.xml.gz"
    SEDCMD="/bin/sed"
    AWKCMD="/usr/bin/awk"
    WGETCMD="/usr/bin/wget"
    GZIPCMD="/bin/gunzip"
    
    
    if [ -e "$OFFSET_FILE" ]; then
        TIME_OFFSET=`$SEDCMD -n '1p' $OFFSET_FILE`
    else
        TIME_OFFSET="0"
    fi
    
    
    GetXmltv () {
    
        $WGETCMD -q -O - $XMLTV_SRC | $GZIPCMD > $XMLTV_FILE
        [ -e "$XMLTV_FILE" ] || exit 1;
    
    }
    
    
    case $1 in
    
        "--configure")
            GetXmltv
            $SEDCMD -n '/<channel/p;/<display-name/p' $XMLTV_FILE
            rm -f $XMLTV_FILE
        ;;
        "--version")
            echo "This is a tv_grab_wl500g_info v.0.1 grabber"
            echo "for russian www.teleguide.info site. Made by wl500g.info community."
        ;;
        "--description")
            echo "teleguide.info grabber by wl500g.info community"
        ;;
        "--capabilities")
            echo "teleguide.info"
        ;;
        *)
            GetXmltv
    
            printf "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE tv SYSTEM \"xmltv.dtd\">\n<tv>\n"
    
            while read chanid
            do
    
                $SEDCMD -n -e "
                /id=\"${chanid}\"/,/<\/channel\>/p
                /channel=\"${chanid}\"/,/programme\>/{
                /<[/]\{0,1\}programme/{
                p
                b end
                }
                /<[/]\{0,1\}title/{
                p
                b end
                }
                b end
                }
                :end
                " $XMLTV_FILE | $AWKCMD -v chanid="$chanid" -v TIME_OFFSET="$TIME_OFFSET" '
                    function toDD(_val) {
                        if(length(_val) == 1) return "0"_val;
                        else return _val;
                    }
                    {
                        if($0 ~ "<programme") {
                            edate=match($0, "stop=\"");
                            eyear=substr($0, edate+6, 4); emonth=substr($0, edate+10, 2); eday=substr($0, edate+12, 2); ehour=substr($0, edate+14, 2); ehour=TIME_OFFSET+ehour; emin=substr($0, edate+16, 2);
                            emonth+=0;
                            if(ehour > 23) {ehour-=24; eday++}
                            else if(ehour < 0) {ehour+=24; eday--};
                            leapyear=eyear%4;
                            if(leapyear == 0) feb=29; else feb=28;
                            montharray[1]=31; montharray[2]=feb; montharray[3]=31; montharray[4]=30; montharray[5]=31; montharray[6]=30; montharray[7]=31; montharray[8]=31; montharray[9]=30; montharray[10]=31; montharray[11]=30; montharray[12]=31;
                            emdays=montharray[emonth];
                            if(eday > emdays) {eday-=emdays; emonth++};
                            if(eday <= 0 && emonth == "1") {emonth--; eday+=emdays}
                            else if(eday <= 0 && emonth != "1") {emdays=montharray[emonth-1]; emonth--; eday+=emdays};
                            if(emonth <= 0) {emonth+=12; eyear--}
                            else if(emonth > 12) {emonth-=12; eyear++};
                            sdate=match($0, "start=\"");
                            syear=substr($0, sdate+7, 4); smonth=substr($0, sdate+11, 2); sday=substr($0, sdate+13, 2); shour=substr($0, sdate+15, 2); shour=TIME_OFFSET+shour; smin=substr($0, sdate+17, 2);
                            smonth+=0;
                            if(shour > 23) {shour-=24; sday++}
                            else if(shour < 0) {shour+=24; sday--};
                            smdays=montharray[smonth];
                            if(sday > smdays) {sday-=smdays; smonth++};
                            if(sday <= 0 && smonth == "1") {smonth="12"; sday+=31}
                            else if(sday <= 0 && smonth != "1") {smdays=montharray[smonth-1]; smonth--; sday+=smdays};
                            if(smonth <= 0) {smonth+=12; syear--}
                            else if(smonth > 12) {smonth-=12; syear++};
                            print "<programme start=\"" syear toDD(smonth) toDD(sday) toDD(shour) smin "00 +0400\" stop=\"" eyear toDD(emonth) toDD(eday) toDD(ehour) emin "00 +0400\" channel=\"" chanid "\">";
                        }
                        else if($0 ~ "<channel" || $0 ~ "</channel>" || $0 ~ "<display-name" || $0 ~ "<icon" || $0 ~ "<url" || $0 ~ "<title" || $0 ~ "</title>" || $0 ~ "</programme") print $0;
                    }'
    
            done < $IDLIST
    
            printf "</tv>\n"
    
            rm -f $XMLTV_FILE
    
        ;;
    
    esac
    
    
    exit 0;
    Файл /opt/etc/tv_grab_wl500g_info.offset должен содержать значение сдвига часового пояса для передач. Например:
    ко времени каждой передачи прибавляется 2 часа:
    Code:
    2
    от времени передач отнимается 3 часа:
    Code:
    -3
    время остаётся неизменным:
    Code:
    0
    Естественно, при песчёте времени передач учитывается не только час, но и день(включая кол-во дней в феврале), месяц, год.

    Думаю, что практичнее использовать для определения значения сдвига именно отдельный файл, чтобы юзеры не лазили шаловливыми ручками в сам скрипт граббера.

    Файл со списком xmltv-id необходимых каналов - /opt/etc/tv_grab_wl500g_info.cfg - используется также как и прежде.

    Протестируйте пожалуйста. После приведённых выше графиков утилизации памяти от ryzhov_al, я даже не пытаюсь ставить tvh на свой WL-500gp .

    Quote Originally Posted by ryzhov_al View Post
    gSpot, не бросайте свой скрипт
    Ох, скриншоты там кошмарны, это довольно старая версия, практически чистый html . Сейчас всё изрядно обросло ajax'ом и jquery. Я забросил идею публикации этого дела, а само по себе решение функционирует у меня уже три года и, в некотором смысле, прошло несколько эволюционных этапов. В общем-то, я использую свой старый WL-500, помимо его прямых задач, лишь в качестве рекордера iptv, поэтому и справляется он весьма сносно с этой задачей.
    Attached Files Attached Files
    Last edited by gSpot; 17-02-2013 at 18:36. Reason: опечатка в скрипте

  8. #53
    ryzhov_al, Вы меня опередили

  9. #54
    Join Date
    Feb 2013
    Location
    Биробиджан
    Posts
    18
    Только вчера заметил, что версия изменилась. Хочу сказать большое спасибо товарищу ryzhov_al за труды.
    Все отлично работает, звук на HD каналах есть, парсер работает гораздо шустрее, xbmc грузит список каналов и епг практически мгновенно (на старой версии очень медленно было), единственное на одном канале звук периодически пропадает, но это проблема этой версии программы, на неттопе так же было.
    Хочу рассказать о классной фишке, которая есть в новой версии - автоматический рекордер. Он ищет необходимые вам программы в епг и добавляет таймеры записи для них. Вкладка Digital Video Recorder -Automatic Recorder.
    Title (Regexp) - название телепередачи, по которому будет производится поиск (указывать точное название учитывая регистр).
    Channel - канал, если оставить пустым поиск по всем каналам
    Weekdays - день недели, пригодится, если например в понедельник телепередачу показывают в первый раз, а во вторник повторяют, выбираем только понедельник и два раза одно и тоже не запишется.
    Starting Around - примерное время начала телепередачи, если выставить например 10.00, то поиск будет во временном промежутке 9.45-10.15, если оставить пустым, то весь день.
    Создав правило один раз программа будет автоматически искать соответствия в при обновлении епг и создавать таймеры на запись нужных вам передач.
    Last edited by Dext; 18-02-2013 at 05:05.

  10. #55
    Мужики, огромное ВСЕМ спасибо! Классную фичу запустили на наших зверьках! Правда непонятки еще есть. Например, не появляется прогррамма для некоторых выбранных каналов, хотя их номера в cfg выставлены верно. Но потом еще поковыряюсь, може че и найду (пойму). Еще раз ВСЕМ респект и уважуха!
    RT-N66U Tomato Firmware 1.28.0000 MIPSR2-109 K26 USB AIO-64K
    WL-500W: 1.9.2.7-d-r2624 + huawei 353 - дачный интернет

  11. #56
    Quote Originally Posted by lly View Post
    Народ уже на это налетел в Raspberry Pi - http://www.lonelycoder.com/redmine/boards/5/topics/7421 но там ARM. Эта бага/недоделка зарегистрирована в багзилле 56300, но официальна решена только в gcc 4.8(в 4.7 ещё нет). В 4.7 довольно несложно сбекпортить, но я не хотел бы без критической необходимости(а её вроде пока нет) мигрировать тулчейн на 4.7 до выхода 4.7.3, а с бэкпортом в gcc 4.6 придётся повозиться - много изменений и я не знаю потрохов gcc (требуемые функции определены в gcc/config/mips/sync.md).
    Вопрос закрыт, авторы сделали workaround.

    gSpot, Dext, обновлённые грабберы вложу вместе с очередным обновлением. Теперь нам ничего, кроме роутерных ресурсов, не мешает включить Time Shift.

  12. #57
    Обновил, последняя версия в репозитории: time shifting включен, image cache и ffmpeg отключены, обновлённые грабберы в комплекте.

  13. #58
    Join Date
    Feb 2013
    Location
    Биробиджан
    Posts
    18
    Quote Originally Posted by ryzhov_al View Post
    Обновил, последняя версия в репозитории: time shifting включен, image cache и ffmpeg отключены, обновлённые грабберы в комплекте.
    Не долгим было счастье, у меня time shifting почему-то работает только один раз - всмысле ставишь паузу, буфер пишется, при снятии с паузы все воспроизводится (нагрузка на роутер минимальная), жму стоп, включаешь другой канал, паузу и буфер уже не пишется, жмешь плей, воспроизводится пара секунд и изображение замирает. После рестарта tvh та же история.
    Может попробуете скомпилировать последний релиз, а не тесовую версию? https://github.com/tvheadend/tvheadend/tree/release/3.4
    Хотя... может и не в версии дело...
    Last edited by Dext; 25-02-2013 at 14:58.

  14. #59
    Quote Originally Posted by Dext View Post
    Хотя... может и не в версии дело...
    Посмотрел, не в этом. Time shift активно пилится, в частности последний фикс timeshift: fix bug that can cause failure when seeking hits start of file у нас включен, а толку — нет.

  15. #60
    Join Date
    Feb 2013
    Location
    Биробиджан
    Posts
    18
    Сейчас сидел, пытался понять в чем проблема, похоже что неправильно работает механизм определения максимального времени и размера буфера. В логах сначало появляется using timeshift buffer (60 mins), затем ts 1 buffer full. При установке галочек на unlimited тайм сшифт вроде работает нормально, но надо еще потестировать. Позже отпишусь.

Page 4 of 6 FirstFirst ... 23456 LastLast

Similar Threads

  1. Вопросы по работе IPTV (EMF & WMF)
    By theMIROn in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 119
    Last Post: 29-03-2015, 14:18
  2. Настройка IPTV на роутере Asus RT-N16/N66U/AC66U
    By Lion in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 246
    Last Post: 14-03-2015, 20:10
  3. ebtables и multicast iptv по wi-fi
    By snark in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 85
    Last Post: 12-12-2014, 13:34
  4. IPTV (multicast) и Wi-Fi
    By Vitaly_k in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 259
    Last Post: 09-03-2013, 14:21
  5. Settings for IPTV through this router
    By Tellus1 in forum WL-500gP Tutorials
    Replies: 16
    Last Post: 17-10-2010, 21:56

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •