TCL 32S5400の地デジをスマホで見る。番組表付きAndroidアプリとM3U IPTVに対応しました

Android TV
スポンサーリンク

テレビのチューナーをPCから使えるようになると、次はスマホでも見たくなる。

前回のTCL 32S5400のroot化・BonDriver化の記事では、テレビの画面でYouTubeなどを使いながら、裏では独立した2系統で地デジを受信するところまで進めた。

今回は、その配信先をAndroidスマートフォンとIPTV対応プレーヤーにも広げた。

作ったのは、番組表から局を選んで視聴できる専用Androidアプリと、テレビ自身がM3UプレイリストとXMLTV番組表を返すIPTV機能だ。番組情報は空きチューナーで自動収集し、視聴アクセスがあれば中断して明け渡す。

あわせて、リモコンで画面を消したときに通信が切れる問題にも手を入れた。

この記事の対象は、TV側「TCLTV-Bondriver 0.6.0」と、スマホ側「TCLTV-Android-Viewer 0.4.1」。

2026年10月26日時点の開発版を紹介する。

スマホ版のライブ画面。Android 11エミュレーター上の自作テスト映像で、公開画像の局ロゴは汎用表示に置き換えている。

UIは0.3.0で導入し、0.4.1でも引き継いでいる。

PCを中継せず、テレビから直接受け取る

基本の構成はシンプルだ。テレビの内蔵チューナーで受信したTSをLANへ送り、スマホやPCで再生する。

テレビ側で別の動画アプリを開いていても、配信は裏で続ける。

TCL 32S5400(root・配信セットアップ済み)
  ├─ BonDriver → Windowsの視聴ソフト
  ├─ 専用Androidアプリ → ライブ視聴・番組表
  └─ M3U / HTTP MPEG-TS → IPTV対応プレーヤー

初回設定後の視聴に、PC側Python、USB接続、ADBの常駐は不要。

スマホで視聴するためだけに、PCを起動し続ける必要はない。

スマホはTVと通信できるWi-Fiにつなぐ。TV側はWi-Fiでも有線LANでもよい。

同じ家庭内LANで使う構成で、外出先から接続する機能はまだ実装していない。

いわゆるロケフリに近い使い方のうち、まずは家の中で見られるところまで作った、という位置付けだ。

まずはTV側を0.6.0へ更新する

前提となるのは、対応するTCL G06日本向け環境で、Magiskによるrootと地デジのチャンネルスキャンが完了していること。

root化の経緯は前回の記事にまとめた。配布APKは、未改造のTVをroot化するアプリではない。

  1. TV側0.6.0のReleasesから一式ZIP、またはTV用APKを入手する。
  2. Windowsセットアップの「APKをTVへ導入」でTV用APKを上書きする。
  3. TVで「1. セットアップ」を実行し、対象アプリへのMagiskのroot許可を確認する。
  4. TVを一度再起動し、通信維持・IPTV・番組表の自動収集が起動するのを待つ。
  5. 必要ならTVの「画面消灯中の通信維持を有効にする」で設定を再適用し、状態欄を確認する。

0.6.0は視聴優先の制御を含むネイティブ配信処理も更新しているため、0.5.0からの場合もAPKを上書きするだけでは完了しない。

セットアップの再実行とTVの再起動まで行う。既存のBonDriver設定と接続キーは引き続き利用できる。

掲載画像はTV版0.5.0の状態表示。有線LANとWi-FiのIPを確認でき、0.6.0も同じ基本操作を引き継いでいる。

画像のアドレスは検証機のもので、自分のTVに表示されたIPを使う。

詳しい導入条件や更新手順は、GitHubの画像付き手順を参照してほしい。

他機種・別ファームウェアへ、そのまま適用できる汎用ツールとしては扱っていない。

スマホだけで接続情報と局一覧を取得する

スマホ版は、BonDriverとは別のリポジトリで開発している独立したAPKだ。

配布対象はAndroid 8以降のARM64端末で、スマホ側のrootは不要。

