Jump to content
Калькуляторы

Проблемы с CherryEpg CherryEpg Samsung Epg NIT SDT

Всем привет такая вот проблема запустил с помощью черри епг, на приставки показывает на телевизорах нет, подскажите куда копать, данные вроде все прописаны прикладываю кусок скрипта

Данные брал прям с 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 by stebasha

Share this post


Link to post
Share on other sites

CherryEPG генерирует только данные EIT таблицы.

Как вам удалось эти данные добавить в поток на станции, у нас EMR 3.0 поток 233.171.254.254 с EIT видит, но не позволяет ничего из него выбрать.

Скриншот:

post-6333-031836900 1389955802_thumb.png

Edited by shaytan

Share this post


Link to post
Share on other sites

Откройте файл cherryEPG.pl, или шаблон, из которого он формируется. Найдите там бесконечный цикл отправки. В нём есть инструкция sleep(интервал). Уменьшите интервал.

Edited by zedsh

Share this post


Link to post
Share on other sites

Откройте файл 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 видит, но не позволяет ничего из него выбрать.

Скриншот:

post-6333-031836900 1389955802_thumb.png

 

данные NIT я вещаю отдельно другим софтом там передаются таблицы SID NIT и так далее они работают точно. все телевизоры нормально с ними справляются

Edited by stebasha

Share this post


Link to post
Share on other sites

usleep( $gap); попробуйте менять $gap, прописав его просто числом.

Share this post


Link to post
Share on other sites

usleep( $gap); попробуйте менять $gap, прописав его просто числом.

А сколько он должен быть ? по формуле получается 909191

Share this post


Link to post
Share on other sites

Странно. У меня с дефолтными таймерами EMR все прекрасно видит, и телевизоры ,соответственно, тоже.

А на скрине у shaytan четко видно, что EMR потока с EIT не видит! Если бы видела, был бы разворачивающийся "+", и присутствовал бы 18 pid.

Share this post


Link to post
Share on other sites

Получается формула рассчитывает в микросекундах что равно 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 by stebasha

Share this post


Link to post
Share on other sites

у меня my $gap = ceil( $interval / $mtsCount * 1000);

В System set в EMR есть интервалы поиска.

Refresh PSI/SI Setting. Там можно настроить такой интервал, за который гарантированно таблицу поймаешь.

А вообще просто используйте pid map и всё. Без разницы, что он не показывает EIT в мультиплексоре.

Share this post


Link to post
Share on other sites

CherryEPG генерирует только данные EIT таблицы.

Как вам удалось эти данные добавить в поток на станции, у нас EMR 3.0 поток 233.171.254.254 с EIT видит, но не позволяет ничего из него выбрать.

Скриншот:

post-6333-031836900 1389955802_thumb.png

данные в поток добавляются PID Mapping (ПИД МАППИНГОМ), то есть зеркальный проброс минуя мультиплексор

Share this post


Link to post
Share on other sites

Всем привет такая вот проблема запустил с помощью черри епг, на приставки показывает на телевизорах нет, подскажите куда копать, данные вроде все прописаны прикладываю кусок скрипта

Данные брал прям с 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

Share this post


Link to post
Share on other sites

Все равно не пашет вот дамп пакета не пойму 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 by stebasha

Share this post


Link to post
Share on other sites

....

Transport_stream_ID: 3 (0x0003)

Original_network_ID: 47111 (0xb807) [= >>ERROR: not (yet) defined... Report!<<]

....

 

А ID сети 0xb807 точно тот, что нужен?

Share this post


Link to post
Share on other sites

Да у нас в NIT таблице вещается такой индефикатор, пробывал даже менять на первый все результата не принесло

Share this post


Link to post
Share on other sites

У меня вроде заработало и на самсунгах.

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 должен быть таким же, как в текущем потоке.

Share this post


Link to post
Share on other sites

Вот такой вопрос.

Сейчас вишней генерируем EIT который содержит програмку для всех каналов на всех транспортных потоках.

Соответственно закидываем эту таблицу во все транспортные потоки.

 

Столкнулись с проблемкой, что в одном из городов у абонентов стоят старенькие приставки которые входят в ступор, жутко тормозят и не реагируют на пульт, при включении EPG. На всем остальном оборудовании таких проблем нет.

 

Есть идея генерировать отдельную EIT для каждого транспортного потока только с програмкой для каналов которые идут в этом транспортном потоке.

Каким "правильным" способом это можно сделать на вишне?

Edited by shaytan

Share this post


Link to post
Share on other sites

EIT идёт в отдельном служебном пиде с жёстко закреплённым номером.

Share this post


Link to post
Share on other sites

EIT идёт в отдельном служебном пиде с жёстко закреплённым номером.

Это понятно, PID 18. Вопрос был про генерацию отдельных потоков с последующей ретрансляцией их в QAM потоки, каждый в свой.

 

Вопрос уже решил, все работает.

Edited by shaytan

Share this post


Link to post
Share on other sites

как решили проблему? На emr аналогичная проблема

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this