ATOM Cam 2 のリアルタイム映像をPC で確認する我流 #SORACOM #soracomug #ATOMcam

目次

SORACOM Advent Calendar 2022

この記事は SORACOM Advent Calendar 2022 の9日目の記事です。

qiita.com

SORACOM Advent Calendar に参加するのは 2016 / 2017 以来となり、個人的にはなかなか感慨深いものがありますねー

uchimanajet7.hatenablog.com

uchimanajet7.hatenablog.com

2017年分は公開日が1日遅れて気がするので、過去の自分もっと頑張っておけよ。。。

今回は ATOM Cam 2 の リアルタイム映像 を PC で確認する方法を書いてみました。
[本流] とできるけどネタレベルの [我流] が書いてあるので、我流の方は生暖かく見ていただけると

あと毎回のお約束ですが、すべての内容は個人で検証したもの になります。文中の現時点は2022年12月8日を指しています。
利用しているATOMアプリと ATOM Cam 2 のファームウェアのバージョンは以下の画像を確認してください。

バージョンや利用するツールによっては期待している動作をしないことがあります。

本流と我流はこの番組が好きなのでw

www.fujitv.co.jp

Soracom Cloud Camera Services とATOM Cam 2

Soracom Cloud Camera Services(以下、ソラカメ)とATOM Cam 2(以下、AC2)の関係を簡単に紹介します。詳細は各リンク先を確認してください。

ソラカメはソラコムが提供しているクラウド型のカメラサービスです。

soracom.jp

AC2はアトムテックが販売してるネットワーク型のカメラです。 現時点でAC2を利用するにはスマートフォンアプリの ATOMアプリ を利用する必要があります。

www.atomtech.co.jp

soracom.jp

ソラカメ対応製品としてAC2が利用できるので、ソラカメのライセンスを購入することでAC2を使ったクラウドへの常時録画サービスを利用できることになります。

[本流] ソラカメを使う

ATOMアプリで登録されているカメラのリアルタイム映像を確認できます。
ソラカメを利用することにより「クラウドへの常時録画」が行われ、クラウド側に録画データが蓄積されます。

ソラカメでは、この録画されたデータをSORACOMユーザーコンソール上で視聴できるので、PCで映像を確認できるようになります。また、APIでの操作ができるため他のサービスへのインプットが行えます。

users.soracom.io

users.soracom.io


  • 良い点
    • 何より手軽に使える。
    • ライセンスを購入して割り当てすれば、クラウドへの常時録画ができる。
    • SORACOMユーザーコンソールから視聴できるので、Webブラウザだけあれば良い。
    • サービス利用なので自前で作り込んだりする必要がない上、サポートに問い合わせできる。
  • 注意点
    • サービス利用となるため月額の費用が発生する。
    • リアルタイムの定義によっては、ミスマッチとなる場合がある。
      • クラウド側に録画した映像を再生するので、厳密にはカメラのライブ映像とは異なる。
    • API経由の視聴に制限があるので、ユースケースによってはミスマッチとなる場合がある。

      soracom.jp

    • クラウドへの常時録画が前提となるため、電源やネットワーク利用量が大きくなる。

[我流-1] PCでスマホアプリを利用する我流

以前Blogに記載した内容ですが、PCにエミュレーターをインストールしてスマホアプリを利用する方法です。この方法ならPCでスマホアプリが利用できるため、PC上でリアルタイム映像を確認できます。

uchimanajet7.hatenablog.com


[我流-2] RTSPを中継機で転送する我流

こちらも以前Blogに記載した内容ですが、AC2はRTSPサーバーとして動作するので同一ネットワーク内であれば、RTSP経由でリアルタイム映像を視聴できます。
これを利用して同一ネットワーク内にRTSPを転送する中継機を置くことで、PCで閲覧できる場所に映像を転送できます。