PCで作ったINIをコピーする方法に加え、TVから直接、接続情報を受け取れるようにした。

  1. スマホ版0.4.1のReleasesから TCL-Viewer-0.4.1-arm64-v8a.apk を入手してインストールする。旧版は上書きできる。
  2. TV側で「スマートフォンを接続(確認コードを表示)」を開く。
  3. スマホをTVと通信できるWi-Fiにつなぎ、下部の「設定」から「近くのTVを探す」を押す。
  4. TVが見つからなければ、TVの状態欄に表示されたIPを手入力する。
  5. TVの6桁の確認コードを入力し、使用するチューナーを選んで「TVから接続情報・局一覧を取得」を押す。
  6. 局一覧から見たい局を選び、再生する。

TV検索、IP手入力、確認コードによる取得に対応。

エミュレーターで撮影した0.3.0の接続画面で、0.4.1でも同じ基本操作を使う。

設定画面は上下にスクロールできる。

確認コードは2分間・1回限り有効。

取得する前にTVでYouTubeなどへ切り替えると受付が終了するので、先にスマホとの接続を済ませてから戻る。

ゲストWi-Fiなど端末間の通信が制限される環境では、TV検索や接続ができない場合もある。

局一覧は東京固定ではなく、TV本体のスキャン結果から取得する。

検証機では37サービスが登録されていた。

ただし、これは37局をいつでも視聴できるという意味ではない。主・副チャンネルや臨時サービスを含む一覧であり、その時間に放送されていないサービスは映らない。

IPが変わった場合は、スマホの設定で新しいIPを入力して保存する。

局一覧やIPTV情報を取り直したいときは、TVで確認コードを表示して再取得する。

スポンサーリンク

番組表から選んで、そのまま全画面へ

アプリの下部には「ライブ」「番組表」「設定」を置いた。

番組表で番組をタップすると詳細が開き、その局の視聴へ進める。画面構成はPixelの操作感を参考にし、ライト・ダーク表示にも対応している。

番組表は、受信した放送TSのEITから集める方式だ。

最大48時間分を保存するが、全局・全時間帯の情報が最初からそろっているわけではない。

上部の更新アイコンで各放送波を順番に受信し、情報を集める。番組表更新中は、そのチューナーでの視聴が一時停止する。

ここで説明した専用アプリ内のEIT番組表と、TV側が自動収集して外部IPTVアプリへ配信するXMLTVは別の機能だ。TV側の自動収集のために、スマホ側で局巡回を始めたり、現在の視聴を止めたりする必要はない。

映像の全画面ボタンを押すと横向きになり、ステータスバー、ナビゲーションバー、通常の一覧も隠れる。

再生パネルは再生中3秒後に消え、画面をタップすると戻る。前後の局、再生・停止、消音、比率維持と画面いっぱいの拡大を映像上で操作できる。

横向き全画面の操作パネル。

映像はエミュレーターで再生した自作テスト素材で、実際の放送映像ではない。

局一覧や番組表では、対応局の実際のロゴも表示する。ただしロゴ画像はAPKに同梱せず、外部から取得して端末へキャッシュする方式にした。

未対応局や取得できない場合は、局名の短縮表示へ戻る。

この記事の公開スクリーンショットでは汎用表示に置き換えている。

映像デコーダーはAndroid内蔵のMediaCodecを優先し、未対応の場合はVLC側へフォールバックする。

開発途中ではXiaomi 12T Proで「音は出るが映像が黒い」問題があり、0.2.0で映像が出ることを実機で確認した。

ライブ再生の既存の検証は、実TVとAndroid 11エミュレーターで行った。0.4.1で追加したM3U・XMLTV URLコピーもエミュレーターで確認している。

音声だけ出る場合は、設定の「デコーダー」と「映像が黒いとき」から方式を切り替え、局を選び直す。

「再生の診断情報」では受信量、映像のデコード数・描画数などを確認できる。

M3Uを登録して、IPTV対応アプリでも視聴する

