テレビの内蔵チューナーを、テレビ自身で動くMirakurunから使えるようにしたい。
前回は、TCL 32S5400のroot化とBonDriver化を進め、PCのTVTestやスマートフォンへ地デジを配信できるようにした。今回はその受信機能を、MirakurunのHTTP APIから利用できる形へまとめた。
用意したのは、TVへ入れるTCL TV Mirakurunというセットアップアプリ。
Linux実行環境、Node.js、Python、Mirakurun本体をAPKへ同梱し、TVに登録された地デジ局から設定を作る。構築が正常に終わるとTVを自動再起動し、Mirakurunも自動で起動する。
この記事は2026年10月28日時点のv0.1.3、同梱Mirakurun 4.1.5を対象にしている。
スクリーンショットは同日に撮影した実機のTV画面と、そのTVへ接続したブラウザーの画面。エミュレーターや合成画像ではない。
対応機種とroot化の条件
一般的なAndroid TVへ入れれば動くアプリではない。
対象はTCL 32S5400系のG06/MT5867、Android 11、32bit ARMの確認ファームウェアに限られる。
同じ製品名でも、基板やファームウェアが異なる個体は未検証だ。
- TVにMagiskが導入され、アプリからroot権限を使えること。
- アンテナが接続され、TV本体で地デジを受信できること。
- TV本体の地デジチャンネルスキャンを完了していること。
- TVのデータ領域に1GB以上の空きを確保することを推奨。
- PCとTVが同じLANにあり、初回のAPK導入に使うADBへ接続できること。
本アプリはroot化アプリではなく、ブートローダーのアンロックやboot・vbmetaの書き込みは行わない。
対応するベンダーライブラリーのSHA-256を検査し、一致しなければチューナー配信の導入を中止する。
root化がまだの場合は、先に元記事のFastbootを使った導入説明と、Magisk適用済みbootの対応条件を確認してほしい。
アンロックやuserdata消去ではTVのデータが失われる。
ここでは、root化済みのTVへのMirakurun導入から説明する。
BonDriver版との違い
BonDriver版は、Windows側の視聴ソフトからTVのチューナーを開く構成だった。
Mirakurun版では、TV本体でMirakurunが動き、ネットワーク越しに局情報・番組情報・受信TSを提供する。
通常運用でPCにMirakurunやPythonを常駐させる必要はない。
BonDriver版のTV用APKを先に入れる必要はない。
対応TVなら、このアプリだけでチューナー配信とMirakurunの実行環境を構築する。
既存のネイティブ配信環境がある場合は、その設定を保持して利用する。
対象は地デジ2チューナー。BS・CS・4Kはこの記事の構成では扱わない。
また、Mirakurunの導入だけで録画予約システムまで完成するわけではない。
録画運用に使うクライアントや保存先の構築は別の作業になる。
導入の流れ
- TVのroot権限・受信環境・ADB接続を確認する。
- GitHub ReleasesからTV用APKをダウンロードする。
- ADBでAPKをTVへインストールする。
- TVでセットアップを実行し、Magiskのroot要求を許可する。
- 構築完了後の自動再起動を待つ。
- PCのブラウザーからTVの40772番ポートを開く。
APKとADBを用意する
配布先はTCLTV-Mirakurun v0.1.3のReleaseページ。
Assetsを開き、TCLTV-Mirakurun-v0.1.3.apkをダウンロードする。Source codeのZIPはソースであり、そのままTVへインストールするファイルではない。
APKのサイズは約62MB。実行環境を同梱しているため、セットアップ時にTV上でnpmなどを追加ダウンロードする作業はない。
PCにはGoogle公式Platform-Toolsを用意する。
以下のコマンドはADBがPATHへ登録されている前提。PowerShellでplatform-toolsフォルダーから実行する場合は、adbを.\adb.exeに読み替える。
必要なら同じReleaseのSHA256SUMS.txtと照合する。
Get-FileHash .\TCLTV-Mirakurun-v0.1.3.apk -Algorithm SHA256TVへ接続してAPKを入れる
初回は、すでに通信できるTVのIPアドレスを使う。
以下の192.168.1.160は検証機の例なので、自分のTVのネットワーク設定に表示されたIPへ置き換える。TV側でADBデバッグを有効にしておく。
adb connect 192.168.1.160:5555
adb devices -l一覧で接続先がdeviceになれば接続できている。
unauthorizedなら、TV画面に出るPCのデバッグ許可を確認する。ネットワークADBのポートが異なる環境では、TV側の設定に合わせる。
root権限も、接続と分けて確認できる。
Magiskの許可要求が出た場合はTV側で許可し、uid=0(root)が返ることを確認する。
adb -s 192.168.1.160:5555 shell "su -c id"続いてAPKをインストールする。-sで接続先を明示しているので、有線側とWi-Fi側の両方がADBに見えている場合でも対象を指定できる。
adb -s 192.168.1.160:5555 install -r ".\TCLTV-Mirakurun-v0.1.3.apk"Successが表示されたら、TVのアプリ一覧からTCL TV Mirakurunを開く。
3. TVでセットアップする

