Jump to content

Recommended Posts

Posted (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 by stebasha
Posted (edited)

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

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

Скриншот:

post-6333-031836900 1389955802_thumb.png

Edited by shaytan
Posted (edited)

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

Edited by zedsh
Posted (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 видит, но не позволяет ничего из него выбрать.

Скриншот:

post-6333-031836900 1389955802_thumb.png

 

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

Edited by stebasha
Posted

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

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

Posted (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 by stebasha
Posted

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

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

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

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

Posted

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

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

Скриншот:

post-6333-031836900 1389955802_thumb.png

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

Posted

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

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

Posted (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 by stebasha
Posted

....

Transport_stream_ID: 3 (0x0003)

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

....

 

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

Posted

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

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

  • 4 months later...
Posted (edited)

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

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

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

 

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

 

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

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

Edited by shaytan
Posted (edited)

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

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

 

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

Edited by shaytan
  • 1 year later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...