CrossRoad

XRを中心とした技術ブログ。 Check also "English" category.

Androidスマートフォンをサーバにして、複数の端末から映像を確認する方法 (みまもりアプリ開発3)

前回からの続きです。

こういう構成で、ローカルネットワーク環境だけで使用できる、みまもりカメラの仕組みを改良していきます。

Case3: Server on Android and client on web browser

今回は、複数クライアント端末が同時に接続できるようにしつつ、操作画面を使いやすくしました。

1. 複数クライアントが同時に接続できるようにする

GitHub CopilotでClaude 3.7 Sonnectを指定して、このようなコードを作りました。

修正したコードは、MainActivity.ktとCameraCapture.ktのみです。

◾️MainActivity.kt gist.github.com

◾️CameraCapture.kt gist.github.com

2. 画面レイアウトの改善

前回はテスト的に作ったので、画面イメージが考慮されていませんでした。

そこで、サーバ (Androidアプリ)とクライアントの画面イメージをPowerPointで作り、Claudeを通じて実装例を出してもらいました。

PowerPointで作成した画面イメージです。

◾️サーバ (Android) GUI image of websocket server based camera on Android

◾️クライアント (Webブラウザ) GUI image of websocket client on web browser

このような画像を添付した上で、「こういうGUIで処理ができるようにアプリを改修してほしい」とClaudeに依頼したところ、1回でGUIイメージに合った画面と操作ができました。簡単な図形で作ったものでも解釈してくれるのはとてもよいですね。

3. 動作結果

サーバ役のAndroidスマートフォンではこのような画面ができました。

Websocket server app on Android

続いて、クライアント側の画面です。

Client browser screen on iPhone and PC

このように、PortraitもLandscapeも、どちらもPowerPointで書いた通りの画面になりました。

一応一通り動いたので、妻にも説明して使ってみることにしました。ただ、まだいくつか問題があることがわかりました。

問題 (解決したもの)

・IPアドレスが変わってしまう -> ルータの設定でSurface DuoのIPを固定にした

・Surface Duoの仕様で、スリープまでの時間が30分にしかできない。 -> 開発者モードにして、充電中ならばスリープしない設定が可能とわかった

問題 (まだ解決していないもの)
・スリープして復帰するととwebsocketサーバが落ちてしまう

・アプリを起動して30分未満でも、クライアント側からアクセスできないことがある

・一度サーバアプリがバックグラウンドに入ると、復帰後にアプリが落ちてしまう

4. おわりに

ひとまず動くようになりました。ただし、安定性の観点でまだ課題があるため、引き続き改善したいと思います。