uchimanajet7.hatenablog.com


  • 良い点
    • Amazon Kinesis Video Streams に映像データをインプットできる。

      aws.amazon.com

    • AWSによるドキュメントや動画があり、記載の通りに設定すれば比較的簡単にセットアップできる。

      www.youtube.com

    • 必要なソフトウェアがセットアップ済みのDocker イメージが存在する。

      docs.aws.amazon.com

    • 中継機が用意できれば、ユースケースによってはマッチする場合がある。
  • 注意点
    • AWSをはじめとした利用しているツール類について、ある程度の知識が必要。
    • ドキュメントや動画があっても、設定する項目や内容は理解する必要がある。
    • RTSPを使うためにAC2と同一ネットワークで中継機を動作させる必要がある。

      tex2e.github.io ja.wikipedia.org

    • 中継機がSPOFとなる可能性がある。

      www.nic.ad.jp

    • 中継機を含めた継続した運用を考慮する必要がある。
    • 電源やネットワーク利用については、常時クラウドへ映像が転送されているので大きくなる。
    • 別途クラウドで利用しているサービス利用料が必要となる。

[我流-3] SORACOM Arc と SORACOM Gate D2D でRTSPへリモートアクセスする我流

ここからは新作です。やっとSORACOMのサービスを利用しますw

SORACOM Gate D2D (Device to Device) とは

SORACOM Air のSIMを利用しているデバイス同士が、インターネットを経由せずに SORACOM網内で同一サブネットとしてプライベートIPで通信できるサービスです。詳細はリンク先を確認してください。

soracom.jp

SORACOM Arc とは

WireGuardを利用することで、既存の通信環境を使ってSORACOMへセキュアに接続できるサービスです。詳細はリンク先を確認してください。

soracom.jp

同一のネットワークになることで

AC2のRTSPは同一ネットワークであれば利用できるので、SORACOM Gate D2D を使うことで別のネットワークにあるデバイスでも、同一のネットワークと扱えるようになります。

ゲートウェイとなるルーターLTE / WireGuard が利用できる機種を選択することで、現在のWi-Fiでの接続が必須なAC2でも、SORACOM Gate D2D が利用できます。
今回はAC2の通信量が多いことと、Advent Calendar用の検証が目的のため WireGuard が利用可能なルーターを利用して、SORACOM Arc 経由で接続を行いました。

今回は手元にあるものを利用しましたが、 LTE / WireGuard を利用できるルーターを新規で探す場合は、以下を見てみてください。

soracom.jp

これで AC2が SORACOM Gate D2D のネットワークに参加できるようになります。
同じく、RTSPを視聴するPC側にUSBドングルや、SORACOM Arc を利用することで、同一ネットワーク内となります。
結果としてリモートからRTSPへアクセスできるようになります。

SORACOM Arc を準備する

SORACOMはドキュメントがとても丁寧に書かれています。
SORACOM Arcの利用に関しても、公式ドキュメントを参照して進めていきます。

users.soracom.io


  • 今回は単体でバーチャル SIMを作成します。

    users.soracom.io

  • ゲートウェイ用と視聴するPC用の合計2枚のバーチャル SIMを作成します。
    • バーチャル SIM を作成する際に、画面に表示される PrivateKey は後から再確認できないため、必ず記録してください。
  • SIM グループがない場合は作成します。

    users.soracom.io

  • 作った SIM グループ に 2枚のバーチャル SIMを所属させます。

    users.soracom.io

SORACOM Gate D2D を準備する

同様にSORACOM Gate D2Dの利用に関しても、公式ドキュメントを参照して進めていきます。

users.soracom.io


  • VPG を作成する際には インターネットゲートウェイを使う をONにする。
    • AC2を通常利用するためにインターネットアクセスが必要となるため。

      users.soracom.io

  • VPG を切り替えるのはグループ単位となります。

    users.soracom.io

  • SORACOM Arc で SORACOM Gate D2Dを利用するために、WireGuard 設定ファイルを編集する。
    • バイスサブネットのIPレンジを許可するために AllowedIPs に記載する。
  • VPG を切り替えた場合にはSIMのセッションリセットを行います。

    users.soracom.io

ゲートウェイ機器を設定する

詳細な設定は利用するゲートウェイ機器で異なるため、利用する機器のマニュアルを確認して設定してください。