「1. セットアップ / 局更新(完了後に自動再起動)」を選ぶ。
初回にMagiskのroot要求が出たら、このアプリへの権限を許可する。
ADBのデバッグ許可とは別の許可なので、PCから接続できていてもアプリ側のroot許可が必要になる。
セットアップは、同梱のLinux実行環境を展開し、TVのスキャン済み局情報からMirakurunの設定を作成する。
地域固定のチャンネル表は使わない。
既存のチューナー配信環境がある場合はそのファイルと起動フックを確認し、設定を保持して利用する。
初回は数分かかる場合がある。処理中は電源を切らずに待つ。
構築が正常に完了すると、常駐と自動起動の設定を保存し、5秒後にTVを自動再起動する。
構築に失敗した場合は再起動せず、画面にエラーを表示する。
この手順は、初回だけでなく局一覧を更新するときもTVを再起動する。
視聴や別の作業をしている場合は、再起動してよいタイミングで実行してほしい。
再起動後の状態を確認する
再起動後はMirakurunも自動で起動する。TVの通常起動が終わってから、チューナー配信とサーバーの準備ができるまで少し待つ。起動直後にブラウザーで開けない場合は、すぐに構築し直さず、まず起動状態を確認する。
TVアプリの「状態を確認」を選び、必要に応じて下へスクロールする。Mirakurun runningがサーバーの動作を示し、その下にはチューナーとネットワークの状態が表示される。

手動で停止した後に再開する場合は、「2. 起動・自動起動を有効化」を使う。
通常の構築直後は、自動再起動後の自動起動を待てばよい。
PCのブラウザーからMirakurunを開く
PCのブラウザーで、TVアプリに表示された接続先を開く。末尾のポート番号は40772。ADBの5555番とは用途が異なる。
http://TVのIPアドレス:40772/
# 検証機のWi-Fi側の例

http://192.168.1.160:40772/
# このアプリの直結有線用アドレス

http://169.254.95.200:40772/Home画面のStatusでは、プラットフォームやメモリー、番組情報の取得状況を確認できる。Servicesは検出したサービスの一覧だ。TVに登録した多重数と、ここに表示されるサービス数は同じとは限らない。
下へスクロールし、Tuners (2)にTCL-G06-0 (GR)とTCL-G06-1 (GR)が並ぶことも確認する。番組表の収集中や視聴中は、プロセスや利用者の情報が追加表示される。


番組表を確認する
上部のEPGを開くと、受信した番組情報を番組表として確認できる。
初回はサービス検出と番組情報の収集に時間がかかる。空欄があっても、受信状況と取得の進行を確認しながら待つ。

番組DBはMirakurun側で遅延保存される。初回収集の途中ですぐ再起動すると、まだ保存されていない番組情報は再取得が必要になる。番組表の表示と、実際の映像・音声を再生できることは分けて確認したい。
映像を見る場合
HTTPのTSを対応プレーヤーへ渡す
Mirakurunは配信サーバーなので、Web UIが表示できたことだけで、ブラウザー内の映像再生まで確認できたとは言えない。
MPEG-2映像とAAC音声を含むHTTP MPEG-TSを扱えるプレーヤーやMirakurun対応クライアントを使用する。TV側でH.264などへの画質変換は行わない。
APIを直接使う場合は、まず次のURLからサービス一覧を取得し、見たいサービスのidを確認する。
http://TVのIPアドレス:40772/api/servicesそのIDを使ってストリームURLを作る。以下の数値は検証機のNHK総合の例であり、他地域・他サービスへそのまま流用する値ではない。
http://TVのIPアドレス:40772/api/services/取得したid/stream?decode=1
# 検証機で使った例

