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って素敵な話が有るのですが,今の所,マージされていないようです。
そこで今回は,放送局ロゴデータの準備から表示まで,全部,手作業でやってみます。
この作業,ただただ面倒,万人向けじゃないです(笑
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色にしてみました。
ロゴデータの詳細に関しては…
広帯域 CS デジタル放送運用規定および BS・広帯域 CS 共用デジタル受信機機能仕様
広帯域 CS デジタル放送 ダウンロード運用規定
4 ダウンロードの用途と前提
(3) ロゴデータの更新
- 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