users.soracom.io


  • VPNの設定を探し WireGuard クライアント の設定します。
  • バーチャル SIMを発行さいた際に、画面に表示されていた情報を WireGuard クライアント の設定として入力します。
  • SORACOM Gate D2D の準備で設定した、デバイスサブネットのIPレンジ は必ず設定に追加します。
  • すべての設定が完了したら、WireGuard クライアント を起動してSORACOMと通信できるかを確認します。

    users.soracom.io

  • SORACOMと通信できない場合には、ハートビート間隔 / PersistentKeepalive と記載されている設定を確認します。

    www.wireguard.com

  • リモートアクセスの宛先は、ゲートウェイ機器で利用している バーチャル SIM に割り振られている ローカルIP になります。
    • SORACOMユーザーコンソールで、該当のバーチャル SIMの ローカルIP を確認します。

      users.soracom.io

  • ゲートウェイ機器のファイヤーウォール設定で、WireGuard側からのポートフォワードを設定しておきます。
    • 上記の場合は、8554 のWireGuard側から 554 へのポートフォワードが設定してあります。
    • AC2のRTSPは 554 ポートで待ち受けしていることが確認できます。
      $ nmap -A 192.168.8.119
    
      Starting Nmap 7.93 ( https://nmap.org ) at 2022-12-06 15:56 JST
      Nmap scan report for ATOM.lan (192.168.8.119)
      Host is up (0.0059s latency).
      Not shown: 998 closed tcp ports (conn-refused)
      PORT     STATE SERVICE VERSION
      554/tcp  open  rtsp    DoorBird video doorbell rtspd
      |_rtsp-methods: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER
      9999/tcp open  abyss?
      Service Info: Device: webcam
    
      Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
      Nmap done: 1 IP address (1 host up) scanned in 9.67 seconds
    

視聴するPCを設定する

利用しているPCのプラットフォームにあわせたWireGuard をインストールして設定します。

www.wireguard.com


  • インストールが完了したら、WireGuardの接続情報を設定します。

    users.soracom.io

  • ゲートウェイ機器で設定した手順と変わらないはずです。
  • すべての設定が完了したら、WireGuard クライアント を起動してSORACOMと通信できるかを確認します。

    users.soracom.io

  • SORACOMと通信できない場合には、ハートビート間隔 / PersistentKeepalive と記載されている設定を確認します。

    www.wireguard.com

RTSPへリモートアクセスして確認してみる

ATOMアプリの設定画面を開いて「PCで再生する画面」を表示します。この画面には RTSPのアクセス先 が表示されています。

カメラがオンラインの時にだけ設定画面が表示できます。最初に機能を有効化する際には確認のダイアログが表示されます。

設定画面には
rtsp://5374:1261@192.168.0.11/live
のような rtsp から始まるURLが表示されます。

URLの内容を少し分解してみると
rtsp://<ユーザ名>:<パスワード>@<IPアドレス>:<ポート番号>/live
というフォーマットになっています。

視聴用のPCが、AC2と同一のネットワークにいる場合には、このURLを指定するだけで再生できます。

$ ffplay -i rtsp://5374:1261@192.168.8.119/live

ffplay version 5.1.2 Copyright (c) 2003-2022 the FFmpeg developers
  built with Apple clang version 14.0.0 (clang-1400.0.29.202)
  configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.1.2_1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-neon
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
Input #0, rtsp, from 'rtsp://5374:1261@192.168.8.119/live': f=0/0
  Metadata:
    title           : Session streamed by "Atom"
    comment         : live
  Duration: N/A, start: 0.000625, bitrate: N/A
  Stream #0:0: Video: h264 (Main), yuv420p(tv, bt709, progressive), 1920x1080, 20 fps, 20 tbr, 90k tbn
  Stream #0:1: Audio: pcm_alaw, 8000 Hz, 1 channels, s16, 64 kb/s
[rtsp @ 0x148906660] RTP: dropping old packet received too late/1
    Last message repeated 2 times
[rtsp @ 0x148906660] RTP: dropping old packet received too late/2
[h264 @ 0x148977930] left block unavailable for requested intra mode
[h264 @ 0x148977930] error while decoding MB 0 15, bytestream 40430
[h264 @ 0x148977930] concealing 6409 DC, 6409 AC, 6409 MV errors in I frame
  39.49 A-V:  0.025 fd=  17 aq=    0KB vq=   47KB sq=    0B f=2/2

リモートでアクセスするためには


  • SORACOMユーザーコンソールで、ゲートウェイ機器が利用しているバーチャル SIMのローカルIPを確認します。
    • ここで確認したローカルIPがリモートアクセス先です。

      users.soracom.io

  • ゲートウェイ機器のファイヤーウォール設定で、WireGuard側からのポートフォワードを確認します。
    • ここで確認したポートがリモートアクセス先のポートです。

あとは、ATOMアプリで確認した RTSP のURLを確認した情報を使って整理します。
rtsp://5374:1261@10.182.176.48:8554/live
という形がリモートアクセス用のURLとなります。

これでRTSPへリモートアクセスするための準備は整ったので、実際にアクセスしてみます。

$ ffplay -i rtsp://5374:1261@10.182.176.48:8554/live

ffplay version 5.1.2 Copyright (c) 2003-2022 the FFmpeg developers
  built with Apple clang version 14.0.0 (clang-1400.0.29.202)
  configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.1.2_1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-neon
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
[rtsp @ 0x10b204370] Could not find codec parameters for stream 0 (Video: h264, none): unspecified size
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
Input #0, rtsp, from 'rtsp://5374:1261@10.182.176.48:8554/live':
  Metadata:
    title           : Session streamed by "Atom"
    comment         : live
  Duration: N/A, start: -106052.347750, bitrate: 64 kb/s
  Stream #0:0: Video: h264, none, 90k tbr, 90k tbn
  Stream #0:1: Audio: pcm_alaw, 8000 Hz, 1 channels, s16, 64 kb/s
[rtsp @ 0x10b204370] max delay reached. need to consume packet0/0
[rtsp @ 0x10b204370] RTP: missed 25 packets
[rtsp @ 0x10b204370] max delay reached. need to consume packet
[rtsp @ 0x10b204370] RTP: missed 1 packets
[rtsp @ 0x10b204370] max delay reached. need to consume packet
[rtsp @ 0x10b204370] RTP: missed 2 packets
[rtsp @ 0x10b204370] max delay reached. need to consume packet
[rtsp @ 0x10b204370] RTP: missed 1 packets
[rtsp @ 0x10b204370] max delay reached. need to consume packet
[rtsp @ 0x10b204370] RTP: missed 2 packets
[rtsp @ 0x10b204370] max delay reached. need to consume packet
[rtsp @ 0x10b204370] RTP: missed 2 packets
[rtsp @ 0x10b204370] max delay reached. need to consume packet
[rtsp @ 0x10b204370] RTP: missed 2 packets
[rtsp @ 0x10b204370] max delay reached. need to consume packet
[rtsp @ 0x10b204370] RTP: missed 2 packets

... The following is the same and has been omitted.

コンソールの出力結果を見てみると、なんとなくネットワーク的にはAC2までリーチしてそうな雰囲気が!!
しかし実際にはカメラ映像の視聴はできませんでした。コンソールにはパケットロスのログが流れるだけでした。残念。
RTSPをUDPで受信してるっぽい感じ?なので、TCPのみで受信できれば良さそう?

調べてみると ffmpegrtsp_transport というオプションがありました。これを利用すれば UDP以外 を指定できるようです。

ffmpeg.org

ffmpeg.org

ということで、この rtsp_transport オプションを付けて tcp を指定して実行します。

$ ffplay -rtsp_transport tcp -i rtsp://5374:1261@10.182.176.48:8554/live

ffplay version 5.1.2 Copyright (c) 2003-2022 the FFmpeg developers
  built with Apple clang version 14.0.0 (clang-1400.0.29.202)
  configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.1.2_1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-neon
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
Input #0, rtsp, from 'rtsp://5374:1261@10.182.176.48:8554/live':0
  Metadata:
    title           : Session streamed by "Atom"
    comment         : live
  Duration: N/A, start: 0.000000, bitrate: N/A
  Stream #0:0: Video: h264 (Main), yuv420p(tv, bt709, progressive), 1920x1080, 20 fps, 20 tbr, 90k tbn
  Stream #0:1: Audio: pcm_alaw, 8000 Hz, 1 channels, s16, 64 kb/s
  91.05 A-V: -0.018 fd=  19 aq=    0KB vq=   60KB sq=    0B f=0/0

おぉぉーちゃんと受信できる!映像が見える!
ざっと確認した感じだと、さっきと違ってパケットロスのログも出てない。

音声は何度か試してみましたが、いづれも再生開始から少し経つと聞こえなくなってしまいました。 ローカル接続の場合でも音声は同様に不安定だったので、まーこんなものかなぁーと。残念。

youtu.be

というわけで、無事にRTSPへリモート接続ができました。
SORACOMのサービスを利用しているので設定が必要となりますが、 最初の1度設定してしまえば、あとはローカル接続と変わらず接続できます。


  • 良い点
    • RTSPへリモートアクセスできる。
    • SORACOMのサービスを利用することでセキュアに接続できる。
    • 1度設定してしまえば、あとはローカル接続と変わらず利用できる。
    • 必要な時だけ接続して映像を視聴できる。
      • 電源やネットワーク利用量を節約できる可能性がある。
    • ゲートウェイ機器さえあれば、後はオンラインですべて対応できる。
    • ATOMアプリで表示しているライブ映像と比較しても遅延が小さい。
      • クラウドへの常時録画を再生しているSORACOMユーザーコンソールと遜色がない。
  • 注意点
    • SORACOMのサービスごとの設定が必要となる。
    • SORACOMのサービス利用料が発生する。
    • リアルタイム映像を視聴するための構成なので、録画が必要な場合には別途仕組み検討することになる。
    • 各種設定はドキュメントを確認しながら進められるが、利用するサービスごとにある程度の知識は必要となる。
    • 利用サービスが多くなると仕組み自体が複雑になる。
    • ゲートウェイ機器の用意が必要となる。
    • ゲートウェイ機器も含めて、仕組み全体の運用を考える必要がある。
    • 複数名で見たい場合は、視聴するPCごとに設定が必要となる。
      • バーチャル SIMを台数分用意するため費用がかかる。

[我流-4] SORACOM Arc と SORACOM Napter でRTSPへリモートアクセスする我流

RTSPはUDPの利用が必須だと勘違いしていたので、最初に試さなかったのですが
[我流-3]rtsp_transport オプションを調べた際に、UDP以外の受信指定ができることを知りました。
TCPで受信できるのであれば SORACOM Napter を利用しても実現できるのでは?と思い[我流-3] に続けて検証してみました。

SORACOM Napter とは

SORACOM Air のSIMを利用しているデバイスへ、セキュアにリモートアクセスできるサービスです。詳細はリンク先を確認してください。

soracom.jp

つまりは

[我流-3] でSORACOM Gate D2Dを利用してAC2とPCで通信していた部分を、SORACOM Napter に置き換えてやれば、バーチャル SIM1枚とSORACOM Gate D2D の費用も節約でき、仕組みもシンプルになりそうです。

SORACOM Napter を準備する

公式ドキュメントを参照して進めていきます。

users.soracom.io


  • SORACOMユーザーコンソールにログインして、[我流-3]ゲートウェイ機器に設定したバーチャル SIM を探します。
  • 該当のバーチャル SIMを選択して オンデマンドリモートアクセス を作成します。

    users.soracom.io

  • オンデマンドリモートアクセス は、SORACOM CLI / API でも作成できます。

    users.soracom.io

  • オンデマンドリモートアクセス の デバイス側ポート は ゲートウェイ機器でポートフォワード設定したポートです。
    • 今回は 8554 ポートで設定しました。
  • すべての設定が完了するとアクセスに必要な情報がダイアログに表示されます。

RTSPへリモートアクセスして確認してみる

[我流-3] 確認したRTSPのURLフォーマットを利用します。
rtsp://<ユーザ名>:<パスワード>@<IPアドレス>:<ポート番号>/live

<IPアドレス>:<ポート番号>
の部分を SORACOM Napter の準備で確認した接続情報に置き換えます。ダイアログに表示されている IPアドレス の項目をそのままコピーして利用します。

IPアドレス をコピペして、URLを整理すると
rtsp://5374:1261@18.181.57.86:12374/live
という形がリモートアクセス用のURLとなります。

これでRTSPへリモートアクセスするための準備は整ったので、実際にアクセスしてみます。

$ ffplay -rtsp_transport tcp -i rtsp://5374:1261@18.181.57.86:12374/live

ffplay version 5.1.2 Copyright (c) 2003-2022 the FFmpeg developers
  built with Apple clang version 14.0.0 (clang-1400.0.29.202)
  configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.1.2_1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-neon
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
Input #0, rtsp, from 'rtsp://5374:1261@18.182.176.143:47995/live':
  Metadata:
    title           : Session streamed by "Atom"
    comment         : live
  Duration: N/A, start: 0.000000, bitrate: N/A
  Stream #0:0: Video: h264 (Main), yuv420p(tv, bt709, progressive), 1920x1080, 20 fps, 20 tbr, 90k tbn
  Stream #0:1: Audio: pcm_alaw, 8000 Hz, 1 channels, s16, 64 kb/s
  61.59 A-V: -0.027 fd=   0 aq=    0KB vq=   53KB sq=    0B f=0/0   /0

[我流-3]と同様にアクセスできました。
手元で確認した感じだと、SORACOM Napter の場合は音声も安定して聞こえていました。 試した回数が少ないので偶然という気もしますが。。。。

というわけで、SORACOM Napter を利用しても無事にRTSPへリモート接続ができました。
SORACOMのサービスを利用しているので設定が必要となりますが、 [我流-3] と比べると少しは手軽なのではないかと。

youtu.be


  • 良い点
    • RTSPへリモートアクセスできる。
    • SORACOMのサービスを利用することでセキュアに接続できる。
    • 必要な時だけ接続して映像を視聴できる。
      • 電源やネットワーク利用量を節約できる可能性がある。
      • SORACOM Napter は利用した月以外は費用がかからない。
    • ゲートウェイ機器さえあれば、後はオンラインですべて対応できる。
    • ATOMアプリで表示しているライブ映像と比較しても遅延が小さい。
      • クラウドへの常時録画を再生しているSORACOMユーザーコンソールと遜色がない。
  • 注意点
    • SORACOMのサービスごとの設定が必要となる。
    • SORACOMのサービス利用料が発生する。
    • リアルタイム映像を視聴するための構成なので、録画が必要な場合には別途仕組み検討することになる。
    • 各種設定はドキュメントを確認しながら進められるが、利用するサービスごとにある程度の知識は必要となる。
    • 利用サービスが多くなると仕組み自体が複雑になる。
    • ゲートウェイ機器の用意が必要となる。
    • ゲートウェイ機器も含めて、仕組み全体の運用を考える必要がある。
    • 複数名で見たい場合は、視聴するPCごとに設定が必要となる。
    • SORACOM Napter での接続は、有効期限があるため常時接続のユースケースにはミスマッチとなる。

[我流-5] AC2の映像をOBS Studio を使って配信する我流

世の中にはいろいろな配信プラットフォームがあり、誰でも無料で手軽に配信できるような世界線ですよね。
実際に ATOM Cam(無印)ライブ配信する方法が、ATOMテックさんのBlogに掲載されています。

community.atomtech.co.jp

記載されている方法で「Webカメラ化」できるのは ATOM Cam(無印) のみで、今回利用しているAC2は非対応となっている。

info.atomtech.co.jp

記載されているもうひとつの方法の、「PCにインストールできるATOMアプリを利用する」は、Windows / Mac 版共に β版 であるのと、そもそもAC2は非対応となっている。

info.atomtech.co.jp

しかし、ここまでネタBlogを読んでくれている優しい人なら気がついていると思いますが、PCでスマホアプリが動かせればいいだけという話に。
なので [我流-1] で利用した エミュレーターの画面を、ライブ配信ソフトで配信すれば良さそうです。
ちょっと前に話題になった、整理券の呼び出し番号画面を配信するのと同じ発想ですねw

togetter.com

ライブ配信ソフトは利用できるプラットフォームも広く、利用者が多いため情報も多い OBS Studio を利用します。

obsproject.com

というわけで、やることはとてもとても簡単です。


  • OBS Studio をダウンロードしてインストールします。
  • ライブ配信先のプラットフォームを選んで必要な設定します。
    • YouTube Live は初回のライブ配信を行う場合、設定から24時間後に利用可能となりました。
  • OBS Studio 自体の詳細な設定は、Webを検索するとたくさん出てくるので割愛します。
  • Android エミュレーターを起動して、リアルタイム映像を確認したいカメラを表示します。
  • すべての設定が完了したら、あとはAndroid エミュレーターの画面をOBS Studio に取り込んで配信します。

OBS Studio は特に躓くことはなかったのですが、YouTube Live の有効化がWebを検索した情報とちょっと違ってたので自分用にメモしておきます。
YouTube Live が有効化されていないと OBS Studio で以下のようなダイアログが表示されます。

ダイアログのリンクをクリックすると、YouTube Live の設定画面がWebブラウザで表示されます。

Webを検索して出てくる情報の多くが、この設定画面の話なのですが「中級者向け機能」というのが追加になってるっぽい雰囲気でした。
実際にはYouTube Live の機能を有効化するために、以下の画面のリンクをクリックする必要がありました。

ちゃんと設定さえできていれば、たったこれだけ簡単にでライブ配信が行えます。 あとは、配信されている映像をWebブラウザで視聴すればリアルタイム映像を確認できます。

youtu.be

今回はエミュレーターのウィンドウだけをOBS Studio に取り込みました。他にも例えばデスクトップ全体を取り込んで、複数のエミュレーターを表示すれば複数カメラのリアルタイム映像を配信できたり、OBS Studio を使うことで柔軟な配信ができます。


  • 良い点
    • 必要なツールをインストールするだけで簡単に使えます。
    • 配信プラットフォームの仕様に依存するが、ライブ配信は自動で録画がされることが多い。
    • 配信用のPCとAC2があれば実現できます。
    • 複数名が視聴する場合でも、Webで視聴ができる。
    • 利用するツールや配信プラットフォームは、現時点では無償で利用できる。
    • 複数カメラのライブ映像を配信できる。
      • 例えば拠点別といった分けでエミュレーター並べて、画面を取り込めば良い。
    • 利用するツールと配信プラットフォームの使い方次第となるので汎用性が高い。
  • 注意点
    • 利用するツールや配信プラットフォームの使い方を習得する必要がある。
    • 現時点では利用するツールも配信プラットフォームも無償だが、将来的に継続する保証がない。
    • 利用するツールや配信プラットフォームの仕様に依存することになる。
      • 利用しているものに仕様変更があった場合は、自力で確認と対応が必要となる。
      • 利用する内容によっては利用規約やライセンスを確認して、条件を満たす必要がある。
    • 配信用のPCがSPOFになる可能性がある。
    • 配信する対象を変更するためには、配信用のPCを操作する必要がある。
    • 配信ツールの性能に依存する可能性がある。
      • 今回は何の設定もしないと、30~50秒程度の遅延 があった。
      • ツールの設定で「超低遅延」を選択することで 5~10秒程度の遅延 になった。

[我流-6] 諸々をAWSに任せてみたかった我流(未解決)

[我流-5] でOBS Studio を利用しましたが、実行はローカルPCで行なっています。
実際の運用を考えると、配信する対象のカメラを変更したい場合や配信を止めたい場合など、その都度ローカルPCがある場所に行く必要が出てきます。

[我流-4] で利用した SORACOM Arc と SORACOM Napter を使えば、配信用のローカルPCに簡単にリモートアクセスできます。

users.soracom.io

これで現地に行かなくても設定が変更できます。 しかし、ローカルで配信を行うということは、そのローカルネットワークにライブ配信トラフィックが流れ続けます。

おそらく光回線を利用している人が多い世界線かつ、個人の場合にここを気にする必要はないのかも?ですが、ネットワークに負荷がかかっている状態ではあるので、ここのカイゼンも考えてみます。

すぐに思いつくのは、配信する環境をDaaSに押し込めてしまえば良いのでは?という考えです。これであればネットワークもDaaS側のものを利用できます。
せっかっくなのでAWSのDaaSである Amazon WorkSpaces を利用してみようと思います。

aws.amazon.com

Amazon WorkSpaces を準備する

Amazon WorkSpaces を用意して、OBS Studio とAndroidエミュレーター をインストールしてみました。 OBS Studio は問題なくインストールでき、起動も問題なかったのですが、Androidエミュレーターの方は...

まず、Androidエミュレーターのインストール時に以下のようなエラーが表示されていました。

Unable to install Intel® HAXM
Your CPU does not support VT-x.
Unfortunately, your computer does not support hardware accelerated virtualization.
Here are some of your options:
 1) Use a physical device for testing
 2) Develop on a Windows/OSX computer with an Intel processor that supports VT-x and NX
 3) Develop on a Linux computer that supports VT-x or SVM
 4) Use an Android Virtual Device based on an ARM system image
   (This is 10x slower than hardware accelerated virtualization)