専用アプリ以外から見るために、TV側へM3UプレイリストとHTTP MPEG-TSの配信も追加した。

配信するのはテレビ自身で、PCでの中継は不要だ。

TVの「IPTVのM3U・番組表XMLを表示」を開くと、ネットワークとチューナーごとのM3U URL、および両チューナー共通のXMLTV URLを確認できる。

スマホ版0.4.1では、TVの確認コードで接続情報を取り直すと、「設定」→「IPTVのM3U接続先」→「URLをコピー」でコピーできる。

掲載画像は0.4.0のM3U表示画面。画像内のIPはテスト用、接続キーもダミーで、そのまま登録しても接続はできない。0.4.1では番組表XMLのコピー操作も追加した。

チューナー1用
http://TVのIP:40560/iptv/IPTV専用キー/playlist.m3u?tuner=0

チューナー2用

http://TV
のIP:40560/iptv/IPTV専用キー/playlist.m3u?tuner=1

表示上のチューナー1・2は、URLではそれぞれ tuner=0・tuner=1 に対応する。

実際には、TVまたはスマホが表示するURLを使えばよい。

取得したURLをVLCなどのネットワーク再生・プレイリスト登録へ渡す。M3U対応というだけでなく、HTTP MPEG-TS、MPEG-2映像、AAC音声を再生できるアプリが必要だ。

TV側では画質変換を行わず、指定したサービスの映像・音声などを送る。

M3Uは局一覧であり、番組表そのものではない。

0.6.0では、M3Uの局一覧に加えてXMLTV形式の番組表を配信する。

M3Uの tvg-id とXMLTVの channel id をそろえ、M3Uにも番組表URLを埋め込んだ。

対応プレーヤーならM3Uの再読み込みで認識でき、未対応ならEPG欄へXMLTVのURLを別途登録する。

スマホ版0.4.1では、TV更新後に確認コードで接続情報を取り直すと、「設定」→「IPTVのM3U接続先」→「番組表XMLをコピー」が使える。XMLは両チューナー共通で、gzip圧縮版も用意した。

XMLTV: http://TVのIP:40560/iptv/IPTV専用キー/epg.xml
圧縮版: http://TVのIP:40560/iptv/IPTV専用キー/epg.xml.gz
スマホ版0.4.1でM3U・番組表XMLのURLをコピーする
0.4.1のXMLTV連携画面。Android 11エミュレーターで撮影し、IPと接続キーはダミーにしている。

URLにはIPTV専用の接続キーが入る。TVのIPが変われば、外部プレーヤーの登録URLも更新する。

番組表は裏で自動取得し、視聴が来たら明け渡す

TV版0.6.0は、第2チューナーを優先して空きを探し、使用中なら第1チューナーも確認する。両方使用中なら待機し、放送波を一巡した後は3時間ごとに番組表を自動更新する。

取得済みの情報はTVへ保存し、サービス再起動後も利用できる。

BonDriver、専用スマホアプリ、外部IPTVから通常の選局要求やTS接続が来たら、番組表収集を中断して視聴へ渡す。

視聴中のチューナーを自動選局せず、切断後も30秒は再接続を優先して待つ。その後、空いた側で未取得分から再開する。

M3UやXMLの取得だけでは選局せず、視聴要求としても扱わない。現在視聴中の放送波に含まれるEITも、受信を止めずにTV内部で取り込む。

TVの「番組表XMLを今すぐ更新(視聴優先)」から更新を早める場合も、視聴を優先する動作は変わらない。

実機では、収集中の通常選局が約1.6秒で成功した。2系統で視聴している間は収集が待機し、片方を閉じると空いた側で再開した。

その間も、もう片方は約85MBを受信し続け、TS同期エラーは0だった。

最終確認時点で4,053番組を取得したが、受信できた局・期間だけの情報であり、全局の1週間分を必ず取得できる機能ではない。

初回収集前や未受信局では番組が空の場合がある。3時間の更新間隔は実装値で、3時間経過を待つ長時間試験までは実施していない。

