MiracastベースのGNOME Network DisplaysでLinux PCからスマートテレビにミラーリングしてみた話。
GNOME Network DisplaysでLinux PC/Ubuntu 25.04からミラーリング中のスマートテレビHisense 40C35R。
壊れたテレビを買い替えようと思ったら期せずして今どき、ほぼ100%スマートテレビしか売っていない状況の中、40インチ/フルHD、2K+で安価なHisense 40C35Rを購入。
4Kや8K、40インチを超えるサイズにも、スマートデバイスの自作が大好きな自身ながらスマートテレビにも全く興味はなく、届いてからも内蔵のスマートな部分は使うことは、まずないかなーと思いつつ、早速、40C35R用にESP32でIRスマーリモコンを作り、自作のJulius/Open JTalkなスマートスピーカーも追加設定しました。
強いて言えば、リモコンに12種ある動画サービスダイレクトボタンの内、稀ならがTVerは、それと最初の数回だけながら壊れたテレビでは、Miracast非対応Androidスマホmoto g8でAnyCastミラーリングしてみたことはあったし、(40C35Rに内蔵されているAndroid用の)Anyview Cast機能くらいかな、使う可能性があるのはと。
念の為、40C35R内蔵のAnyview Castに買って直後のバージョン9からアップグレードした後、今尚、バージョン10で止まったままの今となってはWi-Fi専用なAndroidスマホでミラーリングを試してみると既視感満載というか外付けAnyCastデバイスと同一?っぽくもあって、あっさりできました。
一方、テレビ内蔵版のTVerについては、なぜか、視聴速度を変更できず、PCやスマホのブラウザ版ならできるのに、標準速度で観ることはあんまりないんだよな...あえてHDMI接続してでもブラウザ版使いたいくらいだな...。
ん?そう言えば、当時、AnyCastデバイスを買って届くまでにあれこれ調べてみれば、Linux PCをテレビにキャスト、ミラーリングするためのプロジェクトもあったし、双方のデバイスにインストールが必要になる上、PC同士っていうのは使いみち思いつかないからなんだけど、GNOME Cast TV/Playercastも興味深くはあったよね...、スマートテレビは必要にしても追加でテレビ側にインストール不要でミラーリングできるアプリは未完だったけど...。
と、あれから4年以上経った今、調べてみると、まさに、その当時まだ未完成だったGNOME Network Displays(gnome-network-displays)が、まだ賛否はある中、進展はしていて使えそうな気配を察知。
aptリポジトリにもFlatpakにも、githubにも、gitlab.gnome.orgにもあるし、使えるぞという期待が一層高まり、Ubuntu 25.04 Pluckyで順に試すと全て、見事なまでに映像のミラーリングは、あっさりできた一方、[設定]の[サウンド]や追加インストールした音量調節パネル(pavucontrol)でも音声出力デバイスとして[Network Displays]や[GNOME Network Displays]に自動で切り替わっているにも関わらず、一向に音声が出力されない...。
んー、と思いつつ、githubやビルドパスのREADMEを読んでいると1.52.0なNetworkManager versionは、1.15.2以降を満たしており、[openh264 or x264]については10年以上前の情報ばかりなので、今や当然のように満たしているはず、あとは、[For audio supporting using AAC one of fdkaacenc, faac or avenc_aac]、その直前に記されているアプリ群はもちろんインストールしてあり、加えてaptでfaccパッケージを見つけたのでインストールしてみましたが、ミラーリングしたテレビから音は出ない...。
ネットにも英語圏中心に音が出ないという情報がいくつもあるも、aptリポジトリ版は、Ubuntu 25.04 Plucky/Debian 13 trixie共に0.96.0-1、Flatpak版とgitlab版はより新しく、バージョン0.99.0、と何れにせよ1.0に限りなく近い、映像は完璧なわけだし...とすれば、音声出力含め、成功例もあって、環境次第でできるはずでしょ...。
事前インストールしたアプリ群には、libgstreamer-*があるよな...、BSD*/PC-UNIX/Linux erになりたての頃、ディストロによってはだったか、オーディオ関連といえば、何かとGStreamer系を自分で見繕う必要があったよな...、ならGStreamerなfaacもあるんじゃ...?と改めてUbuntuのリポジトリでgstreamerをキーにapt searchしてみると、まさに[gstreamer1.0-fdkaac]パッケージなるものを発見。
これだよね?と[gstreamer1.0-fdkaac]パッケージを追加でインストールしてミラーリングしてみると、見事に音も出るようになった次第。
というわけでGNOME Network DisplaysのおかげでMiracast対応なスマートテレビにUbuntuからミラーリングすることでスマートTV上でも滅多には観ないものの、TVerで倍速視聴できるようになり、Hisense 40C35R内蔵スマート機能の内、Anyview Castと無線LAN機能は有効利用できました。
名前やポップアップタイトルなどに微妙な違いはあれど、前述の通り、GNOME Network Displaysは、aptリポジトリにもflathub.org/en/apps/org.gnome.NetworkDisplaysにも、github.com/GNOME/gnome-network-displaysにも、gitlab.gnome.org/GNOME/gnome-network-displaysにもありました。
ちなみにflatpak searchする際は、[networkdisplays]や[networkdisplay]なら特定され1件ヒット、(sなしdisplayも含め)gnome network displaysやgnome networkdisplaysなどとすると先頭に表示されるも大量にヒット、他方、-を入れたり、ダブルクォートしたりすると0件となり見つからないので注意。
Ubuntuでapt版、Flatpak版、github版と順に試してgithub版でmeson installしてやっと気づいたのですが、自身の環境では、併せて[gstreamer1.0-fdkaac]パッケージをインストールすることで映像も音声もLinux PCデスクトップとスマートTV間でシェアリングできました。
ただし、当初、100発100中だった成功したgithub版も回を重ねると配信に失敗することがあり、使用方法の手順を何度かやり直す必要があったり、時には、スマートTVのスクリーンミラーリング画面のまま画面切換ができず、電源を落として再投入しないと復旧できなかったりすることもあったので注意。
尚、aptリポジトリ版やFlatpak版で試した時と異なり、meson installする際は、githubの[Build]にあったのでDebian/Ubuntuな自身は、libgstrtspserver-1.0-dev libgstreamer-plugins-base1.0-dev libavahi-client-dev libavahi-gobject-dev libgtk-3-dev libnm-dev libpulse-dev libprotobuf-c-dev libjson-glib-dev libsoup-3.0-dev libportal-gtk4-dev libgtk-4-dev libadwaita-1-devはもちろんインストール済みでしたし、意味はなかったようですが、探して見つけたfaacもインストール済みでしたが、その時点では、音声は出力されませんでした。
そこで改めてバージョン0.99.0なFlatpak版をインストール、flatpak runで試してみると[gstreamer1.0-fdkaac]が内包されていないからなのか、音声が出力されませんでした。
が、未確認ではあるものの、同じバージョン0.99.0ながらgitlabバージョンの方は、何れも本家であり、説明からしてもmenson installといった手法からしても音声出力に成功したgithub版と同一と思われるので動作するかと。
ラズパイ2Bの64bit後継予定としたラズパイ400はともかく、ノートPC/Debian 13 trixieでaptリポジトリ版とgithub版に、先のパッケージ群と[gstreamer1.0-fdkaac]パッケージはなかったので[faac]/[libfaac-dev]/[libfaac0t64]をインストールしてみましたが、[Share Screen]ポップアップが表示されずに、[ネットワークディスプレイ]ポップアップが表示されてしまい、スマートTVがリストアップされるというイレギュラーな状態で、そこで共有ボタンを押したところで検索はするものの、共有方法を選択してないからか、配信になることはなく、先に進みません...。
よって今日時点、映像・音声共にUbuntuデスクトップからスマートTVへの共有・ミラーリングにおいて動作することを確認済みなのは、Ubuntu 25.04 Plucky/github版gnome-network-displaysだけです。
尚、GNOMEであれば、XorgでもWaylandでもいけましたが、前者の方が安定しており、後者だと端末からの起動した方がGUIアイコンによる起動より共有が安定するように感じています。
GNOME Network Displaysの使い方は、次の通りです。
デスクトップからGUIで起動するなら[GNOMEネットワークディスプレイ]アイコンをクリック。
端末|ターミナルから実行するなら、apt/github/gitlab版なら[gnome-network-displays]、Flatpak版なら[flatpak run org.gnome.NetworkDisplays]。
起動中、警告|Warningとして[codec list not initialized]とか、[WfdParama: Missing RTCP port (secondery_rtp_port=0, primary_rtp_port=15550). Auto-correcting to primary_rtp_port + 1.]、[WfdClient: No resolution found, falling back to standard FullHD resolution.]などが表示されており、解像度はともかく、当初、これらを解消する必要があるのかと思いましたが、この状態でも何ら違和感も問題もなく、映像も音声もシェアできています。
github版gnome-network-displays(やFlathub版)起動後に表示される(やや日本語表示に失敗したゆえの?)[Share Screen]ポップアップで[Display]スイッチをクリックしたというか、デフォルト画面。
色合いからして逆なイメージがあるも、明るいグレーの方が、表示中のスイッチ。
[Display]では、こんな感じで[接続済みモニタ+サイズ名](画像では、I-O Data Device Inc 21")と[Virtual Monitor]のアイコンが表示され、何れかを選択(クリック)の上、右上の[共有]ボタンをクリックするとデスクトップ画面ごとミラーリング|スクリーンシェアできます。
ただ、音声出力される前だったか、確かに[Virtual Monitor]でもミラーリングできたのですが、音声出力後は、[ネットワークディスプレイ]ポップアップで[共有]ボタンをクリックしても[利用可能な出力先モニタ]に戻ってしまい[配信中]にならず、動作確認できていません。
少なくとも[Display]で接続済みの物理モニタを選択した場合は、もちろん、ブラウザやオーディオプレイヤーを再生すれば、他を含め、共有することもできますし、当該アプリを最大化すれば、テレビで放送の映像を観ているのと同じようになります。
ただし、デスクトップ画面シェアとなる[Display]モードでは、映像と音声のストリーミング中、他の作業をするとWi-Fiに負荷がかかるからでしょうか、出力先の音声が途切れたりすることがあります。
Wi-Fiを切断して有線のみにするとミラーリングできなかったのでmiracastベースだから当然もWi-Fi経由であることは間違いなく、5GHzは未確認も2.4GHzで、動画視聴に加え、他の作業も含めて、映像+音声をストリーミングするのは厳しいということでしょう。
よって映像+音声込みの動画を共有・ミラーリングするなら単一アプリのみな次の[Window]シェアの方が無難でしょう。
github版gnome-network-displays起動後に表示される(やや日本語表示に失敗したゆえの?)[Share Screen]ポップアップで[Window]スイッチをクリックした画面。
[Window]では、個々のアプリ画面を選択(クリック)して[共有ボタン]をクリックすれば、ミラーリング|スクリーンシェアでき、画像のリスト上には見えませんが、もちろん、ブラウザがあれば、種類やバージョンに関わらず、共有できます。
ここまでの通り、デスクトップ側で必要な選択をして共有ボタンをクリックした後、スマートテレビ側の準備ができていないなど[利用可能な映像出力先]候補がない場合に表示されるGNOME Network Displays[ネットワークディスプレイ]ポップアップの初期画面。
スマートテレビ側で入力切換などでスクリーンミラーリング機能を選択済みな場合など、[ネットワークディスプレイ]ポップアップの[利用可能な映像出力先]候補がある場合の一覧・リスト(画像では候補は1件、Hisense 40C35Rのみ)。
ミラーリングする場合は、ここで[利用可能な映像出力先]候補(画像ではHisense 40C35R)をクリックします。
候補がクリックされると[接続中...]、接続済みになると、このように[配信中]と表示され、出力先となるテレビなどに映像が共有され、音声はテレビ側から出力されるように切り替わります。
デスクトップの[設定]パネルから[サウンド]タブを選択すると出力側が、[GNOME Network Displays]、または、[Network Displays]となっているはずです。
(何らかの理由でPulseAudioの音量調節パネル(pavucontrol)をインストールした場合も出力系は、これに切り替わります。)
[キャンセル]ボタンクリックで配信を停止できます。
検証環境としては、無線LANは2.4GHz(5GHzでは未検証)、PCやハブ、テレビ共に1Gbpsながらギガ対応な有線LANも接続済み、Ubuntu PCは、オクタコアCPU RAM32GBなAMD Ryzen 7 8845HS、Raspberry Pi OSなラズパイ400は、クアッドコアCPU RAM4GB、Debian PCは、デュアルコア RAMを4GBから16GBに増設のdynabook B45/B。