Ifb. med at søge efter en løsning på EPG mapping problemet som nogen oplever, har jeg leget lidt med Windows Media Center EPG API i .NET. Det har resulteret i følgende lille utility der måske kan hjælpe nogen med at få en oversigt over hvilken type EPG man har mappet per kanal. 

VIGTIGT:

Hvis man anvender HDHomerun eller anden tuner direkte i Medie Center skal man være opmærksom på Inband som default er slået til. D.v.s. de EPG data som kommer ind via DVB signalet lægges ind i databasen, samtidig ser det ud til at kanaler's EPG stream remappes samtidig. Løsningen ser ud til at slå Inband fra på alle de kanaler som man mapper til data fra XMLTV feed.
Man kan teste om man oplever dette fænomen ved at gøre følgende.

1. Mappe alle de ønskede kanaler til XMLTV Feed
2. Checke via dette tool, at der er ONTV logo på disse feeds
3. Start Live-TV og lad det køre noget tid
4. Trykke "Refresh" i dette tool og checke om nogen kanaler er tilbage til en ServiceID ala !Generated!..., hvis de er det er det sandsynligvis Inband data som er årsagen til dette.

(Tak til humperdink for denne observation)


image

Programmet kan hentes her [Downloads: 920]  (Windows 7 version)

Koden anvender namespace Microsoft.MediaCenter.TV.Epg til at vise disse data, første felt er så en fotolkning af teksten “ServiceID”.

Jeg har selv bemærket at man nogen gange skal vælge EPG stream to gange for at det slår igennem, så den sikre måde er gøre følgende steps for at vælge EPG stream.

1. Rediger Kanal –> Rediger Oversigter –> Vælg Brug Oversigter fra Programudbyder
2. Vælg Rediger Oversigter igen, og vælg denne gang den ønskede EPG stream
3. Vælg Gem

Disse steps kan gentages hvis Media Center ikke accepterer det første gang. Man kan så bruge programmet her til at få bekræftet om Media Centeret har gemt indstillingen.


-------------------------------


Til den kode interesserede så er nedenfor VB.NET koden som den i simpel form kan se ud.
Der skal være en reference til c:\windows\ehome\ehRecObj.dll for at tilgå dette namespace.

Dim oLineup As Microsoft.MediaCenter.TV.Epg.Lineup
Dim oCallSigns As System.Collections.Generic.IDictionary(Of String, String)

oLineup = New Lineup
oCallSigns = oLineup.GetCallSigns
For Each oCallSign In oCallSigns
Console.WriteLine(oCallSign)
Next