Unfortunately, your computer does not support hardware accelerated virtualization.

ハードウェアの仮想化ができないので使えないと。まーDaaSですしそんなもんかと。
少し調べてみるとAWSで ハードウェアの仮想化をサポートしてるのは、ベアメタルインスタンスだけっぽいという感じがw
ベアメタルインスタンスは金額も高いし、DaaSではなくIaaSなのでいろいろ設定が必要というところが面倒w

4) Use an Android Virtual Device based on an ARM system image (This is 10x slower than hardware accelerated virtualization)

10倍遅い!!とのこと。M1 Macを使ってるので普段もARM版のAndroid エミュレーターを利用しています。
なので、10倍遅くても動かないよりはだいぶマシなのがわかっているので、チャレンジしてみましたが...

起動しなかった際のコンソールの出力は

022-12-08 02:25:20,216 [ 634558]  ERROR -       Emulator: Nexus 5 API 31 - Android Studio Dolphin | 2021.3.1 Patch 1  Build #AI-213.7172.25.2113.9123335 
2022-12-08 02:25:20,216 [ 634558]  ERROR -       Emulator: Nexus 5 API 31 - JDK: 11.0.13; VM: OpenJDK 64-Bit Server VM; Vendor: JetBrains s.r.o. 
2022-12-08 02:25:20,216 [ 634558]  ERROR -       Emulator: Nexus 5 API 31 - OS: Linux 
2022-12-08 02:25:20,216 [ 634558]  ERROR -       Emulator: Nexus 5 API 31 - Last Action: WelcomeScreen.RunDeviceManager 

