stebasha Posted January 17, 2014 Posted January 17, 2014 (edited) Всем привет такая вот проблема запустил с помощью черри епг, на приставки показывает на телевизорах нет, подскажите куда копать, данные вроде все прописаны прикладываю кусок скрипта Данные брал прям с QAM потока анализатором Promax. <? // ловим ошибки ini_set('log_errors', 1); ini_set('error_log', 'error_log'); ini_set('display_errors', 1); ini_set('error_reporting', E_ALL); // увеличиваем время работы скрипта до 120 сек (по умолчанию на сервере 30 сек - недостаточно для парсинга большого количества каналов) ini_set('max_execution_time', 120); $dtime = 0; // коррекция $networkID = "0xb807"; // id сети $channels = array( // sid - serviceID, tsid - transportstreamID "viasat-tv1000" => array('sid' => 6400, 'tsid' => 3), "viasat-action" => array('sid' => 1950, 'tsid' => 3), "tv3russia" => array('sid' => 840, 'tsid' => 1004) ); $uid = 1; $includeEITreq = ""; $includeIFreq = array(); $buf = ""; foreach($channels as $ch=>$val){ $includeEITreq .= "\$myEpg->addEit( 18, {$val['sid']}, {$networkID}, {$val['tsid']}, {$uid}, 3*8, 1, \"{$ch}\") || die( \"Adding of rule failed\");\n"; $includeIFreq[] = "if( \$program eq \"{$ch}\") {\n\$event->{uid} = {$uid}; \n\$event->{service_id} = {$uid};\n}"; $page = file_get_contents("http://www.programma.tv/3.001/day/{$ch}/" . date("Ymd")); $page = str_replace(array("\r", "\n", "\t"), " ", $page); preg_match_all("/<p:item(.*?)timeOrigin=\"(.*?)\"(.*?)title=\"(.*?)\"/i", $page, $match); $data = array_combine($match[2], $match[4]); $i = 0; foreach($data as $time=>$title){ $ftime = isset($match[2][$i+1]) ? $match[2][$i+1] - $time : 1800; $title = str_replace(array("„","“","«", "»", """), "'", $title); $title = str_replace(array("–","—"), "-", $title); $title = str_replace("…", "...", $title); $buf .= "\"{$ch}\",\"" . date("d.m.Y H:i:s",$time-3600) . "\",{$ftime},\"{$title}\",\"\"\n"; $i++; } $uid++; } echo iconv("UTF-8", "ISO-8859-5", $buf); $cherryfile = file_get_contents("cherryEPG.tmp"); // открываем шаблон файла cherryEPG.pl $cherryfile = str_replace("<includeEITreq>", $includeEITreq, $cherryfile); $cherryfile = str_replace("<includeIFreq>", implode("els", $includeIFreq), $cherryfile); file_put_contents("/usr/src/cherryepg/cherryEPG.pl", $cherryfile); Edited January 17, 2014 by stebasha Вставить ник Quote
shaytan Posted January 17, 2014 Posted January 17, 2014 (edited) CherryEPG генерирует только данные EIT таблицы. Как вам удалось эти данные добавить в поток на станции, у нас EMR 3.0 поток 233.171.254.254 с EIT видит, но не позволяет ничего из него выбрать. Скриншот: Edited January 17, 2014 by shaytan Вставить ник Quote
zedsh Posted January 19, 2014 Posted January 19, 2014 (edited) Откройте файл cherryEPG.pl, или шаблон, из которого он формируется. Найдите там бесконечный цикл отправки. В нём есть инструкция sleep(интервал). Уменьшите интервал. Edited January 19, 2014 by zedsh Вставить ник Quote
stebasha Posted January 20, 2014 Author Posted January 20, 2014 (edited) Откройте файл cherryEPG.pl, или шаблон, из которого он формируется. Найдите там бесконечный цикл отправки. В нём есть инструкция sleep(интервал). Уменьшите интервал. нашел только в ringelspiel.pl такие строки # calculate the waiting time between playing chunks of 7 packets in micro seconds my $gap = ceil( $interval / $mtsCount * 7 * 1000); # play packets of 7 x 188bytes while ($packetCounter < $mtsCount) { my $chunkCount = $mtsCount-$packetCounter; $chunkCount = 7 if $chunkCount > 7; send( $target, substr( $mts, $packetCounter * 188, $chunkCount * 188), 0, $portaddr); $packetCounter += $chunkCount; usleep( $gap); Как понимаю вот это уменьшать my $gap = ceil( $interval / $mtsCount * 7 * 1000); вопрос только на сколько ? Данные формулы interval = 30000 mtsCount = 231 gap = 909091 CherryEPG генерирует только данные EIT таблицы. Как вам удалось эти данные добавить в поток на станции, у нас EMR 3.0 поток 233.171.254.254 с EIT видит, но не позволяет ничего из него выбрать. Скриншот: данные NIT я вещаю отдельно другим софтом там передаются таблицы SID NIT и так далее они работают точно. все телевизоры нормально с ними справляются Edited January 20, 2014 by stebasha Вставить ник Quote
zedsh Posted January 20, 2014 Posted January 20, 2014 usleep( $gap); попробуйте менять $gap, прописав его просто числом. Вставить ник Quote
stebasha Posted January 20, 2014 Author Posted January 20, 2014 usleep( $gap); попробуйте менять $gap, прописав его просто числом. А сколько он должен быть ? по формуле получается 909191 Вставить ник Quote
digi Posted January 20, 2014 Posted January 20, 2014 Странно. У меня с дефолтными таймерами EMR все прекрасно видит, и телевизоры ,соответственно, тоже. А на скрине у shaytan четко видно, что EMR потока с EIT не видит! Если бы видела, был бы разворачивающийся "+", и присутствовал бы 18 pid. Вставить ник Quote
stebasha Posted January 20, 2014 Author Posted January 20, 2014 (edited) Получается формула рассчитывает в микросекундах что равно 1 секунде вполне нормальное время Вот пример SDT 3 58 13 1970 0 0 4 1 0x48 1 "SCTS" "028 Viasat Nature" 1110 0 0 4 1 0x48 1 "SCTS" "029 ▒▒▒ ▒▒▒▒▒▒▒" 1950 1 1 4 1 0x48 1 "SCTS" "030 TV1000 Action East" 6400 1 1 4 1 0x48 1 "SCTS" "031 TV 1000 East" 6410 0 0 4 1 0x48 1 "SCTS" "032 Viasat Explorer" 6490 0 0 4 1 0x48 1 "SCTS" "033 Viasat History" 720 0 0 4 1 0x48 1 "SCTS" "103 Nash Futbol" 6800 0 0 4 1 0x48 1 "SCTS" "034 Viasat Sport" 7080 0 0 4 1 0x48 1 "SCTS" "035 TV1000 Ru ▒▒▒▒" 728 0 0 4 1 0x48 1 "SCTS" "036 Discovery World" 729 0 0 4 1 0x48 1 "SCTS" "037 Discovery Science" 730 0 0 4 1 0x48 1 "SCTS" "038 Discovery Travel" 732 0 0 4 1 0x48 1 "SCTS" "039 Extreme Sport" Тестирую на Viasat поэтому EPG поставил 1 на нем пример NIT для потока 0x0003 0x0103 2 0x41 13 1970 1 1110 1 1950 1 6400 1 6410 1 6490 1 720 1 6800 1 7080 1 728 1 729 1 730 1 732 1 0x44 0x08020000 2 5 0x069520 15 Edited January 20, 2014 by stebasha Вставить ник Quote
zedsh Posted January 20, 2014 Posted January 20, 2014 у меня my $gap = ceil( $interval / $mtsCount * 1000); В System set в EMR есть интервалы поиска. Refresh PSI/SI Setting. Там можно настроить такой интервал, за который гарантированно таблицу поймаешь. А вообще просто используйте pid map и всё. Без разницы, что он не показывает EIT в мультиплексоре. Вставить ник Quote
alexaaa Posted January 21, 2014 Posted January 21, 2014 CherryEPG генерирует только данные EIT таблицы. Как вам удалось эти данные добавить в поток на станции, у нас EMR 3.0 поток 233.171.254.254 с EIT видит, но не позволяет ничего из него выбрать. Скриншот: данные в поток добавляются PID Mapping (ПИД МАППИНГОМ), то есть зеркальный проброс минуя мультиплексор Вставить ник Quote
alexaaa Posted January 21, 2014 Posted January 21, 2014 Всем привет такая вот проблема запустил с помощью черри епг, на приставки показывает на телевизорах нет, подскажите куда копать, данные вроде все прописаны прикладываю кусок скрипта Данные брал прям с QAM потока анализатором Promax. <? // ловим ошибки ini_set('log_errors', 1); ini_set('error_log', 'error_log'); ini_set('display_errors', 1); ini_set('error_reporting', E_ALL); // увеличиваем время работы скрипта до 120 сек (по умолчанию на сервере 30 сек - недостаточно для парсинга большого количества каналов) ini_set('max_execution_time', 120); $dtime = 0; // коррекция $networkID = "0xb807"; // id сети $channels = array( // sid - serviceID, tsid - transportstreamID "viasat-tv1000" => array('sid' => 6400, 'tsid' => 3), "viasat-action" => array('sid' => 1950, 'tsid' => 3), "tv3russia" => array('sid' => 840, 'tsid' => 1004) ); $uid = 1; $includeEITreq = ""; $includeIFreq = array(); $buf = ""; foreach($channels as $ch=>$val){ $includeEITreq .= "\$myEpg->addEit( 18, {$val['sid']}, {$networkID}, {$val['tsid']}, {$uid}, 3*8, 1, \"{$ch}\") || die( \"Adding of rule failed\");\n"; $includeIFreq[] = "if( \$program eq \"{$ch}\") {\n\$event->{uid} = {$uid}; \n\$event->{service_id} = {$uid};\n}"; $page = file_get_contents("http://www.programma.tv/3.001/day/{$ch}/" . date("Ymd")); $page = str_replace(array("\r", "\n", "\t"), " ", $page); preg_match_all("/<p:item(.*?)timeOrigin=\"(.*?)\"(.*?)title=\"(.*?)\"/i", $page, $match); $data = array_combine($match[2], $match[4]); $i = 0; foreach($data as $time=>$title){ $ftime = isset($match[2][$i+1]) ? $match[2][$i+1] - $time : 1800; $title = str_replace(array("„","“","«", "»", """), "'", $title); $title = str_replace(array("–","—"), "-", $title); $title = str_replace("…", "...", $title); $buf .= "\"{$ch}\",\"" . date("d.m.Y H:i:s",$time-3600) . "\",{$ftime},\"{$title}\",\"\"\n"; $i++; } $uid++; } echo iconv("UTF-8", "ISO-8859-5", $buf); $cherryfile = file_get_contents("cherryEPG.tmp"); // открываем шаблон файла cherryEPG.pl $cherryfile = str_replace("<includeEITreq>", $includeEITreq, $cherryfile); $cherryfile = str_replace("<includeIFreq>", implode("els", $includeIFreq), $cherryfile); file_put_contents("/usr/src/cherryepg/cherryEPG.pl", $cherryfile); Программа EPG должна быть в кодировке ANSI чтобы понимали телевизоры, и многие современные LG не работают с EPG, только старые модели, Samsung, Philips без проблем. Вот вам рабочий конфиг cherryEPG.txt Вставить ник Quote
stebasha Posted January 21, 2014 Author Posted January 21, 2014 (edited) Все равно не пашет вот дамп пакета не пойму SID NIT TSID PID приставки видят все а телевизоры нет, время автоматом на них выставляется из потока нормальное Смущает в первой строке TS-Packet: 00000260 PID: (Unkown PID) неизвестный пид почему ? так и должно быть ? В оборудовании стоит пропускать все из потока, т.е. если приставки видят то не фильтруется не чего телевизоры нормально воспринимают таблицы NIT и SDT TS-Packet: 00000260 PID: (Unkown PID), Length: 188 (0x00bc) from file: eit.ts ------------------------------------------------------------ Sync-Byte 0x47: 71 (0x47) Transport_error_indicator: 0 (0x00) [= packet ok] Payload_unit_start_indicator: 1 (0x01) [= Packet data starts] transport_priority: 0 (0x00) PID: 18 (0x0012) [= DVB Event Information Table (EIT)] transport_scrambling_control: 0 (0x00) [= No scrambling of TS packet payload] adaptation_field_control: 1 (0x01) [= no adaptation_field, payload only] continuity_counter: 3 (0x03) [= (sequence ok)] Payload: (len: 184) ==> pointer_field: 0 (0x00) ==> Section table: 78 (0x4e) [= Event Information Table (EIT) - actual transport stream, present/following] Data-Bytes: 0000: 00 4e f0 50 19 00 c5 01 01 00 03 b8 07 01 50 00 .N.P..........P. 0010: 0c dd 66 00 00 00 02 00 00 20 35 4d 33 72 75 73 ..f...... 5M3rus 0020: 2e 10 00 05 bf de e1 db d5 d4 dd d8 d9 20 d7 d0 ............. .. 0030: dd d0 d2 d5 e1 2e 20 28 c1 c8 b0 2c 20 d4 e0 d0 ...... (..., ... 0040: dc d0 2c 20 32 30 30 32 29 20 28 31 36 2b 29 00 .., 2002) (16+). 0050: a1 de bb 45 ff ff ff ff ff ff ff ff ff ff ff ff ...E............ 0060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ 0070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ 0080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ 0090: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ 00a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ 00b0: ff ff ff ff ff ff ff ff ........ ========================================================== TS sub-decoding (1 packet(s) stored for PID 0x0012): ===================================================== TS contains Section... SI packet (length=83): PID: 18 (0x0012) [= assigned for: DVB Event Information Table (EIT)] Guess table from table id... EIT-decoding.... Table_ID: 78 (0x4e) [= Event Information Table (EIT) - actual transport stream, present/following] section_syntax_indicator: 1 (0x01) reserved_1: 1 (0x01) reserved_2: 3 (0x03) Section_length: 80 (0x0050) Service_ID: 6400 (0x1900) [= --> refers to PMT program_number] reserved_3: 3 (0x03) Version_number: 2 (0x02) current_next_indicator: 1 (0x01) [= valid now] Section_number: 1 (0x01) Last_Section_number: 1 (0x01) Transport_stream_ID: 3 (0x0003) Original_network_ID: 47111 (0xb807) [= >>ERROR: not (yet) defined... Report!<<] Segment_last_Section_number: 1 (0x01) Last_table_id: 80 (0x50) [= Event Information Table (EIT) - actual transport stream, schedule] Event_ID: 12 (0x000c) Start_time: 0xdd66000000 [= 2014-01-21 00:00:00 (UTC)] Duration: 0x0020000 [= 02:00:00 (UTC)] Running_status: 1 (0x01) [= not running] Free_CA_mode: 0 (0x00) [= unscrambled] Descriptors_loop_length: 53 (0x35) DVB-DescriptorTag: 77 (0x4d) [= short_event_descriptor] descriptor_length: 51 (0x33) ISO639_2_language_code: rus event_name_length: 46 (0x2e) event_name: "..▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒. (▒Ȱ, ▒▒▒▒▒, 2002) (16+)" -- Charset: ISO/IEC 8859 special table text_length: 0 (0x00) text_char: "" CRC: 2715728709 (0xa1debb45) Edited January 21, 2014 by stebasha Вставить ник Quote
Tracert Posted January 21, 2014 Posted January 21, 2014 .... Transport_stream_ID: 3 (0x0003) Original_network_ID: 47111 (0xb807) [= >>ERROR: not (yet) defined... Report!<<] .... А ID сети 0xb807 точно тот, что нужен? Вставить ник Quote
stebasha Posted January 23, 2014 Author Posted January 23, 2014 Да у нас в NIT таблице вещается такой индефикатор, пробывал даже менять на первый все результата не принесло Вставить ник Quote
zedsh Posted January 23, 2014 Posted January 23, 2014 У меня вроде заработало и на самсунгах. NIT: NID=43001,ONID=43001,TSID=17001 Network_Name=KPLUSTV Stream_Desc: Service_List_Desc: SID:Type(у меня 22 для каналов, 2 для радио) Cable_Delivery_System_Desc TDT/TOT должны быть выставлены верно (UTC+смещение), Прописанный в EIT TSID должен быть таким же, как в текущем потоке. Вставить ник Quote
shaytan Posted June 18, 2014 Posted June 18, 2014 (edited) Вот такой вопрос. Сейчас вишней генерируем EIT который содержит програмку для всех каналов на всех транспортных потоках. Соответственно закидываем эту таблицу во все транспортные потоки. Столкнулись с проблемкой, что в одном из городов у абонентов стоят старенькие приставки которые входят в ступор, жутко тормозят и не реагируют на пульт, при включении EPG. На всем остальном оборудовании таких проблем нет. Есть идея генерировать отдельную EIT для каждого транспортного потока только с програмкой для каналов которые идут в этом транспортном потоке. Каким "правильным" способом это можно сделать на вишне? Edited June 18, 2014 by shaytan Вставить ник Quote
Ivan_83 Posted June 19, 2014 Posted June 19, 2014 EIT идёт в отдельном служебном пиде с жёстко закреплённым номером. Вставить ник Quote
shaytan Posted June 19, 2014 Posted June 19, 2014 (edited) EIT идёт в отдельном служебном пиде с жёстко закреплённым номером. Это понятно, PID 18. Вопрос был про генерацию отдельных потоков с последующей ретрансляцией их в QAM потоки, каждый в свой. Вопрос уже решил, все работает. Edited June 19, 2014 by shaytan Вставить ник Quote
zavndw Posted December 17, 2015 Posted December 17, 2015 как решили проблему? На emr аналогичная проблема Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.