澤口楓斗

← 実績一覧

デジタルサイネージ配信システム

稼働中

温泉施設の館内に置いた縦向きのディスプレイ。ゴルフの案内動画が流れている

再生する端末(Androidアプリ)、配信APIとWeb管理画面を兼ねるサーバ、VPS上の実行基盤まで自分で作った。

プレイヤー(Androidアプリ)

動画と静止画を混ぜた全画面ループ再生。

  • コンテンツの取り込みは2系統。「USBメモリを挿すだけで同期する」方式と「サーバから取得する」方式を持ち、設定ファイルの有無で自動的に切り替わる
  • 取得したメディアは内部ストレージへ複製してから再生する。通信が切れてもサーバが止まっても再生は続く
  • 曜日・時間帯で再生内容を切り替えるスケジュール再生
  • 無人で置くため画面を固定(キオスク化)した。固定したままでも担当者が保守用の画面から一時解除・再固定できる導線を、タッチとリモコンの両方に用意した
  • Google TV では、縦置き設置に合わせた表示の固定回転、動画の音声再生、TVのアプリ一覧への表示とリモコンからの起動に対応

サーバ(Next.js)

Android端末向けの配信APIと、運用者が使う管理画面の2役。

  • 配信APIは、コンテンツフォルダの状態とDB上のスケジュール定義から再生定義(JSON)を自動生成して返す
  • 内容が変わっていなければ再ダウンロードさせない。通信量を抑えるため
  • 動画は容量が大きくてもサーバのメモリを圧迫しないストリーム配信
  • 端末ごとにAPIキーを発行し、検証の強度を切り替えられる

管理画面では、ドラッグ&ドロップでのアップロード、サムネイルとプレビュー、再生順の並べ替え、静止画の表示秒数の一括変更、曜日・時間帯スケジュールの編集、端末の登録と管理、管理者/編集者のロール管理、操作の監査ログ閲覧ができる。

運用

  • DB上で失効させられるセッション認証、ログイン試行のレート制限とアカウントロック、API全体のレート制限
  • ディスク使用率の監視。閾値を超えたらアップロードだけ拒否して、配信は続ける
  • データベースとメディアは世代管理付きで自動バックアップ
  • ConoHa VPS 上に Docker Compose(Caddy・Next.js・PostgreSQL)で常駐。HTTPS証明書の取得と更新は Caddy が自動で行う

品質

端末やネットワークに依存しない部分(再生定義の解釈、スケジュール判定、設定ファイルのパース、レート制限の判定など)を意図的に切り出して、自動テスト175件で検証している。実機がないと確かめられない範囲を狭くするための設計。

設計方針・進捗・実機検証の記録はリポジトリ内のドキュメントに残し続けている。

現在も機能追加と保守を続けている。

写真と動画

動画と静止画を混ぜて全画面でループ再生する。流す内容はブラウザから遠隔で差し替える。
スタンドに載せて館内に置いたディスプレイ。静止画が表示されている
縦置きに合わせて表示の向きを固定している。無人で置くため、画面はキオスク化して他の操作ができないようにした。
入口側から見たディスプレイの設置場所
設置先は湯ったり〜な昼神様。通信が切れてもサーバが止まっても、ここでの再生は続く。