という感じで原因もいまいちわからず。

Amazon WorkSpaces は Ubuntu Desktop環境だけでなくWindows環境も利用できるので、Windows / Ubuntu 両方試してみましたが、残念ながらどちらもARM版のイメージは起動しませんでした。

Windowsの方はAndroid Studio 以外のエミュレーターも試したみましたが、ハードウェアの仮想化が必要なものが多く、ほとんどでダメでした。 ハードウェアの仮想化が必要じゃないものもありましたが、グラフィックドライバーが古くインストールできなかったり、インストールできても正常に動作しないといった感じでした。無念...

Google Cloud だと ネストされた仮想化 を許可するだけで使えそうだったり

cloud.google.com

そもそもWebでAndroidエミュレーターのUIを表示できたりするみたいなので

source.android.com

この辺を頑張れば動作はしそうですね。面白そうですが今回は本題からホームラン級で逸れるのでやめておきますw

Amazon WorkSpaces でエミュレーターが動作するのであれば、ライブ配信のプラットフォームにも 同じくAWSのサービスである AWS Media Services を利用してみたかったのが心残り。残念。

aws.amazon.com

OBS Studio での AWS Media Services 利用に関して、AWSのBlogに以下のような投稿があったので試してみたかったのと、AWSに録画データが蓄積できるのであれば、後で他のAWSのサービスを使って色々できそうかなーと思ったので。

