Difference between revisions of "Archive:MythTV PVR Client/DVB-EIT-categories"

From Official Kodi Wiki
Jump to navigation Jump to search
m (RogueScholar moved page MythTV PVR/DVB-EIT-categories to Add-on:MythTV PVR Client/DVB-EIT-categories: Parent page changed namespaces, moving subpage to match)
(Fix dead-end page status and wikify appropriate content)
Line 1: Line 1:
XBMC PVR and the MythTV addon only supports DVB-SI EIT categories. In case you get your guide data from other sources (like xmltv), the genre names show up as ''Other/Unknown'' and you will not get a colored EPG. MythTV (MythFrontend and MythWeb) however supports colors other categories better.
{{Mininav|[[Add-on:MythTV PVR Client]]}}


This page describes an approch for getting Kodi to recognize your categories by replacing the categorys in the MythTV database by the corresponding DVB-SI EIT categories.
Kodi [[PVR]] and the [[Add-on:MythTV PVR Client|MythTV add-on]] have support for [[w:Digital Video Broadcasting#Encryption and metadata|Digital Video Broadcasting-Service Information (DVB-SI)]] Event Information Table (EIT) categories only. In case you get your guide data from other sources (such as [http://wiki.xmltv.org/index.php/Main_Page XMLTV]), the genre names show up as ''Other/Unknown'' and you will not get a colored Electronic Program Guide (EPG). [[MythTV PVR|MythTV]] ([https://www.mythtv.org/wiki/Mythfrontend MythFrontend] and [https://www.mythtv.org/wiki/MythWeb MythWeb]), however, supports a more comprehensive category colorization scheme.


You need to setup MythTV to run a wrapper script as <code>mythfilldatabase</code> replacement. This wrapper script will load a <code>epg.sql</code> that takes care of the category adaptions. Since the categories depend on the source of your guide, you will have to adapt <code>epg.sql</code> to match your needs.
This page describes an approach for getting Kodi to recognize your categories by replacing the categories in the MythTV database with the corresponding DVB-SI EIT categories.
 
You need to setup MythTV to run a wrapper script as a <code>mythfilldatabase</code> replacement. This wrapper script will load a <code>epg.sql</code> database file that manages the category conversions. Since the categories depend on the source of your guide, you will have to adapt <code>epg.sql</code> to match your data.


== Mythfilldatabase replacement ==
== Mythfilldatabase replacement ==
MythTV backend needs to be configured to use <code>/usr/local/bin/my-mythfilldatabase</code> as replacement:
The MythTV backend needs to be configured to use <code>/usr/local/bin/my-mythfilldatabase</code> as a replacement:
<syntaxhighlight lang="bash" enclose="div">
<syntaxhighlight lang="shell">
#!/bin/bash
#!/usr/bin/env bash


export LANG=de_DE.UTF-8
LANG="en_GB.UTF-8"
export LC_ALL=de_DE.UTF-8
LC_ALL="en_GB.UTF-8"
typeset -gx LANG LC_ALL


/usr/bin/mythfilldatabase --loglevel debug -- "--days 18"
if /usr/bin/mythfilldatabase --loglevel debug -- "--days 18"; then
RES=$?
  mysql -h htpc -u mythtv -p mythtv -D mythconverg </usr/local/bin/epg.sql
if [ $RES -eq 0 ]
else
then mysql -h htpc -u mythtv -p mythtv -D mythconverg < /usr/local/bin/epg.sql
  exit 1
fi
fi
exit $RES
</syntaxhighlight>
</syntaxhighlight>


== Source specific categories ==
== Source specific categories ==
The SQL file <code>/usr/local/bin/epg.sql</code> does the category conversion.
The SQL database file <code>/usr/local/bin/epg.sql</code> performs the category conversion. Below are some examples for the conversion script; most likely they will have to be adapted to match your guide source.
Here are some examples for the conversion script. Most likely they will have to be adapted to match your guide source.


You can get all currently used categories from your database with the following command:
You can get all currently used categories from your database with the following command:
 
<syntaxhighlight lang="shell">
<syntaxhighlight lang="bash" enclose="div">
mysql --host=htpc --user=mythtv --password=mythtv --database=mythconverg <<<"SELECT DISTINCT category FROM program;"
$ /usr/bin/mysql --host=htpc --user=mythtv --password=mythtv --database=mythconverg <<< "SELECT DISTINCT category FROM program;"
</syntaxhighlight>
</syntaxhighlight>


=== Germany (Commercial EPG provider http://www.epgdata.com/) ===
=== Germany (epgdata.com) ===
<syntaxhighlight lang="sql" enclose="div">
<syntaxhighlight lang="sql">
/*
/*
 
* See DVB-SI spec (ETSI EN 300 468 V1.11.1 (2010-04), page 40 at
See DVB-SI spec (ETSI EN 300 468 V1.11.1 (2010-04), page 40, http://www.etsi.org/deliver/etsi_en/300400_300499/300468/01.11.01_60/en_300468v011101p.pdf)
* <https://www.etsi.org/deliver/etsi_en/300400_300499/300468/01.11.01_60/en_300468v011101p.pdf>
 
*
Undefined
* Undefined
0x0 0x0 to 0xF undefined content
* 0x0 0x0 to 0xF undefined content
 
*
Movie/Drama:
* Movie/Drama:
 
*
0x1 0x0 movie/drama (general)
* 0x1 0x0 movie/drama (general)
0x1 0x1 detective/thriller
* 0x1 0x1 detective/thriller
0x1 0x2 adventure/western/war
* 0x1 0x2 adventure/western/war
0x1 0x3 science fiction/fantasy/horror
* 0x1 0x3 science fiction/fantasy/horror
0x1 0x4 comedy
* 0x1 0x4 comedy
0x1 0x5 soap/melodrama/folkloric
* 0x1 0x5 soap/melodrama/folkloric
0x1 0x6 romance
* 0x1 0x6 romance
0x1 0x7 serious/classical/religious/historical movie/drama
* 0x1 0x7 serious/classical/religious/historical movie/drama
0x1 0x8 adult movie/drama
* 0x1 0x8 adult movie/drama
0x1 0x9 to 0xE reserved for future use
* 0x1 0x9 to 0xE reserved for future use
0x1 0xF user defined
* 0x1 0xF user defined
 
*/
*/


UPDATE program SET category = 'Movie' WHERE category IN ('filme','action','kurzfilm');
UPDATE program SET category = 'Movie' WHERE category IN ('filme','action','kurzfilm');
Line 68: Line 67:


/*
/*
 
* News/Current affairs:
News/Current affairs:
*
 
* 0x2 0x0 news/current affairs (general)
0x2 0x0 news/current affairs (general)
* 0x2 0x1 news/weather report
0x2 0x1 news/weather report
* 0x2 0x2 news magazine
0x2 0x2 news magazine
* 0x2 0x3 documentary
0x2 0x3 documentary
* 0x2 0x4 discussion/interview/debate
0x2 0x4 discussion/interview/debate
* 0x2 0x5 to 0xE reserved for future use
0x2 0x5 to 0xE reserved for future use
* 0x2 0xF user defined
0x2 0xF user defined
*/
 
*/


UPDATE program SET category = 'News' WHERE category = 'nachrichten';
UPDATE program SET category = 'News' WHERE category = 'nachrichten';
Line 88: Line 85:


/*
/*
 
* Show/Game show:
Show/Game show:
*
 
* 0x3 0x0 show/game show (general)
0x3 0x0 show/game show (general)
* 0x3 0x1 game show/quiz/contest
0x3 0x1 game show/quiz/contest
* 0x3 0x2 variety show
0x3 0x2 variety show
* 0x3 0x3 talk show
0x3 0x3 talk show
* 0x3 0x4 to 0xE reserved for future use
0x3 0x4 to 0xE reserved for future use
* 0x3 0xF user defined
0x3 0xF user defined
*/
 
*/


UPDATE program SET category = 'Entertainment' WHERE category IN ('humor', 'comedy');
UPDATE program SET category = 'Entertainment' WHERE category IN ('humor', 'comedy');
Line 106: Line 101:


/*
/*
 
* Sports:
Sports:
*
 
* 0x4 0x0 sports (general)
0x4 0x0 sports (general)
* 0x4 0x1 special events (Olympic Games, World Cup, etc.)
0x4 0x1 special events (Olympic Games, World Cup, etc.)
* 0x4 0x2 sports magazines
0x4 0x2 sports magazines
* 0x4 0x3 football/soccer
0x4 0x3 football/soccer
* 0x4 0x4 tennis/squash
0x4 0x4 tennis/squash
* 0x4 0x5 team sports (excluding football)
0x4 0x5 team sports (excluding football)
* 0x4 0x6 athletics
0x4 0x6 athletics
* 0x4 0x7 motor sport
0x4 0x7 motor sport
* 0x4 0x8 water sport
0x4 0x8 water sport
* 0x4 0x9 winter sports
0x4 0x9 winter sports
* 0x4 0xA equestrian
0x4 0xA equestrian
* 0x4 0xB martial sports
0x4 0xB martial sports
* 0x4 0xC to 0xE reserved for future use
0x4 0xC to 0xE reserved for future use
* 0x4 0xF user defined
0x4 0xF user defined
*/
 
*/


UPDATE program SET category = 'Sports' WHERE category IN ('extremsport', 'golf', 'us-sport');
UPDATE program SET category = 'Sports' WHERE category IN ('extremsport', 'golf', 'us-sport');
Line 140: Line 133:


/*
/*
 
* Children's/Youth programmes:
Children's/Youth programmes:
*
 
* 0x5 0x0 children's/youth programmes (general)
0x5 0x0 children's/youth programmes (general)
* 0x5 0x1 pre-school children's programmes
0x5 0x1 pre-school children's programmes
* 0x5 0x2 entertainment programmes for 6 to14
0x5 0x2 entertainment programmes for 6 to14
* 0x5 0x3 entertainment programmes for 10 to 16
0x5 0x3 entertainment programmes for 10 to 16
* 0x5 0x4 informational/educational/school programmes
0x5 0x4 informational/educational/school programmes
* 0x5 0x5 cartoons/puppets
0x5 0x5 cartoons/puppets
* 0x5 0x6 to 0xE reserved for future use
0x5 0x6 to 0xE reserved for future use
* 0x5 0xF user defined
0x5 0xF user defined
*/
 
*/


UPDATE program SET category = 'Kids' WHERE category = 'jugend';
UPDATE program SET category = 'Kids' WHERE category = 'jugend';
Line 162: Line 153:


/*
/*
 
* Music/Ballet/Dance:
Music/Ballet/Dance:
*
 
* 0x6 0x0 music/ballet/dance (general)
0x6 0x0 music/ballet/dance (general)
* 0x6 0x1 rock/pop
0x6 0x1 rock/pop
* 0x6 0x2 serious music/classical music
0x6 0x2 serious music/classical music
* 0x6 0x3 folk/traditional music
0x6 0x3 folk/traditional music
* 0x6 0x4 jazz
0x6 0x4 jazz
* 0x6 0x5 musical/opera
0x6 0x5 musical/opera
* 0x6 0x6 ballet
0x6 0x6 ballet
* 0x6 0x7 to 0xE reserved for future use
0x6 0x7 to 0xE reserved for future use
* 0x6 0xF user defined
0x6 0xF user defined
*/
 
*/


UPDATE program SET category = 'Music/Ballet/Dance' WHERE category = 'musik';
UPDATE program SET category = 'Music/Ballet/Dance' WHERE category = 'musik';
Line 186: Line 175:


/*
/*
 
* Arts/Culture (without music):
Arts/Culture (without music):
*
 
* 0x7 0x0 arts/culture (without music, general)
0x7 0x0 arts/culture (without music, general)
* 0x7 0x1 performing arts
0x7 0x1 performing arts
* 0x7 0x2 fine arts
0x7 0x2 fine arts
* 0x7 0x3 religion
0x7 0x3 religion
* 0x7 0x4 popular culture/traditional arts
0x7 0x4 popular culture/traditional arts
* 0x7 0x5 literature
0x7 0x5 literature
* 0x7 0x6 film/cinema
0x7 0x6 film/cinema
* 0x7 0x7 experimental film/video
0x7 0x7 experimental film/video
* 0x7 0x8 broadcasting/press
0x7 0x8 broadcasting/press
* 0x7 0x9 new media
0x7 0x9 new media
* 0x7 0xA arts/culture magazines
0x7 0xA arts/culture magazines
* 0x7 0xB fashion
0x7 0xB fashion
* 0x7 0xC to 0xE reserved for future use
0x7 0xC to 0xE reserved for future use
* 0x7 0xF user defined
0x7 0xF user defined
*/
 
*/


UPDATE program SET category = 'Arts/Culture' WHERE category = 'kultur';
UPDATE program SET category = 'Arts/Culture' WHERE category = 'kultur';
Line 220: Line 207:


/*
/*
 
* Social/Political issues/Economics:
Social/Political issues/Economics:
*
 
* 0x8 0x0 social/political issues/economics (general)
0x8 0x0 social/political issues/economics (general)
* 0x8 0x1 magazines/reports/documentary
0x8 0x1 magazines/reports/documentary
* 0x8 0x2 economics/social advisory
0x8 0x2 economics/social advisory
* 0x8 0x3 remarkable people
0x8 0x3 remarkable people
* 0x8 0x4 to 0xE reserved for future use
0x8 0x4 to 0xE reserved for future use
* 0x8 0xF user defined
0x8 0xF user defined
*/
 
*/


UPDATE program SET category = 'Social/Policical/Economics' WHERE category = 'politik';
UPDATE program SET category = 'Social/Policical/Economics' WHERE category = 'politik';
Line 238: Line 223:


/*
/*
 
* Education/Science/Factual topics:
Education/Science/Factual topics:
*
 
* 0x9 0x0 education/science/factual topics (general)
0x9 0x0 education/science/factual topics (general)
* 0x9 0x1 nature/animals/environment
0x9 0x1 nature/animals/environment
* 0x9 0x2 technology/natural sciences
0x9 0x2 technology/natural sciences
* 0x9 0x3 medicine/physiology/psychology
0x9 0x3 medicine/physiology/psychology
* 0x9 0x4 foreign countries/expeditions
0x9 0x4 foreign countries/expeditions
* 0x9 0x5 social/spiritual sciences
0x9 0x5 social/spiritual sciences
* 0x9 0x6 further education
0x9 0x6 further education
* 0x9 0x7 languages
0x9 0x7 languages
* 0x9 0x8 to 0xE reserved for future use
0x9 0x8 to 0xE reserved for future use
* 0x9 0xF user defined
0x9 0xF user defined
*/
 
*/


UPDATE program SET category = 'Education/Science/Factual' WHERE category = 'wissen';
UPDATE program SET category = 'Education/Science/Factual' WHERE category = 'wissen';
Line 264: Line 247:


/*
/*
 
* Leisure hobbies:
Leisure hobbies:
*
 
* 0xA 0x0 leisure hobbies (general)
0xA 0x0 leisure hobbies (general)
* 0xA 0x1 tourism/travel
0xA 0x1 tourism/travel
* 0xA 0x2 handicraft
0xA 0x2 handicraft
* 0xA 0x3 motoring
0xA 0x3 motoring
* 0xA 0x4 fitness and health
0xA 0x4 fitness and health
* 0xA 0x5 cooking
0xA 0x5 cooking
* 0xA 0x6 advertisement/shopping
0xA 0x6 advertisement/shopping
* 0xA 0x7 gardening
0xA 0x7 gardening
* 0xA 0x8 to 0xE reserved for future use
0xA 0x8 to 0xE reserved for future use
* 0xA 0xF user defined
0xA 0xF user defined
*/
 
*/


-- leisure hobbies
-- leisure hobbies
Line 291: Line 272:


=== English (generic) ===
=== English (generic) ===
<syntaxhighlight lang="sql" enclose="div">
<syntaxhighlight lang="sql">
/*
/*
 
* See DVB-SI spec (ETSI EN 300 468 V1.11.1 (2010-04), page 40 at
See DVB-SI spec (ETSI EN 300 468 V1.11.1 (2010-04), page 40, http://www.etsi.org/deliver/etsi_en/300400_300499/300468/01.11.01_60/en_300468v011101p.pdf)
* <https://www.etsi.org/deliver/etsi_en/300400_300499/300468/01.11.01_60/en_300468v011101p.pdf>
 
*
Undefined
* Undefined
0x0 0x0 to 0xF undefined content
* 0x0 0x0 to 0xF undefined content
 
*
Movie/Drama:
* Movie/Drama:
 
*
0x1 0x0 movie/drama (general)
* 0x1 0x0 movie/drama (general)
0x1 0x1 detective/thriller
* 0x1 0x1 detective/thriller
0x1 0x2 adventure/western/war
* 0x1 0x2 adventure/western/war
0x1 0x3 science fiction/fantasy/horror
* 0x1 0x3 science fiction/fantasy/horror
0x1 0x4 comedy
* 0x1 0x4 comedy
0x1 0x5 soap/melodrama/folkloric
* 0x1 0x5 soap/melodrama/folkloric
0x1 0x6 romance
* 0x1 0x6 romance
0x1 0x7 serious/classical/religious/historical movie/drama
* 0x1 0x7 serious/classical/religious/historical movie/drama
0x1 0x8 adult movie/drama
* 0x1 0x8 adult movie/drama
0x1 0x9 to 0xE reserved for future use
* 0x1 0x9 to 0xE reserved for future use
0x1 0xF user defined
* 0x1 0xF user defined
 
*/
*/


UPDATE program SET category = 'Movie' WHERE category IN ('category','musical','n/a','other');
UPDATE program SET category = 'Movie' WHERE category IN ('category','musical','n/a','other');
Line 327: Line 307:


/*
/*
 
* News/Current affairs:
News/Current affairs:
*
 
* 0x2 0x0 news/current affairs (general)
0x2 0x0 news/current affairs (general)
* 0x2 0x1 news/weather report
0x2 0x1 news/weather report
* 0x2 0x2 news magazine
0x2 0x2 news magazine
* 0x2 0x3 documentary
0x2 0x3 documentary
* 0x2 0x4 discussion/interview/debate
0x2 0x4 discussion/interview/debate
* 0x2 0x5 to 0xE reserved for future use
0x2 0x5 to 0xE reserved for future use
* 0x2 0xF user defined
0x2 0xF user defined
*/
 
*/


UPDATE program SET category = 'News' WHERE category IN ('current affairs', 'news','local news/sport');
UPDATE program SET category = 'News' WHERE category IN ('current affairs', 'news','local news/sport');
Line 348: Line 326:


/*
/*
 
* Show/Game show:
Show/Game show:
*
 
* 0x3 0x0 show/game show (general)
0x3 0x0 show/game show (general)
* 0x3 0x1 game show/quiz/contest
0x3 0x1 game show/quiz/contest
* 0x3 0x2 variety show
0x3 0x2 variety show
* 0x3 0x3 talk show
0x3 0x3 talk show
* 0x3 0x4 to 0xE reserved for future use
0x3 0x4 to 0xE reserved for future use
* 0x3 0xF user defined
0x3 0xF user defined
*/
 
*/


UPDATE program SET category = 'Entertainment' WHERE category IN ('humor', 'comedy','light entertainment/arts');
UPDATE program SET category = 'Entertainment' WHERE category IN ('humor', 'comedy','light entertainment/arts');
Line 366: Line 342:


/*
/*
 
* Sports:
Sports:
*
 
* 0x4 0x0 sports (general)
0x4 0x0 sports (general)
* 0x4 0x1 special events (Olympic Games, World Cup, etc.)
0x4 0x1 special events (Olympic Games, World Cup, etc.)
* 0x4 0x2 sports magazines
0x4 0x2 sports magazines
* 0x4 0x3 football/soccer
0x4 0x3 football/soccer
* 0x4 0x4 tennis/squash
0x4 0x4 tennis/squash
* 0x4 0x5 team sports (excluding football)
0x4 0x5 team sports (excluding football)
* 0x4 0x6 athletics
0x4 0x6 athletics
* 0x4 0x7 motor sport
0x4 0x7 motor sport
* 0x4 0x8 water sport
0x4 0x8 water sport
* 0x4 0x9 winter sports
0x4 0x9 winter sports
* 0x4 0xA equestrian
0x4 0xA equestrian
* 0x4 0xB martial sports
0x4 0xB martial sports
* 0x4 0xC to 0xE reserved for future use
0x4 0xC to 0xE reserved for future use
* 0x4 0xF user defined
0x4 0xF user defined
*/
 
*/


UPDATE program SET category = 'Sports' WHERE category IN ('live sport','sport');
UPDATE program SET category = 'Sports' WHERE category IN ('live sport','sport');
Line 400: Line 374:


/*
/*
 
* Children's/Youth programmes:
Children's/Youth programmes:
*
 
* 0x5 0x0 children's/youth programmes (general)
0x5 0x0 children's/youth programmes (general)
* 0x5 0x1 pre-school children's programmes
0x5 0x1 pre-school children's programmes
* 0x5 0x2 entertainment programmes for 6 to14
0x5 0x2 entertainment programmes for 6 to14
* 0x5 0x3 entertainment programmes for 10 to 16
0x5 0x3 entertainment programmes for 10 to 16
* 0x5 0x4 informational/educational/school programmes
0x5 0x4 informational/educational/school programmes
* 0x5 0x5 cartoons/puppets
0x5 0x5 cartoons/puppets
* 0x5 0x6 to 0xE reserved for future use
0x5 0x6 to 0xE reserved for future use
* 0x5 0xF user defined
0x5 0xF user defined
*/
 
*/


UPDATE program SET category = 'Kids' WHERE category = 'children';
UPDATE program SET category = 'Kids' WHERE category = 'children';
Line 424: Line 396:


/*
/*
 
* Music/Ballet/Dance:
Music/Ballet/Dance:
*
 
* 0x6 0x0 music/ballet/dance (general)
0x6 0x0 music/ballet/dance (general)
* 0x6 0x1 rock/pop
0x6 0x1 rock/pop
* 0x6 0x2 serious music/classical music
0x6 0x2 serious music/classical music
* 0x6 0x3 folk/traditional music
0x6 0x3 folk/traditional music
* 0x6 0x4 jazz
0x6 0x4 jazz
* 0x6 0x5 musical/opera
0x6 0x5 musical/opera
* 0x6 0x6 ballet
0x6 0x6 ballet
* 0x6 0x7 to 0xE reserved for future use
0x6 0x7 to 0xE reserved for future use
* 0x6 0xF user defined
0x6 0xF user defined
*/
 
*/


UPDATE program SET category = 'Music/Ballet/Dance' WHERE category = 'music';
UPDATE program SET category = 'Music/Ballet/Dance' WHERE category = 'music';
Line 448: Line 418:


/*
/*
 
* Arts/Culture (without music):
Arts/Culture (without music):
*
 
* 0x7 0x0 arts/culture (without music, general)
0x7 0x0 arts/culture (without music, general)
* 0x7 0x1 performing arts
0x7 0x1 performing arts
* 0x7 0x2 fine arts
0x7 0x2 fine arts
* 0x7 0x3 religion
0x7 0x3 religion
* 0x7 0x4 popular culture/traditional arts
0x7 0x4 popular culture/traditional arts
* 0x7 0x5 literature
0x7 0x5 literature
* 0x7 0x6 film/cinema
0x7 0x6 film/cinema
* 0x7 0x7 experimental film/video
0x7 0x7 experimental film/video
* 0x7 0x8 broadcasting/press
0x7 0x8 broadcasting/press
* 0x7 0x9 new media
0x7 0x9 new media
* 0x7 0xA arts/culture magazines
0x7 0xA arts/culture magazines
* 0x7 0xB fashion
0x7 0xB fashion
* 0x7 0xC to 0xE reserved for future use
0x7 0xC to 0xE reserved for future use
* 0x7 0xF user defined
0x7 0xF user defined
*/
 
*/


UPDATE program SET category = 'Arts/Culture' WHERE category = 'arts and culture';
UPDATE program SET category = 'Arts/Culture' WHERE category = 'arts and culture';
Line 482: Line 450:


/*
/*
 
* Social/Political issues/Economics:
Social/Political issues/Economics:
*
 
* 0x8 0x0 social/political issues/economics (general)
0x8 0x0 social/political issues/economics (general)
* 0x8 0x1 magazines/reports/documentary
0x8 0x1 magazines/reports/documentary
* 0x8 0x2 economics/social advisory
0x8 0x2 economics/social advisory
* 0x8 0x3 remarkable people
0x8 0x3 remarkable people
* 0x8 0x4 to 0xE reserved for future use
0x8 0x4 to 0xE reserved for future use
* 0x8 0xF user defined
0x8 0xF user defined
*/
 
*/


UPDATE program SET category = 'Social/Policical/Economics' WHERE category IN ('business','business and finance');
UPDATE program SET category = 'Social/Policical/Economics' WHERE category IN ('business','business and finance');
Line 500: Line 466:


/*
/*
 
* Education/Science/Factual topics:
Education/Science/Factual topics:
*
 
* 0x9 0x0 education/science/factual topics (general)
0x9 0x0 education/science/factual topics (general)
* 0x9 0x1 nature/animals/environment
0x9 0x1 nature/animals/environment
* 0x9 0x2 technology/natural sciences
0x9 0x2 technology/natural sciences
* 0x9 0x3 medicine/physiology/psychology
0x9 0x3 medicine/physiology/psychology
* 0x9 0x4 foreign countries/expeditions
0x9 0x4 foreign countries/expeditions
* 0x9 0x5 social/spiritual sciences
0x9 0x5 social/spiritual sciences
* 0x9 0x6 further education
0x9 0x6 further education
* 0x9 0x7 languages
0x9 0x7 languages
* 0x9 0x8 to 0xE reserved for future use
0x9 0x8 to 0xE reserved for future use
* 0x9 0xF user defined
0x9 0xF user defined
*/
 
*/


UPDATE program SET category = 'Education/Science/Factual' WHERE category = 'science';
UPDATE program SET category = 'Education/Science/Factual' WHERE category = 'science';
Line 526: Line 490:


/*
/*
 
* Leisure hobbies:
Leisure hobbies:
*
 
* 0xA 0x0 leisure hobbies (general)
0xA 0x0 leisure hobbies (general)
* 0xA 0x1 tourism/travel
0xA 0x1 tourism/travel
* 0xA 0x2 handicraft
0xA 0x2 handicraft
* 0xA 0x3 motoring
0xA 0x3 motoring
* 0xA 0x4 fitness and health
0xA 0x4 fitness and health
* 0xA 0x5 cooking
0xA 0x5 cooking
* 0xA 0x6 advertisement/shopping
0xA 0x6 advertisement/shopping
* 0xA 0x7 gardening
0xA 0x7 gardening
* 0xA 0x8 to 0xE reserved for future use
0xA 0x8 to 0xE reserved for future use
* 0xA 0xF user defined
0xA 0xF user defined
*/
 
*/


-- leisure hobbies
-- leisure hobbies

Revision as of 10:36, 2 November 2021

Home icon grey.png   ▶ Add-on:MythTV PVR Client ▶ DVB-EIT-categories

Kodi PVR and the MythTV add-on have support for Digital Video Broadcasting-Service Information (DVB-SI) Event Information Table (EIT) categories only. In case you get your guide data from other sources (such as XMLTV), the genre names show up as Other/Unknown and you will not get a colored Electronic Program Guide (EPG). MythTV (MythFrontend and MythWeb), however, supports a more comprehensive category colorization scheme.

This page describes an approach for getting Kodi to recognize your categories by replacing the categories in the MythTV database with the corresponding DVB-SI EIT categories.

You need to setup MythTV to run a wrapper script as a mythfilldatabase replacement. This wrapper script will load a epg.sql database file that manages the category conversions. Since the categories depend on the source of your guide, you will have to adapt epg.sql to match your data.

1 Mythfilldatabase replacement

The MythTV backend needs to be configured to use /usr/local/bin/my-mythfilldatabase as a replacement:

#!/usr/bin/env bash

LANG="en_GB.UTF-8"
LC_ALL="en_GB.UTF-8"
typeset -gx LANG LC_ALL

if /usr/bin/mythfilldatabase --loglevel debug -- "--days 18"; then
  mysql -h htpc -u mythtv -p mythtv -D mythconverg </usr/local/bin/epg.sql
else
  exit 1
fi

2 Source specific categories

The SQL database file /usr/local/bin/epg.sql performs the category conversion. Below are some examples for the conversion script; most likely they will have to be adapted to match your guide source.

You can get all currently used categories from your database with the following command:

mysql --host=htpc --user=mythtv --password=mythtv --database=mythconverg <<<"SELECT DISTINCT category FROM program;"

2.1 Germany (epgdata.com)

/*
 * See DVB-SI spec (ETSI EN 300 468 V1.11.1 (2010-04), page 40 at
 * <https://www.etsi.org/deliver/etsi_en/300400_300499/300468/01.11.01_60/en_300468v011101p.pdf>
 *
 * Undefined
 * 0x0 0x0 to 0xF undefined content
 *
 * Movie/Drama:
 *
 * 0x1 0x0 movie/drama (general)
 * 0x1 0x1 detective/thriller
 * 0x1 0x2 adventure/western/war
 * 0x1 0x3 science fiction/fantasy/horror
 * 0x1 0x4 comedy
 * 0x1 0x5 soap/melodrama/folkloric
 * 0x1 0x6 romance
 * 0x1 0x7 serious/classical/religious/historical movie/drama
 * 0x1 0x8 adult movie/drama
 * 0x1 0x9 to 0xE reserved for future use
 * 0x1 0xF user defined
 */

UPDATE program SET category = 'Movie' WHERE category IN ('filme','action','kurzfilm');
UPDATE program SET category = 'Movie - Detective/Thriller' WHERE category IN ('krimi', 'thriller');
UPDATE program SET category = 'Movie - Adventure/Western/War' WHERE category IN ('abenteuer', 'western');
UPDATE program SET category = 'Movie - Science Fiction/Fantasy/Horror' WHERE category IN ('science fiction', 'fantasy', 'mystery+horror');
-- Comedy
UPDATE program SET category = 'Movie - Soap/melodrama/folkloric' WHERE category IN ('serien', 'soap', 'krankenhaus');
UPDATE program SET category = 'Movie - Romance' WHERE category = 'romantik/liebe';
-- Classical
UPDATE program SET category = 'Movie - Adult ' WHERE category = 'erotik';
UPDATE program SET category = 'Drama' WHERE category = 'drama';

/*
 * News/Current affairs:
 *
 * 0x2 0x0 news/current affairs (general)
 * 0x2 0x1 news/weather report
 * 0x2 0x2 news magazine
 * 0x2 0x3 documentary
 * 0x2 0x4 discussion/interview/debate
 * 0x2 0x5 to 0xE reserved for future use
 * 0x2 0xF user defined
 */

UPDATE program SET category = 'News' WHERE category = 'nachrichten';
-- weather
UPDATE program SET category = 'News magazine' WHERE category = 'magazin';
UPDATE program SET category = 'Documentary' WHERE category = 'dokumentarfilm';
-- discussion

/*
 * Show/Game show:
 *
 * 0x3 0x0 show/game show (general)
 * 0x3 0x1 game show/quiz/contest
 * 0x3 0x2 variety show
 * 0x3 0x3 talk show
 * 0x3 0x4 to 0xE reserved for future use
 * 0x3 0xF user defined
 */

UPDATE program SET category = 'Entertainment' WHERE category IN ('humor', 'comedy');
UPDATE program SET category = 'Game Show' WHERE category IN ('show','shows','spielshows');
UPDATE program SET category = 'Variety Show' WHERE category = 'familien-show';
UPDATE program SET category = 'Talk Show' WHERE category IN ('talkshows','gerichtsshow','reality');

/*
 * Sports:
 *
 * 0x4 0x0 sports (general)
 * 0x4 0x1 special events (Olympic Games, World Cup, etc.)
 * 0x4 0x2 sports magazines
 * 0x4 0x3 football/soccer
 * 0x4 0x4 tennis/squash
 * 0x4 0x5 team sports (excluding football)
 * 0x4 0x6 athletics
 * 0x4 0x7 motor sport
 * 0x4 0x8 water sport
 * 0x4 0x9 winter sports
 * 0x4 0xA equestrian
 * 0x4 0xB martial sports
 * 0x4 0xC to 0xE reserved for future use
 * 0x4 0xF user defined
 */

UPDATE program SET category = 'Sports' WHERE category IN ('extremsport', 'golf', 'us-sport');
-- special events
-- magazines
UPDATE program SET category = 'Football (Soccer)' WHERE category = 'fussball';
UPDATE program SET category = 'Tennis/Squash' WHERE category = 'tennis';
UPDATE program SET category = 'Misc. Team Sports' WHERE category IN ('handball', 'volleyball');
UPDATE program SET category = 'Athletics' WHERE category = 'leichtathletik';
UPDATE program SET category = 'Motor Sport' WHERE category = 'motorsport';
UPDATE program SET category = 'Water Sport' WHERE category = 'wassersport';
UPDATE program SET category = 'Winter Sports' WHERE category = 'wintersport';
-- equestrian
UPDATE program SET category = 'Martial Sports' WHERE category = 'boxen';

/*
 * Children's/Youth programmes:
 *
 * 0x5 0x0 children's/youth programmes (general)
 * 0x5 0x1 pre-school children's programmes
 * 0x5 0x2 entertainment programmes for 6 to14
 * 0x5 0x3 entertainment programmes for 10 to 16
 * 0x5 0x4 informational/educational/school programmes
 * 0x5 0x5 cartoons/puppets
 * 0x5 0x6 to 0xE reserved for future use
 * 0x5 0xF user defined
 */

UPDATE program SET category = 'Kids' WHERE category = 'jugend';
-- pre-school
-- 6-14
-- 10-16
-- informational
UPDATE program SET category = 'Cartoons/Puppets' WHERE category IN ('zeichentrick', 'anime');

/*
 * Music/Ballet/Dance:
 *
 * 0x6 0x0 music/ballet/dance (general)
 * 0x6 0x1 rock/pop
 * 0x6 0x2 serious music/classical music
 * 0x6 0x3 folk/traditional music
 * 0x6 0x4 jazz
 * 0x6 0x5 musical/opera
 * 0x6 0x6 ballet
 * 0x6 0x7 to 0xE reserved for future use
 * 0x6 0xF user defined
 */

UPDATE program SET category = 'Music/Ballet/Dance' WHERE category = 'musik';
UPDATE program SET category = 'Rock/Pop' WHERE category IN ('rock', 'pop', 'alternative');
UPDATE program SET category = 'Classical Music' WHERE category = 'klassik';
UPDATE program SET category = 'Folk Music' WHERE category = 'volksmusik';
UPDATE program SET category = 'Jazz' WHERE category = 'jazz';
UPDATE program SET category = 'Musical/Opera' WHERE category = 'musical';
-- ballet

/*
 * Arts/Culture (without music):
 *
 * 0x7 0x0 arts/culture (without music, general)
 * 0x7 0x1 performing arts
 * 0x7 0x2 fine arts
 * 0x7 0x3 religion
 * 0x7 0x4 popular culture/traditional arts
 * 0x7 0x5 literature
 * 0x7 0x6 film/cinema
 * 0x7 0x7 experimental film/video
 * 0x7 0x8 broadcasting/press
 * 0x7 0x9 new media
 * 0x7 0xA arts/culture magazines
 * 0x7 0xB fashion
 * 0x7 0xC to 0xE reserved for future use
 * 0x7 0xF user defined
 */

UPDATE program SET category = 'Arts/Culture' WHERE category = 'kultur';
UPDATE program SET category = 'Performing Arts' WHERE category = 'theater';
-- fine arts
-- religion
-- pop
-- literature
-- film
-- experimental film
-- broadcasting
-- new media
-- arts
-- fashion

/*
 * Social/Political issues/Economics:
 *
 * 0x8 0x0 social/political issues/economics (general)
 * 0x8 0x1 magazines/reports/documentary
 * 0x8 0x2 economics/social advisory
 * 0x8 0x3 remarkable people
 * 0x8 0x4 to 0xE reserved for future use
 * 0x8 0xF user defined
 */

UPDATE program SET category = 'Social/Policical/Economics' WHERE category = 'politik';
UPDATE program SET category = 'Magazines/Reports/Documentary' WHERE category IN ('reportagen','dokumentation','heimat','geschichte');
UPDATE program SET category = 'Economics/Social Advisory' WHERE category IN ('ratgeber','wirtschaft');
-- remarkable people

/*
 * Education/Science/Factual topics:
 *
 * 0x9 0x0 education/science/factual topics (general)
 * 0x9 0x1 nature/animals/environment
 * 0x9 0x2 technology/natural sciences
 * 0x9 0x3 medicine/physiology/psychology
 * 0x9 0x4 foreign countries/expeditions
 * 0x9 0x5 social/spiritual sciences
 * 0x9 0x6 further education
 * 0x9 0x7 languages
 * 0x9 0x8 to 0xE reserved for future use
 * 0x9 0xF user defined
 */

UPDATE program SET category = 'Education/Science/Factual' WHERE category = 'wissen';
UPDATE program SET category = 'Nature/animals/Environment' WHERE category = 'natur';
-- technology
UPDATE program SET category = 'Medicine/Physiology/Psychology' WHERE category = 'gesundheit';
-- foreign countries
UPDATE program SET category = 'Social/Spiritual Sciences' WHERE category = 'familie';
-- further education
-- languages

/*
 * Leisure hobbies:
 *
 * 0xA 0x0 leisure hobbies (general)
 * 0xA 0x1 tourism/travel
 * 0xA 0x2 handicraft
 * 0xA 0x3 motoring
 * 0xA 0x4 fitness and health
 * 0xA 0x5 cooking
 * 0xA 0x6 advertisement/shopping
 * 0xA 0x7 gardening
 * 0xA 0x8 to 0xE reserved for future use
 * 0xA 0xF user defined
 */

-- leisure hobbies
UPDATE program SET category = 'Tourism/Travel' WHERE category = 'reise';
UPDATE program SET category = 'Handicraft' WHERE category = 'heimwerken';
UPDATE program SET category = 'Motoring' WHERE category = 'motor+verkehr';
UPDATE program SET category = 'Fitness & Health' WHERE category = 'gymnastik';
UPDATE program SET category = 'Cooking' WHERE category = 'kochshow';
UPDATE program SET category = 'Advertizement/Shopping' WHERE category = 'homeshopping';
-- gardening

2.2 English (generic)

/*
 * See DVB-SI spec (ETSI EN 300 468 V1.11.1 (2010-04), page 40 at
 * <https://www.etsi.org/deliver/etsi_en/300400_300499/300468/01.11.01_60/en_300468v011101p.pdf>
 *
 * Undefined
 * 0x0 0x0 to 0xF undefined content
 * 
 * Movie/Drama:
 *
 * 0x1 0x0 movie/drama (general)
 * 0x1 0x1 detective/thriller
 * 0x1 0x2 adventure/western/war
 * 0x1 0x3 science fiction/fantasy/horror
 * 0x1 0x4 comedy
 * 0x1 0x5 soap/melodrama/folkloric
 * 0x1 0x6 romance
 * 0x1 0x7 serious/classical/religious/historical movie/drama
 * 0x1 0x8 adult movie/drama
 * 0x1 0x9 to 0xE reserved for future use
 * 0x1 0xF user defined
 */

UPDATE program SET category = 'Movie' WHERE category IN ('category','musical','n/a','other');
UPDATE program SET category = 'Movie - Detective/Thriller' WHERE category IN ('thriller','crime','crime/mystery');
UPDATE program SET category = 'Movie - Adventure/Western/War' WHERE category IN ('adventure','action','war','western');
UPDATE program SET category = 'Movie - Science Fiction/Fantasy/Horror' WHERE category IN ('science fiction', 'fantasy', 'mystery','horror');
UPDATE program SET category = 'Movie - Soap/melodrama/folkloric' WHERE category IN ('soap');
UPDATE program SET category = 'Movie - Romance' WHERE category IN ( 'romance','romantic comedy');
UPDATE program SET category = 'Movie - Comedy' WHERE category IN ('sitcom', 'drama/comedy');
-- Classical
UPDATE program SET category = 'Movie - Adult ' WHERE category = 'erotic';
UPDATE program SET category = 'Drama' WHERE category = 'drama';

/*
 * News/Current affairs:
 *
 * 0x2 0x0 news/current affairs (general)
 * 0x2 0x1 news/weather report
 * 0x2 0x2 news magazine
 * 0x2 0x3 documentary
 * 0x2 0x4 discussion/interview/debate
 * 0x2 0x5 to 0xE reserved for future use
 * 0x2 0xF user defined
 */

UPDATE program SET category = 'News' WHERE category IN ('current affairs', 'news','local news/sport');
UPDATE program SET category = 'News/Weather Report' WHERE category IN ('weather');
-- weather
UPDATE program SET category = 'News magazine' WHERE category = 'magazine';
UPDATE program SET category = 'Documentary' WHERE category IN( 'documentary','historical');
-- discussion

/*
 * Show/Game show:
 *
 * 0x3 0x0 show/game show (general)
 * 0x3 0x1 game show/quiz/contest
 * 0x3 0x2 variety show
 * 0x3 0x3 talk show
 * 0x3 0x4 to 0xE reserved for future use
 * 0x3 0xF user defined
 */

UPDATE program SET category = 'Entertainment' WHERE category IN ('humor', 'comedy','light entertainment/arts');
UPDATE program SET category = 'Game Show' WHERE category IN ('game show','game/reality','reality');
UPDATE program SET category = 'Variety Show' WHERE category IN ( 'entertainment','variety');
UPDATE program SET category = 'Talk Show' WHERE category IN ('reality/real-life','lifestyle','lifestyle/documentaries','talk show');

/*
 * Sports:
 *
 * 0x4 0x0 sports (general)
 * 0x4 0x1 special events (Olympic Games, World Cup, etc.)
 * 0x4 0x2 sports magazines
 * 0x4 0x3 football/soccer
 * 0x4 0x4 tennis/squash
 * 0x4 0x5 team sports (excluding football)
 * 0x4 0x6 athletics
 * 0x4 0x7 motor sport
 * 0x4 0x8 water sport
 * 0x4 0x9 winter sports
 * 0x4 0xA equestrian
 * 0x4 0xB martial sports
 * 0x4 0xC to 0xE reserved for future use
 * 0x4 0xF user defined
 */

UPDATE program SET category = 'Sports' WHERE category IN ('live sport','sport');
-- special events
-- magazines
UPDATE program SET category = 'Football (Soccer)' WHERE category = 'football';
UPDATE program SET category = 'Tennis/Squash' WHERE category = 'tennis';
UPDATE program SET category = 'Misc. Team Sports' WHERE category IN ('handball', 'volleyball');
UPDATE program SET category = 'Athletics' WHERE category = 'athletics';
UPDATE program SET category = 'Motor Sport' WHERE category = 'motorsport';
UPDATE program SET category = 'Water Sport' WHERE category = 'watersport';
UPDATE program SET category = 'Winter Sports' WHERE category = 'wintersport';
-- equestrian
UPDATE program SET category = 'Martial Sports' WHERE category = 'boxing';

/*
 * Children's/Youth programmes:
 *
 * 0x5 0x0 children's/youth programmes (general)
 * 0x5 0x1 pre-school children's programmes
 * 0x5 0x2 entertainment programmes for 6 to14
 * 0x5 0x3 entertainment programmes for 10 to 16
 * 0x5 0x4 informational/educational/school programmes
 * 0x5 0x5 cartoons/puppets
 * 0x5 0x6 to 0xE reserved for future use
 * 0x5 0xF user defined
 */

UPDATE program SET category = 'Kids' WHERE category = 'children';
UPDATE program SET category = 'Pre-School' WHERE category = 'pre-school';
-- pre-school
-- 6-14
-- 10-16
-- informational
UPDATE program SET category = 'Cartoons/Puppets' WHERE category IN ('animation');
UPDATE program SET category = 'Informational/Educational/School Programmes' WHERE category IN ('education','information');

/*
 * Music/Ballet/Dance:
 *
 * 0x6 0x0 music/ballet/dance (general)
 * 0x6 0x1 rock/pop
 * 0x6 0x2 serious music/classical music
 * 0x6 0x3 folk/traditional music
 * 0x6 0x4 jazz
 * 0x6 0x5 musical/opera
 * 0x6 0x6 ballet
 * 0x6 0x7 to 0xE reserved for future use
 * 0x6 0xF user defined
 */

UPDATE program SET category = 'Music/Ballet/Dance' WHERE category = 'music';
UPDATE program SET category = 'Rock/Pop' WHERE category IN ('rock', 'pop', 'alternative');
UPDATE program SET category = 'Classical Music' WHERE category = 'classical';
UPDATE program SET category = 'Folk Music' WHERE category = 'folk music';
UPDATE program SET category = 'Jazz' WHERE category = 'jazz/blues';
UPDATE program SET category = 'Musical/Opera' WHERE category = 'musical';
-- ballet

/*
 * Arts/Culture (without music):
 *
 * 0x7 0x0 arts/culture (without music, general)
 * 0x7 0x1 performing arts
 * 0x7 0x2 fine arts
 * 0x7 0x3 religion
 * 0x7 0x4 popular culture/traditional arts
 * 0x7 0x5 literature
 * 0x7 0x6 film/cinema
 * 0x7 0x7 experimental film/video
 * 0x7 0x8 broadcasting/press
 * 0x7 0x9 new media
 * 0x7 0xA arts/culture magazines
 * 0x7 0xB fashion
 * 0x7 0xC to 0xE reserved for future use
 * 0x7 0xF user defined
 */

UPDATE program SET category = 'Arts/Culture' WHERE category = 'arts and culture';
UPDATE program SET category = 'Religion' WHERE category = 'religion';
-- fine arts
-- religion
-- pop
-- literature
-- film
-- experimental film
-- broadcasting
-- new media
-- arts
-- fashion

/*
 * Social/Political issues/Economics:
 *
 * 0x8 0x0 social/political issues/economics (general)
 * 0x8 0x1 magazines/reports/documentary
 * 0x8 0x2 economics/social advisory
 * 0x8 0x3 remarkable people
 * 0x8 0x4 to 0xE reserved for future use
 * 0x8 0xF user defined
 */

UPDATE program SET category = 'Social/Policical/Economics' WHERE category IN ('business','business and finance');
-- UPDATE program SET category = 'Magazines/Reports/Documentary' WHERE category IN ('documentary');
UPDATE program SET category = 'Remarkable People' WHERE category IN ('biography','people/culture');
-- remarkable people

/*
 * Education/Science/Factual topics:
 *
 * 0x9 0x0 education/science/factual topics (general)
 * 0x9 0x1 nature/animals/environment
 * 0x9 0x2 technology/natural sciences
 * 0x9 0x3 medicine/physiology/psychology
 * 0x9 0x4 foreign countries/expeditions
 * 0x9 0x5 social/spiritual sciences
 * 0x9 0x6 further education
 * 0x9 0x7 languages
 * 0x9 0x8 to 0xE reserved for future use
 * 0x9 0xF user defined
 */

UPDATE program SET category = 'Education/Science/Factual' WHERE category = 'science';
UPDATE program SET category = 'Nature/animals/Environment' WHERE category IN ( 'nature','science/nature');
-- technology
UPDATE program SET category = 'Medicine/Physiology/Psychology' WHERE category = 'health';
-- foreign countries
-- UPDATE program SET category = 'Social/Spiritual Sciences' WHERE category = 'familie';
-- further education
-- languages

/*
 * Leisure hobbies:
 *
 * 0xA 0x0 leisure hobbies (general)
 * 0xA 0x1 tourism/travel
 * 0xA 0x2 handicraft
 * 0xA 0x3 motoring
 * 0xA 0x4 fitness and health
 * 0xA 0x5 cooking
 * 0xA 0x6 advertisement/shopping
 * 0xA 0x7 gardening
 * 0xA 0x8 to 0xE reserved for future use
 * 0xA 0xF user defined
 */

-- leisure hobbies
UPDATE program SET category = 'Tourism/Travel' WHERE category = 'travel';
-- UPDATE program SET category = 'Handicraft' WHERE category = 'heimwerken';
-- UPDATE program SET category = 'Motoring' WHERE category = 'motor+verkehr';
-- UPDATE program SET category = 'Fitness & Health' WHERE category = 'gymnastik';
-- UPDATE program SET category = 'Cooking' WHERE category = 'kochshow';
UPDATE program SET category = 'Advertizement/Shopping' WHERE category = 'shopping';
-- gardening