Joining Bits Shop
  1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

IPTV EPG (solved)

Discussion in 'Black Hole Epg' started by webdef, Aug 5, 2017.

  1. webdef

    webdef Vu+ Newbie

    Messages:
    3
    Solved: at least in my case but should be valid for all !
    Context:
    My STB plays SAT TV channels with #SERVICE starting with 1: and IPTV channels with #SERVICE starting with 4097:
    Historical context:
    When BH was created, only SAT TV channels exist and the convention of #SERVICE starting with 1: was taken to identify them together with SID, TSID, ONID received from the satellite and stored in the file lamedb.
    In the same spirit, EPG data base is created for #SERVICE starting with 1: (and nothing else).
    Creation of IPTV channels in bouquets:
    The IPTV channel is usually of the form:
    #SERVICE 4097:0:1:1067:0:0:0:0:0:0:http%3a//mystream/750.ts
    where 1067 is just a sequence number in my list of IPTV channels.
    As explained in many forums, there are 2 approaches to get EPG:
    either you modify the SERVICE to introduce SID, TSID and ONID of the same channel on satellite
    #SERVICE 4097:0:19:245B:440:1:C00000:0:0:0:http%3a//mystream/750.ts
    or you create your own EPG with
    <channel id="Rytec ID of the channel">1:0:1:1067:0:0:0:0:0:0:http%3a//dummy.com</channel>
    Note: in this case, you may not use 4097: but only 1: (see historical context).

    Well, after all this stuff ... EPG is still not working for IPTV channels.
    The explanation is the following:
    BH calls the functions of the component EpgList.py to process the EPG requests and that is the problem !
    If the #SERVICE starts with 4097:, nothing will be found in the EPG data base as all references start with 1:.

    The solution is to modify EpgList.py functions like the following (and this should be valid for all images!):

    Original code for single EPG:
    test = [ 'RIBDT', (service.ref.toString(), 0, -1, -1) ]
    self.list = self.queryEPG(test)
    Note: a query on EPG data base is made for 1 "service"

    Modified code for IPTV:
    mywork=service.ref.toString()
    if mywork.startswith("4097:"):
    service2=mywork.replace("4097:","1:",1)
    else:
    service2=mywork
    test = [ 'RIBDT', (service2, 0, -1, -1) ]
    self.list = self.queryEPG(test)

    Original code for multi EPG:
    test = [ (service.ref.toString(), 0, stime) for service in services ]
    self.list = self.queryEPG(test)
    Note: a query on EPG data base is made for all services in "services"

    Modified code for IPTV:
    test=[]
    for service in services:
    mywork=service.ref.toString()
    if mywork.startswith("4097:"):
    service2=mywork.replace("4097:","1:",1)
    else:
    service2=mywork
    test.append((service2, 0, stime))
    test.insert(0, 'X0RIBDTCn')
    self.list = self.queryEPG(test)

    After modification, EpgList.py will be re-compiled automatically.

    Enjoy !!!
     
  2. webdef

    webdef Vu+ Newbie

    Messages:
    3
    Sorry,, forum text suppresses indentation of the code !
    Use proper indentation else it will not compile or compile with errors !
     
  3. webdef

    webdef Vu+ Newbie

    Messages:
    3
    Some improvements !

    When playing an IPTV channel:

    <EPG>: give details on current event

    <EPG> -> <yellow>: give list of events for the day for the channel

    <EPG> -> <blue>: give the current events for all channels of the bouquet

    At this point, <blue>: go forward in time and show events for all channels and <yellow> go backward.

    Recall: customize for Gstreamer 4097. Should be changed into proper code if you use another player !

    Limitations:

    When selecting a bouquet, current events are not shown: problem is identified but need some more Python knowledge to improve !
     

    Attached Files:

Share This Page