SSブログ

kodi IPTV Simple PVR Addonで局ロゴ表示 [Raspberry Pi]

2022/01/19 追記
Mirakurun 3.9.0-betaでBS/CSの局ゴロ取得を行う様になり,小細工無しで局ゴロが表示される様になりました。

今回もkodiの "IPTV Simple PVR" addonのネタ。

前のエントリーでは,ジャンル表示を調整して,正しく表示するようにしてみました。
で,今回は,放送局ロゴを表示させてみます。

え,局ロゴって表示するよね? って…思われた方,ナイス ツッコみ(笑

はい,地デジ分は表示します… ですが,BS/CSは表示されないのです。
と言うのもMirakurunには,BS/CSの放送局ロゴを取得する機能が実装されていないのです。

BS/CSの放送局ロゴ収集に関しては,Feature/bscs logo by k-uraki · Pull Request #51 · Chinachu/Mirakurun · GitHubって素敵な話が有るのですが,今の所,マージされていないようです。

そこで今回は,放送局ロゴデータの準備から表示まで,全部,手作業でやってみます。
この作業,ただただ面倒,万人向けじゃないです(笑

で,やってみた結果は,こんな感じになります…
IPTV Logo1.jpg


SWの構成は…

  • RaspiOS
    $ uname -a
    Linux rpi4rec 5.10.11-v7l+ #1399 SMP Thu Jan 28 12:09:48 GMT 2021 armv7l GNU/Linux
    
  • Mirakurun 3.5.0
  • EPGStation 1.7.6
  • kodi v18.7
    • IPTV Simple PVR addon
    • AMAZON VOD addon
    • skin.OSMC(改)

な感じです。

補足:
  • Mirakurun及び,EPGStationは,dockerを使わずにセットアップしています。
  • kodiは,apt installで入るヤツ。(面倒なことはしていません)
  • IPTV Simple PVR addonは,v18用としては3.10.1が最後。 でもラズパイのkodiには3.8.8が入ります。
    v19用は,これを書いている時点では,7.5.0が最新。



作業の流れ:



1. 放送局ロゴを入手する

WindowsでTvTestが動かせている方は,簡単に放送局ロゴを入手する事が出来ます。
# Windows以外のOSで,局ロゴを取得する方法を調べてみたのですが,見つけられませんでした。

TvTest上で右クリック…

  • 設定(O)… →EPG/番組情報
    • ロゴのフォルダ: [ 適切な場所を指定します ]

と設定すれば,TvTestが局ごとのbmpファイルを生成してくれます。

今回は,BS/CSの物が欲しいので,NHK BS1を受信したまま,しばらく放置しておきます。
もし,地デジの物が欲しい場合は,各チャンネルをそれぞれ受信する必要があります。

  • TvTestが吐き出すbmpファイルの名前付ルールは…
    ネットワークID_ロゴID_バージョン_ロゴの種類.bmp
    • ロゴIDは,そのネットワーク内(?)でユニークである事。
    • ロゴの種類は,00〜05の6種類。
  • 局ロゴは,常に降っているわけではない為,運が悪いと全く収集できない事があります。
    実は実験中にCS局のロゴが降ってなくって,最新版を収集できませんでした。



2. 放送局ロゴ(BMP)をPNG形式に変換する

今回は,"PNGoo" と言うWindows用のソフトを使って,まとめて処理しました。
"PNGoo"は,PNGファイルを操作するソフトなのですが,BMPからPNGへの変換もしてくれるので,一手間ですみます。

"PNGoo"の設定ですが,色数だけ行いました。

Colour Settings… で Colours: [ 128 ] とします。

これは,少しでも容量を減らすためと,元々,放送波に載ってくるロゴは,共通固定色のみ(128色)のPNG形式なので,それに合わせて128色にしてみました。

ロゴデータの詳細に関しては…

ARIB TR-B15

広帯域 CS デジタル放送運用規定および BS・広帯域 CS 共用デジタル受信機機能仕様
 広帯域 CS デジタル放送 ダウンロード運用規定
  4 ダウンロードの用途と前提
   (3) ロゴデータの更新

あたりを見てください。 結構細かく定義されています(笑
Hint:
  • TvTestが吐き出す "生データ形式" の局ロゴは,PNG形式なのですがパレット情報(共通固定色)を含んでいない為,そのままでは表示できません。



3. PNGファイルをbase64化する

Mirakurunのデータファイル services.json は,JSONフォーマットのテキストファイルです。
これにバイナリなPNGファイルを,直接,押し込む事は出来ません。
そこで,PNGファイルをテキスト化(base64)します。

base64に変換する方法としては,オンラインのサービスがお手軽ですが,今回は,数をこなさなければならないので,簡単なバッチを用意して処理します。

ご参考:

b64encode.bat

@echo off if ""%1""=="""" ( echo ファイルをbase64エンコードします。 echo 対象ファイルをD&Dして下さい。 pause exit /b ) set "xx=%*" for %%f in (%xx%) do ( call set "target=%%~f" call :sub0 ) pause exit /b :sub0 echo Target: %target% powershell -command "$raw = '%target%'; $b64 = \"$raw.b64.txt\"; [System.IO.File]::WriteAllText($b64, [Convert]::ToBase64String([System.IO.File]::ReadAllBytes($raw)))"

powershell -command ”〜 の行は1行で記述します。

あとは,このバッチへPNGファイルを投げ込めば,PNGファイルと同じ場所に,*.b64.txtってファイルが生成されます。


以下はおまけ。 上記バッチで生成した*.b64.txtを元に戻すバッチ。 同様にD&Dで動作します。

b64decode.bat

@echo off if ""%1""=="""" ( echo Base64ファイルをデコードして元のファイルへ戻します。 echo b64.txtなファイルをD&Dして下さい。 pause exit /b ) set "xx=%*" for %%f in (%xx%) do ( call set "target=%%~f" call :sub0 ) pause exit /b :sub0 echo Target: %target% powershell -command "$b64 = '%target%'; $raw = $b64 -replace '.b64.txt', ''; if ($raw -eq $b64) { $raw = \"$b64.bin\" }; [System.IO.File]::WriteAllBytes($raw, [Convert]::FromBase64String([System.IO.File]::ReadAllText($b64)))"



4. Mirakurunに埋め込む

* 今回の一連の作業の中で,一番面倒で手間な作業です(笑

Mirakurunのデータファイル services.json に作成したネタを埋め込んでいきます。

services.json をテキストエディタで開いてみると…

$ sudo nano /usr/local/var/db/mirakurun/services.json
  GNU nano 3.2                                   /usr/local/var/db/mirakurun/services.json                                              

[{"__integrity__":"cJf7qxeZLQ/7V0umCbLyMSt9uR9M8vNFKNp/ziCt1ps="},{"id":40$


って,1行になってます orz
このまま編集するのは,あまりにも過酷なので… オンラインサービスなどを使って整形します。

整形後 services.json (先頭部分抜粋)

[ {"__integrity__":"cJf7qxeZLQ/7V0umCbLyMSt9uR9M8vNFKNp/ziCt1ps="}, { "id": 400101, "serviceId": 101, "networkId": 4, "name": "NHKBS1", "type": 1, "logoId": -1, "channel": { "type":"BS", "channel":"BS15_0" } } : : ]

これに,作成したbase64ネタ(0004_000_037_05.png.b64.txt)を,"logoData" として埋め込みます。

[ {"__integrity__":"cJf7qxeZLQ/7V0umCbLyMSt9uR9M8vNFKNp/ziCt1ps="}, { "id": 400101, "serviceId": 101, "networkId": 4, "name": "NHKBS1", "type": 1, "logoId": -1, "channel": { "type":"BS", "channel":"BS15_0" }, "logoData": "iVBORw0KGgoAAAANSUhEUgAAAEAAAAAkBAMAAADLIiGhAAAABGdBTUEAALGPC/xhBQAAABJQTFRFVVX/qv//qqr/Var/////AFX/a11a6gAAAQZJREFUOMvFk0GSgyAQRa0kHGAqeIA4eAGB/QDfPQVy/6tMQ0gWsa1ZJdOW3Zb1hP6/ZSh/xPBRIIfi6XbFR8cCG7JPPiM7gwPgFjZ38wmYWcAA6wUIGzzfg1owmqtZLx6WBSAwK2tGM6uVBaay0JXsSaT5rU6eNQdEULjau6KHpsGEHQAyONXabMAL4KdJ0acGNtZaTq/ASMOiJH/uldbZAzWhWkSJBTLN6Pl6kHvAQJCI7y5PMiqudeToCAf47kPggKC1av/J0p1ienh0aJoUDlCh6KeJPJDbLiocbhHb6ixATda9pRM0sPVAJnVPPnzxKrpRUfI+FE0hGrpMdyfP9j+OPx+/vBZbwvJOv2AAAAAASUVORK5CYII=" } : : ]
注意:
  • Mirakurunを使って日が経っている場合,地デジ分は,埋め込まれているかもしれません。
  • "logoData": "〜" は1行で記述しています。
  • 本来,logoIdには適切な値が設定されるべきですが,-1のまま放置してます。
  • JSONなので,"," とか 閉じ括弧など抜けやミスがないように!
  • BSのマルチ編成分は,kodiのチャンネルマネージャーで非表示にするので,省略してもOKです。
    例えば141,142,143の内141だけにロゴの設定します。

一通り作業が終わったら,必ず,JSONの構文チェックを行いましょう。
チェックOKなら services.json を差し替えます。
1行に直す必要は無く,整形された状態のままで大丈夫です。
Mirakurunが勝手に1行にしてくれます。



5. 動作確認とトラブル対応

kodiを起動して "PVR・TV放送" を開いた時に表示されるEPGに放送局ロゴが表示されていればOKとなります。


もし,ロゴの表示がうまくいかない場合

  • 何度かkodiを起動しなおしてみる。
    • IPTVの情報取得(更新)は起動時に行われる為,一旦,kodiを立ち上げ直してみます。
  • 「クリア データ」してみる。
    • 「設定 →Live TV →一般 →クリア データ」で,全消し,再取得が行われるはず…

「クリア データ」で,うまく消えない場合,以下コマンドで,kodiが保持しているデータを完全に消去します。
実行する場合は,kodiを停止してから行います。

$ rm ~/.kodi/userdata/Thumbnails/*/*.png
$ rm ~/.kodi/userdata/Database/Textures13.db

* 他のサムネなども全消しされるかも… (未確認)




余談:

今回の実験の為,放送局ロゴを再取得しました。
BSは問題無く収集出来たのですが,CS分が落ちてこない orz
どうやら3月になってから,一切落ちてきていないらしい…
さてさてどうしたものか…

EPGStationを使っているのだからと言う訳で Harekaze/pvr.epgstation を試してみた。
チャンネルの並び順がfreedomすぎて,直してまで使う気が起きない…
しかもv18用なので,v19じゃインストール出来ないっぽい?




コメント(0) 
共通テーマ:趣味・カルチャー

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。