TV版0.6.0で番組表XMLを自動更新している状態
TVの状態欄で保存番組数・自動更新の進捗を確認できる。IPは検証機のもので、自分のTVに表示されたものを使う。

詳細はXMLTVの登録・自動取得手順と0.6.0の検証記録にまとめた。

スポンサーリンク

PCとスマホを同時に使うときは、チューナーを分ける

独立したチューナーは2つ。同じものをBonDriver、専用スマホアプリ、外部IPTVアプリで共有するため、同時利用するときは使用するチューナーを分ける。

  • PCのBonDriverでチューナー1を使い、スマホアプリでチューナー2を見る。
  • スマホアプリでチューナー1を使い、別のIPTVプレーヤーでチューナー2を見る。

同じチューナーを別のソフトから選局すると、元の視聴へ影響する。

チューナーが2つだからといって、3台以上でそれぞれ自由に別局を選べるわけではない。

IPTVは各チューナー1セッションずつで、同じIPTVチューナーを別の視聴セッションが使用中なら拒否する。番組表の自動収集はこの視聴枠を占有せず、視聴アクセスがあれば明け渡す。

リモコンで画面を消しても、配信を続ける

今回もう一つ手を入れたのが、テレビをリモコンで消したときの動作だった。

通常のAndroidの通信維持ロックだけでは、TCL独自の深い待機処理でWi-Fiなどが切れてしまう。

0.5.0で追加した常駐サービスのCPU・Wi-Fiロックと、配信アプリだけを対象とするTCLの常駐・自動起動などの許可設定を、0.6.0でも引き継いでいる。

さらに、AC給電時の深い待機を避ける設定を保存して変更する。

Wi-Fiだけでなく、有線LANの通信と受信処理も維持する構成だ。

実際のリモコン短押しで画面OFFを確認し、有線経由のBonDriverとWi-Fi経由のIPTVで同時に受信量が増えることを確認した。

BonDriver側は試験全体100秒で約201MBを受信し、TS同期エラーは0。100秒の全区間を消灯していたわけではなく、消灯後に両方の増加を確認した区間は少なくとも12秒だった。

スマホ版も、TVの画面OFFを確認した試験で映像・音声・番組情報を受信し、最後の5秒間でも映像が152フレーム進むことを確認している。

消灯時の測定条件はTV版0.5.0の検証記録とスマホ版0.4.0の検証記録に残した。これらは消灯対応を追加した時点の試験で、0.6.0の自動番組表収集とは分けて記録している。

消灯中も処理を動かすため、通常の省電力待機より消費電力は増える。

AC給電中の自動消灯も抑制されるが、リモコンで画面は消せる。

完全な電源断や再起動中に配信できる機能ではない。

また、第1チューナーはメーカー側で消灯時に一時停止されることがある。

接続を保って再捕捉するようにしたが、その間は映像・音声が短く止まる場合がある。

長時間の安定性や、すべての待機条件を保証する試験まではできていない。

不要になったらTVの「通信維持を停止する」で、常駐サービスとIPTVを停止し、今回追加した許可と保存した電源設定を戻せる。

スマホのM3U画面に表示する通信維持の状態は取得時の情報なので、TV側で変更した場合は再取得して確認してほしい。

配布先と、これからの課題

ソースコード、APK、ZIP、画像付き手順は次の2つのリポジトリに分けて公開している。

ZIPはGitHub Releasesから入手できる。

現状は対応機種・ファームウェア限定の家庭内LAN向け開発版だ。

XMLTVの自動取得と配信には対応したが、外出先接続、画質変換、専用スマホアプリの録画、字幕・データ放送表示は未実装だ。

一部の外字・DRCSは正しく表示できない。

それでも、テレビに内蔵されたチューナーを、テレビの画面だけに閉じ込めずに使えるようになってきた。

PCで別の局を受信しながら、スマホでは番組表から見たい番組を選ぶ。

最初に考えていた使い方が、少しずつ日常の操作へ近づいてきた。

コメント

タイトルとURLをコピーしました