Ubuntu Weekly Recipe

第668回 CATTでCLIからGoogle系スマートデバイスにキャストする

この記事を読むのに必要な時間:およそ 4 分

ローカルのファイルを再生する

CATTを用いてキャストする際の最大の利点が,特別なサーバーを用意することなく,ローカルのファイルをCastデバイスで再生できることです。たとえば~/ミュージック/以下の音楽ファイルは次のように再生できます。

$ catt -d キッチン cast ~/ミュージック/music.m4a
Casting local file ~/ミュージック/music.m4a...
Playing "Music" on "キッチン"...
Serving local file(s).
192.168.0.10 - - [22/May/2021 23:23:33] "GET /?loaded_from_catt HTTP/1.1" 206 - audio/mp4 - 12.60 MB

Castデバイスによってサポートしているメディアフォーマットは異なるので注意してください。たとえばMPEG-2 Videoは現時点でどのデバイスもサポートしていないため,なんらかのトランスコードが必要になります。

ローカルファイルの再生の際はYouTubeと異なり,ブロックモードで再生します。つまり再生が完了するまではcattコマンドから戻ってきません。ボリューム等を調整したいなら,別途端末を開いてそこから操作してください。

再生キューやプレイリストといった機能もありません。ただしCLIなのでちょっとしたスクリプトでプレイリスト相当の操作ができます。たとえば単純な例だと,次のコマンドを実行すればローカルにあるm4aファイルをすべて順番に再生してくれます。

$ find . -name '*.m4a' -exec catt -d キッチン cast {} \;

Ubuntuの場合,各種リモートストレージをマウントすれば,ローカルファイルシステムにアクセスするとのと同じような操作が可能になります。

たとえばNextcloudにコンテンツを保存している場合,Nextcloudクライアントなどで同期すれば,普通のファイルアクセスが可能になります。また,NextcloudはWebDAVサーバーとしてもアクセス可能です。WebDAVとしてマウントしてしまえば,クライアントに比べてアクセスに時間はかかるものの,クライアントのインストールなくアクセスできます。

WebDAV用のアドレスは,NextcloudのウェブUI左下にある「設定」から取得可能です。マウントするためにはdavfs2パッケージのインストールが必要です。またGNOMEならファイルブラウザーがWebDAVに対応しているため,こちらからマウントする方法もあるでしょう。

ファイルブラウザーの場合は,左のペインから「他の場所」を選び,ウィンドウの下部にある「サーバーアドレスを入力」に先ほど取得したアドレスを入力してください。入力する際にはアドレスの「https」「davs」に置き換えるようにしてください。

マウントがうまくいけば,ファイルブラウザーからNextcloud上のファイルにアクセスできます。また,マウント先は次の手順で確認できます。

$ ls $XDG_RUNTIME_DIR/gvfs/
'dav:host=(サーバーアドレス),ssl=true,prefix=%2Fremote.php%2Fdav%2Ffiles%2F(ユーザー名)'

上記のdev:で始まるのがマウント先です。少し長く複雑なファイルパスになるため,cattコマンドを使う前にディレクトリに移動してからcastコマンドを使うと良いでしょう。

DLNA経由のファイルを再生する

ネットワーク上にDLNAサーバーが存在する場合,DLNAサーバー上のコンテンツをキャスト可能です。問題はコンテンツのURLをCLIからどう取得するかですが,あまり良い方法は見つけられませんでした※2⁠。

※2
そもそもDLNAが動いているなら,スマートフォンのアプリからキャストしたほうが確実ですし使いやすいです。このあたりは第339回のChromecastをUbuntuで使えるか試してみるが参考になると思います。

結局のところUPnPをサポートするライブラリを利用して,ターゲットのDLNAサーバーに合わせて,自作してしまうのが一番手っ取り早いらしく,インターネット上でもいくつかもの作例が見つかります。

依存関係が少ない方法だと,socatコマンドとシェルスクリプトで作られたツールなんかも存在します。今回はこれを使ってみましょう。

$ sudo apt install socat
$ wget https://raw.githubusercontent.com/javier-lopez/learn/master/sh/tools/simple-dlna-browser
$ chmod +x simple-dlna-browser

まずはDLNAサーバーをリストアップします。

$ ./simple-dlna-browser -L
http://192.168.0.27:8200/rootDesc.xml (CuBox)

今回応答したのは,CuBox上にインストールされたMiniDLNA(現在はReadyMediaと呼ばれているもの)です。simple-dnla-browserはサーバーの検索時にurn:schemas-upnp-org:device:MediaServer:1を指定するため,それ以外は検索対象外となってしまいます。もし求めるサーバーが見つからないようなら,他のツールの利用も検討してください。

このツールの便利なところは,⁠ファイル名」で検索にも対応しているところです。

$ ./simple-dlna-browser -s 192.168.0.27 -v ファイル
http://192.168.0.27:8200/MediaItems/345.mp4 - ファイル1
http://192.168.0.27:8200/MediaItems/346.mp4 - ファイル2
http://192.168.0.27:8200/MediaItems/347.mp4 - ファイル3
http://192.168.0.27:8200/MediaItems/348.mp4 - ファイル4

-vオプションもつけるとファイル名を元にしたタイトルも表示してくれるので便利です。

あとはこのURLをcattコマンドに渡すだけです。

$ catt -d テレビ cast http://192.168.0.27:8200/MediaItems/348.mp4
Casting remote file http://192.168.0.27:8200/MediaItems/348.mp4...
Playing "348" on "テレビ"...

これでDLNA上のコンテンツもCLIからCastデバイスにキャストできました。

在宅勤務においては,BGM/BGVの内容や再生方法も自由度があがっています。これを機にスマートデバイスを利用した環境構築も検討してみてはいかがでしょうか。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。