kodi IPTV Simple PVR Addonのジャンル表示 [Raspberry Pi]
2022/01/19 追記
EPGStationではないのですが,Mirakurun 3.9.0 betaでジャンル情報を取得出来るようになり,小細工不要でジャンル表示が出来る様になりました。
先日,久々にラズパイレコーダーを弄っていて,気になる事が有ったので,調べてプチ対応してみました。
で,何が気になったかって言いますと… PVRの番組表にあるジャンルの表示……
またかよ,またしてもジャンルかよ orz
Tvmaidを改造の時も,散々,ジャンル周り,ガチャガチャにしたじゃね〜か。(ちなみにこれとか
これ)
でも,まぁ,気になったてしまったのは,しようが無い…(笑
って事で…
- EPGStation(v1)と,ラズパイでkodiのIPTV Simple addonで,ジャンル表示させてみる。
まず,現状は…
- kodiは,
apt install
で入るv18.7 Leia
- PVR IPTV Simple Clientは,3.8.8
です。
kodiは,v19 Matrixがリリースされましたが,aptで入れられるまで待ちです。
# v19は,試しにMBPへ入れてみたけど,正直よくわからん!!(笑
ザックリ調べてみたら…
- EPGStationが渡すepg.xmlの内容に
<category>
を追加,ジャンルを渡せばkodiで表示されるっぽい。 - EPGStationのepg.xmlを生成する処理内で,番組表情報全般(ジャンルも)を取り扱えるっぽい。
試しにEPGデータを覗いてみます。(見やすい様に改行入れてます)
$ sqlite3 ~/EPGStation/data/database.db sqlite> .headers ON sqlite> select * from Programs limit 1; id|channelId|eventId|serviceId|networkId|startAt|endAt|startHour|week|duration|isFree|name| shortName|description|extended |genre1|genre2|genre3|genre4|genre5|genre6|channelType|channel|videoType|videoResolution|videoStreamContent|videoComponentType|audioSamplingRate|audioComponentType 40010111615|400101|11615|101|4|1614654000000|1614655500000|12|2|1500000|1|東京マーケット情報| 東京マーケット情報|▽マーケット指標,株式市況速報 ▽東証1部・2部前場市況 【キャスター】岸田彩加| |0|4|||||BS|BS15_0|mpeg2|1080i|1|179|48000|3
genre1 〜 genre6って名称のカラムが,お目当てのジャンルの様です。
カラム | 意味 |
---|---|
genre1 genre3 genre5 |
ジャンル大分類(content_nibble_level1) |
genre1 + genre2 genre3 + genre4 genre5 + genre6 |
ジャンル中分類(content_nibble_level2) |
って感じで取り扱えば,行けそうです。
# セットされる値は,ARIB STD-B10「付録H(規定) コンテント記述子におけるジャンル指定」を参照の事。
とりあえず,直接 EPGStation/dist/server/Model/Api/IPTVModel.js
を弄って対応。
動作したので,これで良しとしても良かったのですが,ソースの方を弄って,ちゃんとBuild出来る様にしてみました。
# と,言っても,いつも通りのヤッつけ実装です(笑
対策前: 全ての番組のジャンルが『その他/不明』になってます。
対策後: EPGに設定されているジャンルが表示されています。
適用方法は…
一旦,EPGStationを停止してから,以下のパッチを当てて,再度 npm run build
します。
その後,kodiの方で
- 設定 →Live TV →ガイド →クリアデータを実施,キャッシュしているEPGデータをクリアします。
* 実施すると,同時に,EPGデータがリロードされます。 - 「PVR & TV放送」を選んで,番組表などでジャンルが表示されている事を確認します。
- 同じクリアデータでも「設定 →Live TV →一般 →クリアデータ」は,実施しない様に!!
チャンネルのグルーピング設定など,設定全消ししてしまいます。
IPTVModel.ts.patch
--- /home/pi/EPGStation/src/server/Model/Api/IPTVModel.ts 2020-10-10 00:00:00.000000000 +0900 +++ /home/pi/EPGStation/src/server/Model/Api/IPTVModel.ts 2021-03-02 14:10:18.914086671 +0900 @@ -77,6 +77,64 @@ class IPTVModel extends ApiModel impleme const programs = await this.programsDB.findSchedule(now, now + 1000 * 60 * 60 * 24 * days); const channels = await this.servicesDB.findAll(); + const genrel: { [key: number]: string } = { + 0x0: 'ニュース/報道', 0x1: 'スポーツ', 0x2: '情報/ワイドショー', 0x3: 'ドラマ', 0x4: '音楽', + 0x5: 'バラエティ', 0x6: '映画', 0x7: 'アニメ/特撮', 0x8: 'ドキュメンタリー/教養', 0x9: '劇場/公演', + 0xA: '趣味/教育', 0xB: '福祉', 0xC: 'スポーツ(CS)', 0xD: '映画(CS)', 0xE: '拡張', + 0xF: 'その他', + }; + + const genrem: { [key: number]: string } = { + 0x00: '定時・総合', 0x01: '天気', 0x02: '特集・ドキュメント', 0x03: '政治・国会', 0x04: '経済・市況', + 0x05: '海外・国際', 0x06: '解説', 0x07: '討論・会談', 0x08: '報道特番', 0x09: 'ローカル・地域', + 0x0A: '交通', 0x0F: 'その他', + + 0x10: 'ニュース', 0x11: '野球', 0x12: 'サッカー', 0x13: 'ゴルフ', 0x14: 'その他の球技', + 0x15: '相撲・格闘技', 0x16: 'オリンピック・国際大会', 0x17: 'マラソン・陸上・水泳', 0x18: 'モータースポーツ', + 0x19: 'マリン・ウィンタースポーツ', 0x1A: '競馬・公営競技', 0x1F: 'その他', + + 0x20: '芸能', 0x21: 'ファッション', 0x22: '暮らし・住まい', 0x23: '健康・医療', 0x24: 'ショッピング・通販', + 0x25: 'グルメ・料理', 0x26: 'イベント', 0x27: '番組紹介・お知らせ', 0x2F: 'その他', + + 0x30: '国内', 0x31: '海外', 0x32: '時代劇', 0x3F: 'その他', + + 0x40: '国内ロック・ポップス', 0x41: '海外ロック・ポップス', 0x42: 'クラシック・オペラ', 0x43: 'ジャズ・フュージョン', + 0x44: '歌謡曲・演歌', 0x45: 'ライブ・コンサート', 0x46: 'ランキング・リクエスト', 0x47: 'カラオケ・のど自慢', + 0x48: '民謡・邦楽', 0x49: '童謡・キッズ', 0x4A: '民族音楽・ワールドミュージック', 0x4F: 'その他', + + 0x50: 'クイズ', 0x51: 'ゲーム', 0x52: 'トークバラエティ', 0x53: 'お笑い・コメディ', 0x54: '音楽バラエティ', + 0x55: '旅バラエティ', 0x56: '料理バラエティ', 0x5F: 'その他', + + 0x60: '洋画', 0x61: '邦画', 0x62: 'アニメ', 0x6F: 'その他', + + 0x70: '国内', 0x71: '海外', 0x72: '特撮', 0x7F: 'その他', + + 0x80: '社会・時事', 0x81: '歴史・紀行', 0x82: '自然・動物・環境', 0x83: '宇宙・科学・医学', 0x84: 'カルチャー・伝統文化', + 0x85: '文学・文芸', 0x86: 'スポーツ', 0x87: 'ドキュメンタリー全般', 0x88: 'インタビュー・討論', 0x8F: 'その他', + + 0x90: '現代劇・新劇', 0x91: 'ミュージカル', 0x92: 'ダンス・バレエ', 0x93: '落語・演芸', 0x94: '歌舞伎・古典', + 0x9F: 'その他', + + 0xA0: '旅・釣り・アウトドア', 0xA1: '園芸・ペット・手芸', 0xA2: '音楽・美術・工芸', 0xA3: '囲碁・将棋', 0xA4: '麻雀・パチンコ', + 0xA5: '車・オートバイ', 0xA6: 'コンピュータ・TVゲーム', 0xA7: '会話・語学', 0xA8: '幼児・小学生', 0xA9: '中学生・高校生', + 0xAA: '大学生・受験', 0xAB: '生涯教育・資格', 0xAC: '教育問題', 0xAF: 'その他', + + 0xB0: '高齢者', 0xB1: '障害者', 0xB2: '社会福祉', 0xB3: 'ボランティア', 0xB4: '手話', + 0xB5: '文字(字幕)', 0xB6: '音声解説', 0xBF: 'その他', + + 0xC0: 'テニス', 0xC1: 'バスケットボール', 0xC2: 'ラグビー', 0xC3: 'アメリカンフットボール', 0xC4: 'ボクシング', + 0xC5: 'プロレス', 0xCF: 'その他', + + 0xD0: 'アクション', 0xD1: 'SF/ファンタジー', 0xD2: 'コメディー', 0xD3: 'サスペンス/ミステリー', 0xD4: '恋愛/ロマンス', + 0xD5: 'ホラー/スリラー', 0xD6: 'ウエスタン', 0xD7: 'ドラマ/社会派ドラマ', 0xD8: 'アニメーション', 0xD9: 'ドキュメンタリー', + 0xDA: 'アドベンチャー/冒険', 0xDB: 'ミュージカル/音楽映画', 0xDC: 'ホームドラマ', 0xDD: '青春/学園/アイドル', + 0xDE: '任侠/時代劇', 0xDF: 'その他', + + 0xE0: '中止の可能性あり', 0xE1: '延長の可能性あり', 0xE2: '中断の可能性あり', 0xE3: '同一シリーズの別話数放送の可能性あり', + 0xE4: '編成未定枠', 0xE5: '繰り上げの可能性あり', 0xE8: '中断ニュースあり', 0xE9: '当該イベントに関連する臨時サービスあり', + 0xEF: 'NC', + }; + // channelId ごとに programs をまとめる const programsIndex: { [key: number]: DBSchema.ScheduleProgramItem[] } = {}; for (const program of programs) { @@ -109,6 +167,13 @@ class IPTVModel extends ApiModel impleme str += ``; str += ` '; } }${ program.name } `; if (program.description !== null) { str += `${ program.description } `; } + if (program.genre1 !== null) { + str += '' + genrel[program.genre1]; + if (program.genre2 !== null) { + str += '(' + genrem[(program.genre1 * 16 + program.genre2)] + ')'; + } + str += ' '; + } str += '
- 本来,EPGには,ジャンルを3セット(4セット?)まで設定出来ますが,この処理では,一つ目のジャンル(genre1,2)だけ,表示する様にしています。
- ジャンルを正しく設定していない番組があります。
その場合は,ジャンル表示が,おかしな事になるかもしれません。 - 本パッチは,EPGStation v1用です。
v2系で試したい場合,EPGStation/src/model/api/iptv/IPTVApiModel.ts
辺りを弄ってみて下さい。 - 一部のサブジャンルは,修正を入れてます。
表現が冗長なもの,例えば「国内ドラマ」→「国内」など。 表示は「ドラマ(国内)」となります。
TypeScript,初めて触りました(笑
正直,誰得?ネタですが,うまく表示できてスッキリです(笑
折角動いたのなら『GitHubでPRとかしないの?』って話も… ですが,ニーズ無さそうなので… しません(笑
コメント 0