[mythtv-commits] Ticket #13074: Incorrect EIT CRID IMI processing on split programme segments

MythTV noreply at mythtv.org
Fri Jul 21 00:52:09 UTC 2017


#13074: Incorrect EIT CRID IMI processing on split programme segments
--------------------------------------+---------------------
     Reporter:  lucylangthorne55@…    |      Owner:  dekarl
         Type:  Bug Report - General  |     Status:  new
     Priority:  minor                 |  Milestone:  unknown
    Component:  MythTV - EIT          |    Version:  0.28.1
     Severity:  medium                |   Keywords:
Ticket locked:  0                     |
--------------------------------------+---------------------
 When a programme is split for news, mythtv incorrectly only records a
 random half of the programme since the other half is incorrectly
 marked as a duplicate due to incorrect IMI handling.

 When using EIT, programmes that have a crid that includes an IMI
 (Instance Metadata ID) can be used to identify programmes where a
 single piece of content has been split in to more than one part.

 An example document stating that the split should be considered one
 programme is in
 http://www.freeviewnz.tv/media/1055/freeview_dtt_transmission_rules_2_1.pdf
 which says in §7.1.7:

    "A CRID in the CID shall be a programme CRID (crid type 0x31) with an
 IMI extension. Where two events have the same CRID and IMI value and the
 gap between each event is less than 3 hours (measured from the end of the
 preceding event to the start of the next event) then they shall be
 considered to be segments of a single item of content.  An item of content
 may be split across more than two events as long as the gap between each
 event remains less than 3 hours."


 So using dvbsnoop I can see that my film has:
 {{{
 (Part 1 of film):
     Event_ID: 2364 (0x093c)
     Start_time: 0xe263190000 [= 2017-07-21 19:00:00 (UTC)]
     Duration: 0x0011000 [=  01:10:00 (UTC)]
     ...
             DVB-DescriptorTag: 118 (0x76)  [=
 content_identifier_descriptor]
             descriptor_length: 14 (0x0e)
             crid_type: 49 (0x31)  [= user defined]
             crid_location: 0 (0x00)  [= Carried explicitly within
 descriptor]
             crid_len: 12 (0x0c)
             crid_bytes:
                  0000:  2f 32 35 36 37 32 34 37  38 38 23 31
 /256724788#1
 ...
 (News)
     Event_ID: 2365 (0x093d)
     Start_time: 0xe263201000 [= 2017-07-21 20:10:00 (UTC)]
     Duration: 0x0000500 [=  00:05:00 (UTC)]
 ...
 (Part 2 of film):
     Event_ID: 2366 (0x093e)
     Start_time: 0xe263201500 [= 2017-07-21 20:15:00 (UTC)]
     Duration: 0x0010000 [=  01:00:00 (UTC)]
 ...
             DVB-DescriptorTag: 118 (0x76)  [=
 content_identifier_descriptor]
             descriptor_length: 14 (0x0e)
             crid_type: 49 (0x31)  [= user defined]
             crid_location: 0 (0x00)  [= Carried explicitly within
 descriptor]
             crid_len: 12 (0x0c)
             crid_bytes:
                  0000:  2f 32 35 36 37 32 34 37  38 38 23 31
 /256724788#1
 }}}

 Note that crid and IMI for both parts are identical.

 Sinced the crid is identical, mythtv thinks the two halves of the
 programme are in fact the same identical programme rather than two
 parts of the programme.

 Ideally the broadcaster and spec would have used {{{#}}}1 and {{{#}}}2,
 but that would be far too sensible.

 I have not yet seen a programme split in to three segments, even
 though that is valid according to the above spec, nor a case where
 there isn't exactly one programme in between the parts such as "part1,
 <news>, part2".

 Looking in my database, I noticed that mythtv currently strips the
 IMI.  That means a simple query can not locate such records.

 For full backwards compatibility, we probably can't store the IMI in
 the database programid since it would mean many existing programmes
 would no longer match the same crid. Besides, a programme may be split
 today but not split on a subsequent showing.

 Anyway, a query to show duplicates (since the split is always short so
 we can work around lack of IMI):

 {{{
 select distinct P1.title, P1.partnumber, P1.programid, P1.starttime,
 P1.endtime, P2.starttime, P2.endtime from program P1, program P2 where
 P1.programid <> '' and P1.programid=P2.programid and
 P1.chanid=P2.chanid and P1.starttime < P2.starttime and
 timestampdiff(MINUTE, P1.endtime, P2.starttime) < 15 and
 P1.title not in ('Teleshopping', 'Home Shopping', 'News') and
 P1.starttime > now();
 }}}

 Even though I use EIT, I thought perhaps manually setting partnumber
 to 1 and 2 and parttotal to 2 in the database would work, but it
 didn't work and I assume the scheduler ignores those fields since
 programid is identical and it is mythfrontend that is reconstructing
 the description to contain "(Part 1 of 2)". Plus I haven't looked at
 exactly when ProgramData would overwrite the data anyway but assume
 it only overwrites the whole data if broadcast EIT was marked as
 changed.

 So, I'm not sure exactly how the bug could easily be fixed since it
 wasn't immediately obvious to me how eitcache interacts with the
 program table.

 Since this splitting seems only to be used for movies, perhaps the
 full crid could be put in to seriesid and a fake (but consistent) crid
 (such as crid+start_hour_min) generated for programid so that at least
 "record all" rules would work, on the premise that it's better to
 record too much than to only have half and that certain types of movie
 are always on at the same times in the day. Unfortunately with all the
 +1 hour channels it would mean every film recorded twice, but still
 arguably better than only half a movie.

 I created this bug purely to get it documented since it has annoyed me
 for a few years and I finally got time to look in to it.

--
Ticket URL: <https://code.mythtv.org/trac/ticket/13074>
MythTV <http://www.mythtv.org>
MythTV Media Center


More information about the mythtv-commits mailing list