見出し画像

【AI開発】Claudeはテレビ(Chromecast)の改善も見逃さない


「昔はテレビで家族の動画とか写真スライドとか見られてたのに、いつからか見られなくなって。NASの持ち腐れなんだよね。。。」

Claudeに、なんとなくそんなつぶやきをこぼしたのが始まりでした。
15年?20年??ほど前に購入したNASNEと外付けハードディスクには、何年分もの写真と動画が溜まっています。
それをリビングのテレビで、ふつうに振り返りたい。
ただそれだけのことでした。

「テレビはAndroid TVですか? 繋いで確認してみましょうか?」

返ってきたのは、悩みへの共感とともに、実機確認の提案でした。
なにげにつぶやいた悩みからいつの間にか調査が始まっている。ぼくドラえもん感がすごい。

Chromecastへの接続はサクサクと進み、開発者モードの入り方まで教えてくれました。

「設定の、xxボタンをリモコンで7回クリックしてください」

隠しコマンドの儀式めいた手順を、あたりまえのように案内されて、苦笑い。
ChromecastにインストールしていたKodiやVLCでも、Nasneのファイル自体は見られます。
しかし、連続再生がうまくいかないのです。
一本見終わるたびに一覧へ戻され、次のファイルを選び直す。
家族が集まったときに後ろで流しておきたいのに、途切れちゃうと白けてしまうからもう何年も使えずにあきらめていました。

ChromecastはAndroidアプリなのでNasneのコンテンツ再生アプリをつくりましょう?
半信半疑でClaudeの提案にのってみました。

接続方式の謎

作り始める前に、まず接続方式を確かめる必要がありました。
SMBでNASNEに繋ごうとすると、弾かれます。
NASNEは古いSMBv1にしか対応しておらず、多くのクライアントは安全のためSMBv1を標準で無効化しているから、だそうです。
ん?ここで引っかかりました。
KodiもVLCも、Nasneには接続して見られている。
SMBが弾かれるなら、あの2つは何で繋がっているのだろう。

調べていくと、答えはDLNAでした。
KodiもVLCも、SMBではなくDLNAでNASNEにアクセスしていたのです。
試しに動画のURLを直接叩いてみると、HTTP 206(範囲指定・シーク対応)でvideo/mp4が返ってきました。
DLNA方式で組めば、シークも連続再生も自分で制御できる。らしいw
方針が固まりました。

実装:軽量なDLNAクライアントとExoPlayer


DLNAクライアントは外部ライブラリなしで自作することにしました。

SSDPで機器を探索し、Browseコマンドでフォルダ階層を辿るだけの、必要最小限の実装です。

ブラウズ画面はディレクトリを階層で辿る方式で、テレビのリモコン操作を考えてフォーカス項目に青い枠を付け、パンくずで現在地を表示。
再生はExoPlayer。シーク時の同期方式をCLOSEST_SYNCに指定して反応を速くし、動画再生の標準ぽく15秒スキップのボタンも付けました。
数十本を続けて見る用途では、この2つが体感速度を大きく左右します。

TV側で起動している自作アプリの画面キャプチャをClaudeが見せてきた画像
もうその時点で驚き
君、なんでも見えてるんだね…

動画のサムネイル画像がない

NASNEは動画のサムネイルを配信してくれません。
写真が並ぶ一覧で動画だけ真っ黒なカードが並ぶのは、見た目としてかなり寂しいもの。

そこで、サムネイルの代わりにメタデータ(再生時間・撮影日)を活かしたカードUIにしました。
画像がなくても、情報があれば一覧性は保てます。

古い動画への対応も必要でした。
NASNEは古い動画をavi・wmv・divx・mpegといった元の形式のまま配信することがあり、ExoPlayerでは再生できないものが混ざっていたのです。
同じ動画が複数形式で存在する場合は、mp4を優先して選ぶようにしました。
写真の表示にはGlideを追加し、ここまで来ると写真と動画を日時順にミックスして連続再生する機能も自然に欲しくなり、実装しています。
ランダムに連続再生する機能も実装して、偶発的な思い出へのエンカウントを楽しめるようにしました。

家電もハックして自分好みにカスタムできる時代

Chromecast with Google TVは、中身がAndroid TVです。
ストアを介さず、adbをWi-Fi経由で使えば、ビルドしたAPK(6.6MB)をそのまま送り込めます。

実機に入れて、リモコンで一覧を開く。
フォルダを辿り、再生ボタンを押す。
画面に過去の記録動画や写真が流れ始めた瞬間は、思っていた以上に感動しました。
そうかー家電もハックできるんだ!

自作なら、既製品では中途半端にしか対応してくれない条件を、全部自分の都合で実装できます。
既製品で行き詰まったとき、自作が筋のいい選択になる場面は、思っているより多いはずです。もちろんメーカー保証はなくなるでしょうから自己責任の範囲で。

#個人開発 #Chromecast #DLNA #AndroidTV #NAS #ClaudeCode


いいなと思ったら応援しよう!