VNCクライアントが受け取った画像データをChromecastにキャストできないか

ふるさと納税を活用して入手したiiyamaブランドの液晶ディスプレイは、当初Asustor NAS AS3102Tを繋いでいたが、Chromecast (v2, あるいは2015)を購入してからは、そちらを繋いでいる。単なる液晶ディスプレイなので入力HDMIポートは1つしかない。なのでNASの画面をHDMIケーブルの抜き差しをしなくては液晶ディスプレイでは見られない(VNCサーバーは本体起動時に自動起動するようにしてあるので、他のPCなどからVNCビューワーでは見られる)。これでは不便なので、HDMIケーブルの抜き差し抜きでNASの画面見られるよう、それをChromecastにキャストできないかと考えた。

ところが実は液晶ディスプレイにはHDMIポート以外に、D-Subポート、DVI-Dポートがそれぞれ1つある。同時に有効にできるのはこれら2つのうち1つだけ、という制約があるが、HDMIポートとは同時に使えてディスプレイ下辺縁のボタンで切り替えができる。しかもたまたま、 “音声出力のないPC用ディスプレーをTVチューナと組み合わせTVセットとして使う” に書いたようなセットアップを友人宅で実現するために購入したが余ってしまったDVI-HDMI変換アダプタが手元にあった。ならば、NASのHDMIによる画面出力はこのDVI-HDMI変換アダプタを介して液晶ディスプレイのDVI-Dポートに繋いでしまえば解決する。DVI-Dに変換すると音声が落ちてしまうが、NASにはUSB DACも繋いであるので、音声の方はそちらに回すことにすれば全く問題がない。

…というわけで当初の問題は意外にあっさりと解決した。どうも最近、あとで考えると極めて自明なことになかなか気づかない気がする。ともかく、せっかくソフトウェアでの解決策をいろいろ考えたので記録だけしておく。

Stream2Chromecast: Chromecast media streamer for LinuxというPythonで書かれたユーティリティーがある。 “Stream Videos To Chromecast From The Command Line Using Stream2Chromecast ~ Web Upd8: Ubuntu / Linux blog” にも解説が。

基本ローカルファイルをキャストすることを前提に作られたものだと思うが、もしNASのXサーバー上に描画されたものをキャプチャしてファイルに吐き出すことができるのなら、パイプなり名前付きパイプなりを使えば、組み合わせで目的が達成できるはず。

ではどうやってキャプチャするか。 “Chromecastについて知っておきたいこと” にも書いたように最近のChromeブラウザにはキャスト機能が最初から組み込まれているのだが、AS3102Tにインストールされているものはそうではない。Chromium 47.0.2526.73 Ubuntu 14.04 (64-bit)とChrome 47.0.2526.106 (64-bit)と、Windows PC用最新版に比べて古く、キャスト機能がビルトインではない。それでもGoogle Cast拡張機能はインストールでき、タブ単位のキャストはできる。しかし現在のビルトインのキャスト機能でできるデスクトップ全体のキャストはできない。なので達成したい目的には使えない。そもそも、仮にデスクトップ全体のキャストができたとしてそれをどう自動起動できるかがわからない。

次に考えたのがffmpegを利用したキャプチャ。 “Capture/Desktop – FFmpeg” にあるx11grabデバイスを利用した方法はできそうになかった。 “FFmpeg Devices Documentation” を見ると、x11grab以外に使えそうなのがfbdevではないかと思うのだが、/dev/fb0なるデバイスは見つからないし多分ダメなんじゃないかと…(詳しい人教えてくだされ)。

ただ、NAS上にx11vncコマンドは存在し、それにVNCビューワーが接続して画面をリモートに見られるということは、その手段はともかく画面をキャプチャして送信することができている、ということ。なら、VNCクライアントでかつ受け取った画像データをキャストできるものはないかと調べると、Vnc2cast – Vnc to chromecast(トライアル版はvnc2cast free)なるAndroidアプリが見つかった。Google Code Archiveにはあまり有用なドキュメントがない。ピッタリのように思えたが、トライアル版で試してみると全くうまくいかない。Chromecastには接続できているようで、専用の画面表示を見せてくれるが、VNCサーバーから受け取った画面は表示してくれない。エラーも何も吐いてくれないので、VNCサーバーに接続できてるかどうかすらわからない。

vnc2flv – Desktop Screen Recorderなる日本人製のPythonによるユーティリティーが見つかった(ダウンロード)。試してないが、もしこれがちゃんと動くのなら、Stream2Chromecastと組み合わせれば目的は達成できるのでは。vnc2flvは画面表示をビデオとして記録するのが目的なのでFLVにエンコードするようだが、Stream2Chromecastに与える上でそれは必要ではない(むしろ害かも)ので、どちらもPythonで実装されていることだし、マージして不必要なエンコードやデコードが起こらない形でできるんじゃないか、と。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中