aws.amazon.com

AWS Media Services の利用と、AWSに蓄積される録画データをいろいろと試してみるのは、また別の機会にやってみたいと思います。
エミュレーター動くよ!とか、他にも方法あるよ!とかあればぜひ教えてください。

まとめ

  • リアルタイムで視聴する「だけ」ならいろいろ方法はある
  • 実用する場合は、仕組みや運用も含めて考える必要がある
  • 単純にダッシュボード的に表示だけしたいなら、タブレット1台とモニター1台を用意してダブレットの画面を表示した方が簡単かつ安定する
  • 無償で利用できるサービスも多いが、制限や仕様が変更される可能性があるので実用するなら考慮はしておく方が良さそう
  • 有償のサービスを利用するのは心理的にハードルもあるが、細かいところを丸ごとお任せできるのと、サポートを受けられるというメリットもある
  • プラットフォームを利用することで、機能追加やカイゼンといった恩恵も受けられる
  • ソラカメが今後もアップデートを続けて、より魅力的になることを期待したい

というわけで、ネタ多めで長めの記事となってしまいました...
技術的に「できる」は、探すと意外に色々あることがわかります。
いっぽうで本番で利用するような運用が「できる」を考えると、なかなか難しいこともわかります。

使えるデバイスが手元にあるのであれば、必要に応じていろいろ試してみるのお勧めします。
「できる」が増えるのは楽しいですよ。くだらないことって大事ですよね。

以上です。