Покуражимся ( Courage блог)

  • Цитата


    кстати, а почему ты на channelscan решил обратить взор ? а не на reelchannelscan остаться ?


    как ты думаешь ... а чем они отличаются? 8) :rolleyes:

  • ну, channelscan и reelchannelscan - 2 разных плагина от двух авторов - imho
    Первый плагин уже более 2 лет не обновлялся -
    Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
    он у меня, кстати и не собрался


    src/channelscan# make all
    g++ -O2 -Wall -Woverloaded-virtual -fPIC -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"channelscan"' -I/usr/include/freetype2 -I../../../include -I../../../../DVB/include channelscan.c
    channelscan.c:89: error: extra qualification 'cMainMenu::' on member 'ShowSatData'
    make: *** [channelscan.o] Error 1



    ну, а reelchannelscan обновился аж в мае - с ним то мы и работаем. Поэтому, когда Кураж заговорил про channelscan (имея ввиду reelchannelscan) я и насторожился - зачем он перешел на давно не обновляемый channelscan.

  • ээээ - плагин от одних авторов - от reel - только исходные 043 назывались почему то
    chennelscan - хотя при сборке собираются reelchannelscan - отсюда и путаница ))))

  • решил для понимания вопроса о загрузке и редактирования channels.conf в вдр несколько распрямить и упростить извилистый путь
    связанный с channels.conf в качестве подхода к пониманию как добавить в вдр возможность
    1) работы с несколькими ссписками каналов
    2) вставку канала не в конец списка а после текущего канала
    3) вставку метки


    ээээ - что я из всего этого распрямления понял
    - считывается параметр ConfigDirectory
    - считывается файл channels.conf в Channels через Channels.Load который в свою очередь выполняет
    DeleteDuplicateChannels() и ReNumber() (которым в свою очередь нужны и HashChannel GroupSep ChannelSorter которым///
    в-общем дальше не полезу - пока этого достаточно для понимания как производится загрузка channels.conf
    - скидывается Channels в файл либо по таймауту либо после модификации - выполняется Channels.Lock -> Channels.Save -> Channels.Unlock
    в-общем нужна помощь темному - как реализуется Channels.Load Channels.Lock Channels.Save Channels.Unlock ?
    или можно не заморачиваться с поиском а просто ими пользоваться?



    кусок из vdr.c отвечающий за загрузку и сохранение channels.conf


    (комментарии в тексте - мои а так же строка fprintf( ) - хочу отдельно сделать
    тестовый файл для обкатки и понимания как что происходит


    для загрузки выгрузки используются функции Channels.Load Channels.Modified Channels.Lock Channels.Save Channels.Unlock
    Channels.Modified пока не интересует а вот Load Lock Save Unlock пригодятся и находятся таковые в channels.c


    правда только Load и ReNumber



    а это кусок из channels.h - хоть тресни не вижу Lock Save Unlock


  • Цитата


    а это кусок из channels.h - хоть тресни не вижу Lock Save Unlock

    Исходный код
    class cChannels : public cRwLock, public cConfig<cChannel>


    класс cChannel наследует свойства класса cRwLock ... описан в thread.h

    Исходный код
    class cRwLock {
    private:
      pthread_rwlock_t rwlock;
    public:
      cRwLock(bool PreferWriter = false);
      ~cRwLock();
      bool Lock(bool Write, int TimeoutMs = 0);
      void Unlock(void);
      };
  • на 16Е наличествует открытый канал в формате sdtv 544 x 576 h264 - хороший
    полигон для изучения возможности приема таких каналов
    16Е 11294 H 13333-5/6 God TV UK & Ireland MPEG-4 видео пид 2014 аудиопид 3014 E
    записал на дриме фрагмент этого канала и мплэйером попытался его крутить -
    сразу видно что PAFF interlacing is not implemented -
    эти дурацкие PAFF не обрабатываются мплэйром и когда будут - неизвестно
    ну и второе - машинка при раскодировании грузится не-по-детски


  • под виндовс повердвд 7 с h264 крутит ту запись довольно плавно - с загрузкой
    около 70-80% hотя поток и не велик - около 0.8Мбпс


    сорры фор транслит - в виндаh отказал по4ему то переклю4атель раскладок



    черный квадрат вместо видео - потому что в сграбленый экран из видео буфера не сграбилось -
    но поверьте - там была видео картинка ..... если есть желание покрутить эту запись
    у себя - могу куда то положить ее - 16 мегабайт


    ваще всплеск интереса к такому сдтв вызван тем что в таком формате вещают с 40Е
    новых 2 транспондера и провайдер Рикор - с 60Е - правда уже в двб-с2
    но на 40Е пока эти транспондеры у меня не лочаться - вернее изредка лочаться


    у нас там в низу кнопочка, Русский ;)
    Array

  • итак - первым пунктом - возможность загрузки другого файла списка каналов
    пока только при старте вдр - ввел новую опцию -b --bouquet .... загружает
    список каналов из файла с заданным названием ....
    пока только добавленые строки в vdr.c


    потом когда более менее отладится - сделаю нормальный патчик .....


    а счас нужна помощь - есть 2 момента которые для меня пока непонятны
    1) надо внести проверку на наличие файла с каналами и если файл не найден - то
    использовать DEFAULTBOUQUETFILENAME
    2) надо решить идеологически и реализовать это в коде - ввести для каждого файла
    с каналами свой CurrentChannel = и обрабатывать его при загрузке соответствующего списка
    а посему - с моей колокольни - проще всего его держать в самом списке - напрмер
    неким параметром типа [CurrentChannel = 123]
    одно но - проверяльщик валидности списка такую запись не пропускает - а
    использовать вначале двоеточие - типа это метка - не хочется - так как при этом
    в вдр это будет отображаться как метка .....
    и конечно нужен обработчик этого параметра - который бы его считывал - заносил
    в переменную типа Setup.InitialChannel и аналогично бы записывал бы в процессе
    работы в список
    значение текущего канала



    в общем пока изменения крошечные и поэтому работают - запускаю вдр с этой добавочной опцией и все пока работает

    Исходный код
    vdr -b  channels.conf.full


    или

    Исходный код
    vdr -b  channels.conf.FTA


    потом когда уже все заработает - можно наверно в самом вдр сделать загрузку
    нового листа вместо текущего - неким дополнительным меню - но до этого пока как до москвы рачком ))))

  • по первому пункту - проверка наличия файла есть в вдр - правда при отсутствии файла она приводит к сообщению
    vdr: error while reading '/vdr/channels.conf.tes'
    а не загрузке файла по умолчанию - но пока этого достаточно


    по второму пункту - тоже есть продвижка - второй параметр это AllowComments


    Channels.Load(AddDirectory(ConfigDirectory, BouquetFile), false, true)
    который обрабатывается в config.h
    config.h

    Исходный код
    allowComments = AllowComments;
    
    
                    if (allowComments) {
                       char *p = strchr(s, '#');
                       if (p)
                          *p = 0;
                       }


    т/е/ позвозяет вписывать комментарии в текст за #
    все так да не так - при AllowComments = true
    запись типа

    Исходный код
    Zone Europa;POLSAT#4:12284:H:S13.0E:27500:353:354=pol,355=hun:356:1801:10507:113:7900:0

    - содержащая # в теле - приводит к сбою в чтении файла


    к сожалению этот блок с моей колокольни несколько неточно отрабатывает комменты -
    ищет # на любой позиции в строке - а надо только на первой - помогите - как сделать правильно?

  • моя ошибка - тот блок обработки комментов работает правильно - усекает строку -
    отрезает все что в ней следует после # - но так как это не применимо к channels.conf
    по совету старших товарищей сделал еще одну функцию LoadBouquets где комментами
    считается только строка которая начинается с #
    соответственно загружается теперь файл с каналами командой в vdr.c

    Исходный код
    Channels.LoadBouquet(AddDirectory(ConfigDirectory, BouquetFile), true, true) &&


    и обрабатывается блоком в config.h


    в котором моего то всего

    Исходный код
    if (allowComments) {
                       int pos = strchr(s, '#')-s;
                       if (pos == 0)
                          *s = 0;
                       }


    но именно здесь потом можно и вписать блочок по загрузке CurrentChannel

  • после вынесения загрузки списка каналов в отдельный блок LoadBouquet что то стало с нумерацией
    каналов - они все скинулись в 0 .... если же загружать список через функцию Load
    то все нормально нумеруется .... в чем засада пока не ясно ...
    чтобы не заьылось - кусочки кода отвечающие за то на какой канал вдр станет при
    загрузке ....
    vdr.c

    Исходный код
    if (Setup.InitialChannel > 0)
         Setup.CurrentChannel = Setup.InitialChannel;
    
    
      Channels.SwitchTo(Setup.CurrentChannel)


    config.c

    Исходный код
    CurrentChannel = -1;
      InitialChannel = 0;
    
    
      else if (!strcasecmp(Name, "CurrentChannel"))      CurrentChannel     = atoi(Value);
      else if (!strcasecmp(Name, "InitialChannel"))      InitialChannel     = atoi(Value);
    
    
      Store("CurrentChannel",     CurrentChannel);
      Store("InitialChannel",     InitialChannel);


    setup.conf

    Исходный код
    CurrentChannel = 0
    InitialChannel = -1


    при загрузке читается setup.conf и из него эти 2 переменные - если задана не нулевая InitialChannel
    то ее значение присваивается CurrentChannel ... если -1 ... то насройка будет на
    сохраненный в setup.conf CurrentChannel


    а есть еще и LastChannel в которой при нормальной работе содержится номер текущего
    канала .... при нормальной работе он устанавливается в основном цикле vdr.c в 1
    а при ненормальной работе - в 0
    поставил закладку в vdr.c
    fprintf(stderr, "LastChannel '%d'\n", LastChannel);
    перед

    Исходный код
    if (!EITScanner.Active() && cDevice::CurrentChannel() != LastChannel) {
               if (!Menu)
                  Menu = new cDisplayChannel(cDevice::CurrentChannel(), LastChannel >= 0);
               LastChannel = cDevice::CurrentChannel();
               LastChannelChanged = time(NULL);
               }


    и наблюдается следущее
    LastChannel '0'
    LastChannel '8'
    т.е до запуска этого блока LastChannel '0' а потом устанавливается на CurrentChannel


    в-общем Wanted место в котором каналы нумеруются - вознаграждение гарантируется ))))

  • в рамках Summer Of Code 2007 от Google команда ffmpeg выставила и такую тему
    PAFF decoding for H.264/AVC
    Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
    правда никто вроде за это не взялся .... а в девелоперс листе FFmpeg-devel
    тоже обсуждалась эта тема - например эта ветка - пост из середки
    Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
    правда победных реляций я не видел пока

  • в продолжении темы о возможности держать несколько списков каналов в вдр
    пока реализовал только возможность загрузки файла-листа при загрузке вдр
    и взятия канала для начальной настройки из соответствующего файла BouquetFile.idx
    в котором хранится единственная переменная CurrentChannel = NUM
    вообще то удобнее было бы хранить эту переменную прямо в файле списке
    но тогда теряется совместимость с другими вдр - хотя конечно можно
    спрятать переменную за двоеточием - типа это метка - но это не совсем хорошо


    несколько изменил логику работу с переменными CurrentChannel InitialChannel
    которые хранятся в setup.conf и на которые вдр настраивается при включении...
    чтобы не было путаницы - при запуске вдр они вообще не используются )))


    при запуске загружается указанный файл-список и ищется соответсьтвующий файл .idx
    если в нем прописан CurrentChannel то вдр настраивается на него если же файла
    нет или переменная не прописана - настраивается на первый канал в списке - ИМХО
    это самый лучший вариант - никаких кроссов между листами типа сохраненный канал от одного
    списка а сам список совсем другой .... полная прогнозируемость поведения ...


    теперь надо научить вдр сохранять CurrentChannel который он записывает в файл setup.conf
    в соответствующий .idx файл


    патч пока не сделал по 2 причинам - потерял исходный вариант vdr.c ))) и во-вторых он
    никому не нужен ))))

  • к сожалению с драйверами на ТТ3200 на какое то время придется погодить
    автор патча на драйвер Ману laasa at gmx.de обиделся походу что кто то сказал
    что драйвер похож на спагетти и забросил его вообще. было это в конце мая
    - с тех пор ни слуху ни духу (((
    Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.


    Ману же объявился в середине июня и на то что кто то сказал что он собирал
    драйвер из его репозитария + патч от Ласа - в недоумении сказал - а зачем собственно
    этот патч?


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


    а по поводу Рилбоксов - по трезвому размышлению за те 1000 евро что они хотят
    можно собрать отличный комп с теми же возможностями но более универсальный....
    правда у них уже двб-с2 уже рабочий и h264 yfcколько я понимаю- а когда 3200 в вдр
    заработает - даже Самому не известно!

  • вот и неофициальная бетка вдр с поддержкой dvb-s2 вышла


    This is a beta version of vdr which support dvb-s2.
    So this version is able to watch TVHD through a streaming plugin
    (streamdev plugin is include in archive).


    Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.


    The DVB-S2 channels must have 'M8' in modulation field of channels.conf,
    for example:
    ASTRAPROMO_HD:12721:hC23M8:S19.2E:22000:767:768:0:0:10202:1:1119:0



    tested with:
    - linux 2.6.19
    - TT3200 card (manu drivers and laasa patch)


    JLac


    _______________________________________________
    vdr mailing list
    Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.

  • cпасибо за любопытную новость )))
    кстати - там же есть ряд интересных вещей
    Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.

  • воспоминание ...


    итак как запустить streamdev-server c remux


    - собираем streamdev плагин - про патчи лежащие в /patches благополучно забываем


    - прописываем загрузку в командной строке вдр

    Исходный код
    -P'streamdev-server --remux /vdr/remux.sh'


    - куда нибудь кладем скрипт с вызовом внешнего ремуксера - например такой
    он перегоняет в мпег4 с горизонтальным размером 320 - правда ресурсов на
    конверчение в мпег4 надо мама не горюй
    лог mencoder пишется в /tmp/out.log


    пусть он будет в /vdr (путь к нему и указывается в опции '-r' для streamdev-server


    встречались еще такие варианты строк кодировщика

    Исходный код
    cat /tmp/out.avi & /usr/bin/mencoder -ovc lavc -oac lavc -lavcopts vbitrate=400:abitrate=64 -vf scale=420:-2 -o /tmp/out.avi -- - &>/tmp/out.log


    или такое


    или такое

    Bash
    #!/bin/sh
    rm -f /tmp/out.avi
    /usr/bin/mkfifo /tmp/out.avi
    cat /tmp/out.avi & /usr/bin/ffmpeg -i - -f avi -vcodec mpeg4 -b 300 -g 300 -bf 2 -s cif /tmp/out.avi &>/tmp/out.log


    в-общем у мэнкодера опций много - есть чем поиграться


    - запускаем вдр


    - цепляемся к ремуксенному потоку в плэйере который умеет брать поток по сети
    Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу. --- последнее значение - номер канала на вдр
    именно при таком обращении и запускается этот скрипт что можно увилеть
    по появлению /tmp/out.avi /tmp/out.log


    почему то в консоли нет от streamdev-server никаких сообщений - хотя раньше я их видел - типа
    Apr 1 19:26:41 localhost vdr: [21446] Streamdev: Accepted new client (HTTP) 127.0.0.1:38575
    интересно - куда эти логи делись