[mythtv] Bad EIT data for showtimearabia inserted in program table.

dave at 0bits.com dave at 0bits.com
Tue Jul 14 10:16:49 UTC 2009


Hi devs,

Whilst trying to determine why showtime arabia (Nilesat 101) EIT's were
being obliterated with 24hr duration blank entries, i determined the
following (with dvbsnoop). It seems that showtimearabia is send out
streams of empty EIT packets which mythtv eithelper is happily adding to
the program table. Here is sample packets from dvbsnoop:


------------------------------------------------------------
SECT-Packet: 00000002   PID: 18 (0x0012), Length: 30 (0x001e)
Time received: Mon 2009-06-15  10:54:08.284
------------------------------------------------------------
PID:  18 (0x0012)  [= assigned for: DVB Event Information Table (EIT)]

Guess table from table id...
EIT-decoding....
Table_ID: 79 (0x4f)  [= Event Information Table (EIT) - other transport
stream, present/following]
section_syntax_indicator: 1 (0x01)
reserved_1: 1 (0x01)
reserved_2: 3 (0x03)
Section_length: 27 (0x001b)
Service_ID: 560 (0x0230)  [=  --> refers to PMT program_number]
reserved_3: 3 (0x03)
Version_number: 3 (0x03)
current_next_indicator: 1 (0x01)  [= valid now]
Section_number: 0 (0x00)
Last_Section_number: 1 (0x01)
Transport_stream_ID: 5 (0x0005)
Original_network_ID: 2048 (0x0800)  [= Nilesat 101 | Nilesat]
Segment_last_Section_number: 1 (0x01)
Last_table_id: 79 (0x4f)  [= Event Information Table (EIT) - other
transport stream, present/following]

     Event_ID: 0 (0x0000)
     Start_time: 0xd6d4000000 [= 2009-06-14 00:00:00 (UTC)]
     Duration: 0x0235959 [=  23:59:59 (UTC)]
     Running_status: 4 (0x04)  [= running]
     Free_CA_mode: 1 (0x01)  [= streams [partially] CA controlled]
     Descriptors_loop_length: 0 (0x00)

CRC: 2130774259 (0x7f0108f3)
==========================================================

and

------------------------------------------------------------
SECT-Packet: 00000003   PID: 18 (0x0012), Length: 30 (0x001e)
Time received: Mon 2009-06-15  10:54:08.284
------------------------------------------------------------
PID:  18 (0x0012)  [= assigned for: DVB Event Information Table (EIT)]

Guess table from table id...
EIT-decoding....
Table_ID: 79 (0x4f)  [= Event Information Table (EIT) - other transport
stream, present/following]
section_syntax_indicator: 1 (0x01)
reserved_1: 1 (0x01)
reserved_2: 3 (0x03)
Section_length: 27 (0x001b)
Service_ID: 601 (0x0259)  [=  --> refers to PMT program_number]
reserved_3: 3 (0x03)
Version_number: 3 (0x03)
current_next_indicator: 1 (0x01)  [= valid now]
Section_number: 1 (0x01)
Last_Section_number: 1 (0x01)
Transport_stream_ID: 6 (0x0006)
Original_network_ID: 2048 (0x0800)  [= Nilesat 101 | Nilesat]
Segment_last_Section_number: 1 (0x01)
Last_table_id: 79 (0x4f)  [= Event Information Table (EIT) - other
transport stream, present/following]

     Event_ID: 1 (0x0001)
     Start_time: 0xd6d5000000 [= 2009-06-15 00:00:00 (UTC)]
     Duration: 0x0235959 [=  23:59:59 (UTC)]
     Running_status: 1 (0x01)  [= not running]
     Free_CA_mode: 1 (0x01)  [= streams [partially] CA controlled]
     Descriptors_loop_length: 0 (0x00)

CRC: 2860499165 (0xaa7fc0dd)
==========================================================


Notice the Duration:  0x0235959 [=  23:59:59 (UTC)] of this dud EIT
packets for 2 differnet channels (infact it sends these entries out for
*all* channels on this satellite for some reason). Now  mythtv eithelper
happily adds these entries (look for the duration 86399 below which
comes from a EIT_VERBOSE statement i added):

-----------------------------------------------------------
2009-06-27 12:00:45.414 EITHelper: Added 1 events
2009-06-27 12:00:45.777 DTVSM(/dev/dvb/adapter1/frontend0): Time Offset:
-0.777444
2009-06-27 12:00:45.984 EITCache: Loaded 99 entries for channel 5803
2009-06-27 12:00:45.984 EITHelper: Adding event chanid 5803 with title
"", and duration 86399
2009-06-27 12:00:46.217 GM :  new best match LATE SHOW WITH DAVID LETT
with score -167998
2009-06-27 12:00:46.217 GM :  new best match BEING JULIA with score -161998
2009-06-27 12:00:46.217 EIT: reject match[4]: -161998 '' vs. 'BEING JULIA'
2009-06-27 12:00:46.250 EITHelper: Added 1 events
2009-06-27 12:00:46.805 EITHelper: Adding event chanid 5803 with title
"", and duration 86399
2009-06-27 12:00:47.016 EITCache: Loaded 34 entries for channel 3207
2009-06-27 12:00:47.016 EITHelper: Adding event chanid 3207 with title
"Cheating Death", and duration 6000
2009-06-27 12:00:47.053 GM :  new best match MIRNA WA KHALIL with score
-166798
2009-06-27 12:00:47.053 GM :  new best match GAMEAT AL MOSHGHBEEN with
score -165598
2009-06-27 12:00:47.053 EIT: reject match[4]: -165598 '' vs. 'GAMEAT AL
MOSHGHBEEN'
2009-06-27 12:00:47.064 EITHelper: Added 1 events
2009-06-27 12:00:47.117 EITHelper: Adding event chanid 3207 with title
"Snoop Dogg's Father Hood", and duration 1500
2009-06-27 12:00:47.466 GM : Cheating Death new best match Cheating
Death with score 12000
2009-06-27 12:00:47.469 EITHelper: Added 1 events
2009-06-27 12:00:47.872 EITHelper: Added 1 events
2009-06-27 12:00:47.930 EITCache: Loaded 2 entries for channel 4314
2009-06-27 12:00:47.930 EITHelper: Adding event chanid 4314 with title
"", and duration 86399
2009-06-27 12:00:47.937 EITCache: Loaded 37 entries for channel 5804
2009-06-27 12:00:47.937 EITHelper: Adding event chanid 5804 with title
"", and duration 86399
-----------------------------------------------------------

So it seems we need to do something different here for showtime arabia.
I thought this could be implemented in a eitfixup for nilesat, however
the fixup is only to massage the actual eit entry and doesn't provide a
way to shortcircuit and stop the EIT data from being inserted.

I've currently added

         if (!(title == "" && eit->DurationInSeconds(i) == 86399))
before
         db_events.enqueue(event);

in eithelper.cpp - EITHelper::AddEIT(const DVBEventInformationTable
*eit) which fixes this and i don't get dud entries anymore and my WAF
has gone up considerably as NOW/NEXT events weren't getting displayed
previously dues to this 23:59:59 long entry.

I'm not sure this is a good fix, so am asking developers to comment on
the *right way* to fix this issue ? In the aim of making things
sustainable i believe there really should be a preEITfixup and
postEITfixup though maybe only showtimearabia would use the latter ? Or
perhaps a flag i can set at fixup so that the enqueue()d event get's
ignored ?

cheers
D



More information about the mythtv-dev mailing list