Local Video Server 機能

Local Video Server 機能

Local Video Server は、デバイス上で HTTP サーバを立ち上げることで、同一ネットワーク内のデバイスからリアルタイム映像を取得するための機能です。

デバイス設置時の画角調整や、デバイスの状態確認などに利用できます。

サンプルコードは こちら

注意点

  • 同一ネットワーク内のデバイスからのみアクセス可能です。インターネットを介したアクセスはできません。
  • actfw-core のバージョンが 2.10.0 以上である必要があります。
  • 映像の配信に計算リソースを多く消費するため、必要な場合のみ有効にできるよう act settings で有効/無効を切り替え可能な実装にすることを推奨します。
    • 以下の例では local_video_server という設定で切り替えるようにしています。

使い方

  1. デバイス詳細画面 から mDNS設定 を有効化します (この機能は firmware version 3.2.0 以降で利用可能です)。

    mdns

  2. Act 設定で Local Video Server を有効化します。

    act_settings

  3. デバイスのホスト名を確認します。

    hostname

  4. デバイスと同一のネットワークに接続している状態で、ブラウザから以下の URL にアクセスすると、デバイスの映像を取得できます。

    http://<hostname>.local:5100

    例: http://example-device-100000000xxxx.local:5100

    local_video_server

導入方法

  1. actfw-core のバージョンが 2.10.0 以上になるように dependencies.json を修正します。

    {
        ...
        "pip": ["actfw-core>=2.10.0"],
        ...
    }
  2. ポート番号 5100 にデバイスの外からアクセスできるように manifesto に以下の設定を追加します。

    + "allow_all_networks": true,
    + "published_ports": [
    +   {
    +     "container_port": 5100,
    +     "host_port": 5100,
    +     "protocol": "tcp"
    +   }
    + ]
    
  3. LocalVideoServer の有効/無効を切り替えるための設定を追加します。

    +   "local_video_server": {
    +     "title": "Enable Local Video Server",
    +     "description": "Enable Local Video Server",
    +     "type": "boolean",
    +     "default": false
    +   },
    
  4. main ファイルに LocalVideoServer のコードを追加します。使い方は Take Photo コマンドで使う CommandServer と同様です。以下は典型的なアプリにおける変更例です。

        # CommandServer (for `Take Photo` command)
        cmd = actfw_core.CommandServer()
        app.register_task(cmd)
    
    +   # LocalVideoServer
    +   local_video_server = None
    +   if settings["local_video_server"]:
    +       local_video_server = actfw_core.LocalVideoServer()
    +       app.register_task(local_video_server)
    
            # Presentation task
    -       pres = Presenter(preview_window, cmd)
    +       pres = Presenter(preview_window, cmd, local_video_server)
    
         class Presenter(Consumer):
    -       def __init__(self, preview_window, cmd):
    +       def __init__(self, preview_window, cmd, local_video_server):
                super(Presenter, self).__init__()
                self.preview_window = preview_window
                self.cmd = cmd
    +           self.local_video_server = local_video_server
    
        def proc(self, rgb_image):
            self.cmd.update_image(rgb_image)  # update `Take Photo` image
    +       if self.local_video_server is not None:
    +           self.local_video_server.update_image(rgb_image)  # update local video server image
    
最終更新日