http://192.168.1.160:40772/api/services/3273601024/stream?decode=1例えばVLC media playerでは「メディア」→「ネットワークストリームを開く」からURLを指定できる。
操作の詳細はVideoLANの公式ドキュメントを参照してほしい。
この記事の実測はAPIからのTS受信とFFmpegによるデコードで、VLCの操作画面を撮影したものではない。
Mirakurunの外からBonDriverや既存IPTVも使う場合は、同じ物理チューナーを重複して利用しない。
この構成の各チューナーのネイティブTS接続は1クライアント用で、別アプリの同時選局は競合の原因になる。
有線LANとWi-Fiの使い分け
ルーター経由で接続する場合は、TVが通常のネットワーク設定で取得したLAN内IPを使う。
検証機ではWi-Fi側が192.168.1.160だったが、この値は家庭ごと・機器ごとに異なる。
PCとTVを有線で直結する場合に備え、v0.1.3はアプリ自身の維持処理でeth0を起こし、169.254.95.200/16を追加・再取得する。
BonDriver側アプリを入れていなくても、この維持処理は本アプリに含まれている。
ルーターから取得済みのDHCPアドレスは変更しない。
PC側の有線アダプターにも同じ169.254.0.0/16のアドレスが必要になる。
Windowsが169.254.x.yを自動割り当てしていれば、その設定で通信できる場合がある。手動設定する場合の例は次のとおり。
変更するのはTVへつないだ有線アダプターで、インターネットへつながるWi-Fiアダプターではない。
PC側の有線IPv4アドレスの例:169.254.95.100
サブネットマスク:255.255.0.0
デフォルトゲートウェイ:空欄
DNSサーバー:空欄
TV側:169.254.95.200
ブラウザー:http://169.254.95.200:40772/同じ169.254.95.200を使うTVを複数台、同じLANへつなぐとアドレスが重複する。
複数台で使う場合は個別の設定が必要だ。変更用の保存先はREADMEに記載している。
Wi-Fiの接続がサーバー起動より遅い場合も、後から取得したIPv4アドレスでアクセスできるように待受け処理を調整した。
接続できないときは、TVアプリに今表示されているアドレスを確認する。
リモコンで画面を消しても動く?
通常のリモコン電源ボタン短押しで画面を消したときも、配信を続ける構成にしている。
CPUと通信の維持、TCLの常駐許可、アプリ独自の有線維持処理を組み合わせている。
実機では画面がOFF、Androidの状態がAsleepになったことを確認したうえで、有線経由のNHK総合のTSを約60秒間受信し、消灯中の受信データから映像をデコードできた。
これは約1分の確認であり、数時間・数日の連続動作を保証する試験ではない。
通信維持中は、通常の省電力待機より消費電力が増える。AC給電中の自動消灯も抑制される。
完全な電源断、コンセントを抜いた状態、再起動中は配信できない。
停止するとき・環境を削除するとき
配信を止めるだけなら、TVアプリで「停止・自動起動を無効化」を選ぶ。このアプリが追加した常駐許可と電源設定も復元する。再開するときは「2. 起動・自動起動を有効化」を使う。
Mirakurun本体まで撤去する場合は、「環境を削除」を選び、確認画面の内容を読んでから実行する。

削除の対象はMirakurun本体、局設定、番組DB、ログ、自動起動。既存のBonDriver環境を利用していた場合は、それを保持する。
このアプリが初めてチューナー配信を導入した場合は、導入前の設定を復元し、TVの再起動を案内する。
APK自体は残るため、再びセットアップして構築できる。
逆に、APKをアンインストールしただけではroot領域の実行環境や起動フックは削除されない。
撤去する場合は先にアプリの環境削除を使う。削除処理は、マウントや使用中プロセスが残る場合、不正な削除先を検出した場合には中止する。
うまくいかないときの確認順
- ADBがつながらない
TV側のADB有効化、TVの現在のIP、PCの接続先LANを確認する。unauthorizedならTV画面の許可を確認する。 - rootを取得できない
MagiskでTCL TV Mirakurunへの許可を確認する。PCのADB許可だけではアプリのroot許可を代用できない。 - 対応ファームウェアではないと表示される
検査を回避せず、対象機種・基板・ファームウェアを確認する。 - 局がない
先にTV本体で地デジスキャンを行い、通常のTV視聴ができることを確認する。その後セットアップで局一覧を更新する。完了後はTVが自動再起動する。 - ブラウザーから開けない
TVアプリの「状態を確認」で現在のIPとサーバー状態を見る。http://で始まる40772番ポートを使い、起動直後は準備を待つ。有線とWi-Fiを別々に確認する。 - 既存設定が不完全と表示される
既存の配信ファイルや起動フックを保護するため処理を止めている。繰り返し構築したりフックを適当に削除したりせず、ログと既存環境を確認する。 - 映像や音声が乱れる
電波の受信状態、他の視聴クライアントとの競合、選局直後の状態を確認する。本実機のTSでも初期ヘッダーや一部AACのデコード警告が出たため、全局・全期間の無エラー動作は確認できていない。
このサーバーはLAN内で使う前提。40772番ポートやADBのポートを、ルーターでインターネットへ直接公開しない。
今回、実機で確認できた範囲
- APKから新しいMirakurun実行環境を展開し、TV登録局から設定を作成。
- NHK総合と日テレを異なる2チューナーで同時配信し、両方の受信映像をデコード。
- 構築完了後の自動再起動とMirakurunの自動復帰。有線・Wi-Fi両方のHTTP応答を確認。
- 画面消灯中の有線配信を約60秒確認。
- BonDriver側の有線維持プロセスを止めた状態で、アプリ自身が有線アドレスを再取得。
- 環境削除のマウント解除・再実行・パス検査を、隔離したテスト環境で検証。
このTVには既存のネイティブチューナー配信環境があり、それを利用して検証している。チューナー配信を一度も導入していないTVの初回導入分岐、他個体・別ファームウェア、長時間運転、全局・全音声は未確認。既存環境での動作確認と、すべての対応条件での保証は分けて考えてほしい。
詳しい試験内容はリポジトリの検証記録へまとめている。
配布先・関連資料
- TCLTV-Mirakurun v0.1.3:APK・SHA-256
- TCLTV-Mirakurun:ソース・README
- TCL 32S5400のroot化とBonDriver化:元記事
- 対応するMagisk適用済みbootの説明
- Mirakurun本体の公式リポジトリ
- Android公式:ADBの接続・インストール方法
開発・保守への支援
この取り組みの開発・保守は、Ko-fiで支援できます。


コメント