目次
- 目次
- SORACOM Advent Calendar 2022
- Soracom Cloud Camera Services とATOM Cam 2
- [本流] ソラカメを使う
- [我流-1] PCでスマホアプリを利用する我流
- [我流-2] RTSPを中継機で転送する我流
- [我流-3] SORACOM Arc と SORACOM Gate D2D でRTSPへリモートアクセスする我流
- [我流-4] SORACOM Arc と SORACOM Napter でRTSPへリモートアクセスする我流
- [我流-5] AC2の映像をOBS Studio を使って配信する我流
- [我流-6] 諸々をAWSに任せてみたかった我流(未解決)
- まとめ
SORACOM Advent Calendar 2022
この記事は SORACOM Advent Calendar 2022 の9日目の記事です。
SORACOM Advent Calendar に参加するのは 2016 / 2017 以来となり、個人的にはなかなか感慨深いものがありますねー
2017年分は公開日が1日遅れて気がするので、過去の自分もっと頑張っておけよ。。。
今回は ATOM Cam 2 の リアルタイム映像 を PC で確認する方法を書いてみました。[本流]
とできるけどネタレベルの [我流]
が書いてあるので、我流の方は生暖かく見ていただけると
あと毎回のお約束ですが、すべての内容は個人で検証したものになります。文中の現時点は2022年12月8日を指しています。
利用しているATOMアプリと ATOM Cam 2 のファームウェアのバージョンは以下の画像を確認してください。
バージョンや利用するツールによっては期待している動作をしないことがあります。
本流と我流はこの番組が好きなのでw
Soracom Cloud Camera Services とATOM Cam 2
Soracom Cloud Camera Services(以下、ソラカメ)とATOM Cam 2(以下、AC2)の関係を簡単に紹介します。詳細は各リンク先を確認してください。
ソラカメはソラコムが提供しているクラウド型のカメラサービスです。
AC2はアトムテックが販売してるネットワーク型のカメラです。
現時点でAC2を利用するにはスマートフォンアプリの ATOMアプリ
を利用する必要があります。
ソラカメ対応製品としてAC2が利用できるので、ソラカメのライセンスを購入することでAC2を使ったクラウドへの常時録画サービスを利用できることになります。
[本流] ソラカメを使う
ATOMアプリで登録されているカメラのリアルタイム映像を確認できます。
ソラカメを利用することにより「クラウドへの常時録画」が行われ、クラウド側に録画データが蓄積されます。
ソラカメでは、この録画されたデータをSORACOMユーザーコンソール上で視聴できるので、PCで映像を確認できるようになります。また、APIでの操作ができるため他のサービスへのインプットが行えます。
- 良い点
- 注意点
[我流-1] PCでスマホアプリを利用する我流
以前Blogに記載した内容ですが、PCにエミュレーターをインストールしてスマホアプリを利用する方法です。この方法ならPCでスマホアプリが利用できるため、PC上でリアルタイム映像を確認できます。
- 良い点
- 注意点
[我流-2] RTSPを中継機で転送する我流
こちらも以前Blogに記載した内容ですが、AC2はRTSPサーバーとして動作するので同一ネットワーク内であれば、RTSP経由でリアルタイム映像を視聴できます。
これを利用して同一ネットワーク内にRTSPを転送する中継機を置くことで、PCで閲覧できる場所に映像を転送できます。
- 良い点
- 注意点
[我流-3] SORACOM Arc と SORACOM Gate D2D でRTSPへリモートアクセスする我流
ここからは新作です。やっとSORACOMのサービスを利用しますw
SORACOM Gate D2D (Device to Device) とは
SORACOM AirのSIMを利用しているデバイス同士が、インターネットを経由せずに SORACOM網内で同一サブネットとしてプライベートIPで通信できるサービスです。詳細はリンク先を確認してください。
SORACOM Arc とは
WireGuardを利用することで、既存の通信環境を使ってSORACOMへセキュアに接続できるサービスです。詳細はリンク先を確認してください。
同一のネットワークになることで
AC2のRTSPは同一ネットワークであれば利用できるので、SORACOM Gate D2D を使うことで別のネットワークにあるデバイスでも、同一のネットワークと扱えるようになります。
ゲートウェイとなるルーターに LTE / WireGuard が利用できる機種を選択することで、現在のWi-Fiでの接続が必須なAC2でも、SORACOM Gate D2D が利用できます。
今回はAC2の通信量が多いことと、Advent Calendar用の検証が目的のため WireGuard が利用可能なルーターを利用して、SORACOM Arc 経由で接続を行いました。
今回は手元にあるものを利用しましたが、 LTE / WireGuard を利用できるルーターを新規で探す場合は、以下を見てみてください。
これで AC2が SORACOM Gate D2D のネットワークに参加できるようになります。
同じく、RTSPを視聴するPC側にUSBドングルや、SORACOM Arc を利用することで、同一ネットワーク内となります。
結果としてリモートからRTSPへアクセスできるようになります。
SORACOM Arc を準備する
SORACOMはドキュメントがとても丁寧に書かれています。
SORACOM Arcの利用に関しても、公式ドキュメントを参照して進めていきます。
- 今回は単体でバーチャル SIMを作成します。
- ゲートウェイ用と視聴するPC用の合計2枚のバーチャル SIMを作成します。
- バーチャル SIM を作成する際に、画面に表示される
PrivateKey
は後から再確認できないため、必ず記録してください。
- バーチャル SIM を作成する際に、画面に表示される
- SIM グループがない場合は作成します。
- 作った SIM グループ に 2枚のバーチャル SIMを所属させます。
SORACOM Gate D2D を準備する
同様にSORACOM Gate D2Dの利用に関しても、公式ドキュメントを参照して進めていきます。
- VPG を作成する際には
インターネットゲートウェイを使う
をONにする。- AC2を通常利用するためにインターネットアクセスが必要となるため。
- AC2を通常利用するためにインターネットアクセスが必要となるため。
- VPG を切り替えるのはグループ単位となります。
- SORACOM Arc で SORACOM Gate D2Dを利用するために、WireGuard 設定ファイルを編集する。
- デバイスサブネットのIPレンジを許可するために
AllowedIPs
に記載する。
- デバイスサブネットのIPレンジを許可するために
- VPG を切り替えた場合にはSIMのセッションリセットを行います。
ゲートウェイ機器を設定する
詳細な設定は利用するゲートウェイ機器で異なるため、利用する機器のマニュアルを確認して設定してください。
- VPNの設定を探し
WireGuard クライアント
の設定します。 - バーチャル SIMを発行さいた際に、画面に表示されていた情報を
WireGuard クライアント
の設定として入力します。 - SORACOM Gate D2D の準備で設定した、
デバイスサブネットのIPレンジ
は必ず設定に追加します。 - すべての設定が完了したら、WireGuard クライアント を起動してSORACOMと通信できるかを確認します。
- SORACOMと通信できない場合には、
ハートビート間隔 / PersistentKeepalive
と記載されている設定を確認します。 - リモートアクセスの宛先は、ゲートウェイ機器で利用している バーチャル SIM に割り振られている
ローカルIP
になります。- SORACOMユーザーコンソールで、該当のバーチャル SIMの
ローカルIP
を確認します。
- SORACOMユーザーコンソールで、該当のバーチャル SIMの
- ゲートウェイ機器のファイヤーウォール設定で、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 をインストールして設定します。
- インストールが完了したら、WireGuardの接続情報を設定します。
- ゲートウェイ機器で設定した手順と変わらないはずです。
- すべての設定が完了したら、WireGuard クライアント を起動してSORACOMと通信できるかを確認します。
- SORACOMと通信できない場合には、
ハートビート間隔 / PersistentKeepalive
と記載されている設定を確認します。
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 2times[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 015, bytestream 40430[h264 @ 0x148977930] concealing 6409 DC, 6409 AC, 6409 MV errors in I frame39.49 A-V: 0.025fd=17aq= 0KB vq= 47KB sq= 0B f=2/2
リモートでアクセスするためには
- SORACOMユーザーコンソールで、ゲートウェイ機器が利用しているバーチャル SIMのローカルIPを確認します。
- ここで確認したローカルIPがリモートアクセス先です。
- ここで確認したローカルIPがリモートアクセス先です。
- ゲートウェイ機器のファイヤーウォール設定で、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のみで受信できれば良さそう?
調べてみると ffmpegに rtsp_transport
というオプションがありました。これを利用すれば UDP以外
を指定できるようです。
ということで、この 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/s91.05 A-V: -0.018fd= 19aq= 0KB vq= 60KB sq= 0B f=0/0
おぉぉーちゃんと受信できる!映像が見える!
ざっと確認した感じだと、さっきと違ってパケットロスのログも出てない。
音声は何度か試してみましたが、いづれも再生開始から少し経つと聞こえなくなってしまいました。 ローカル接続の場合でも音声は同様に不安定だったので、まーこんなものかなぁーと。残念。
というわけで、無事にRTSPへリモート接続ができました。
SORACOMのサービスを利用しているので設定が必要となりますが、
最初の1度設定してしまえば、あとはローカル接続と変わらず接続できます。
- 良い点
- 注意点
[我流-4] SORACOM Arc と SORACOM Napter でRTSPへリモートアクセスする我流
RTSPはUDPの利用が必須だと勘違いしていたので、最初に試さなかったのですが[我流-3]
の rtsp_transport
オプションを調べた際に、UDP以外の受信指定ができることを知りました。
TCPで受信できるのであれば SORACOM Napter を利用しても実現できるのでは?と思い[我流-3]
に続けて検証してみました。
SORACOM Napter とは
SORACOM AirのSIMを利用しているデバイスへ、セキュアにリモートアクセスできるサービスです。詳細はリンク先を確認してください。
つまりは
[我流-3]
でSORACOM Gate D2Dを利用してAC2とPCで通信していた部分を、SORACOM Napter に置き換えてやれば、バーチャル SIM1枚とSORACOM Gate D2D の費用も節約でき、仕組みもシンプルになりそうです。
SORACOM Napter を準備する
公式ドキュメントを参照して進めていきます。
- SORACOMユーザーコンソールにログインして、
[我流-3]
でゲートウェイ機器に設定したバーチャル SIM を探します。 - 該当のバーチャル SIMを選択して
オンデマンドリモートアクセス
を作成します。 オンデマンドリモートアクセス
は、SORACOM CLI / APIでも作成できます。オンデマンドリモートアクセス
の デバイス側ポート は ゲートウェイ機器でポートフォワード設定したポートです。- 今回は
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/s61.59 A-V: -0.027fd= 0aq= 0KB vq= 53KB sq= 0B f=0/0 /0
[我流-3]
と同様にアクセスできました。
手元で確認した感じだと、SORACOM Napter の場合は音声も安定して聞こえていました。
試した回数が少ないので偶然という気もしますが。。。。
というわけで、SORACOM Napter を利用しても無事にRTSPへリモート接続ができました。
SORACOMのサービスを利用しているので設定が必要となりますが、
[我流-3]
と比べると少しは手軽なのではないかと。
- 良い点
- 注意点
[我流-5] AC2の映像をOBS Studio を使って配信する我流
世の中にはいろいろな配信プラットフォームがあり、誰でも無料で手軽に配信できるような世界線ですよね。
実際に ATOM Cam(無印)
でライブ配信する方法が、ATOMテックさんのBlogに掲載されています。
記載されている方法で「Webカメラ化」できるのは ATOM Cam(無印)
のみで、今回利用しているAC2は非対応となっている。
記載されているもうひとつの方法の、「PCにインストールできるATOMアプリを利用する」は、Windows / Mac版共に β版 であるのと、そもそもAC2は非対応となっている。
しかし、ここまでネタBlogを読んでくれている優しい人なら気がついていると思いますが、PCでスマホアプリが動かせればいいだけという話に。
なので [我流-1]
で利用した エミュレーターの画面を、ライブ配信ソフトで配信すれば良さそうです。
ちょっと前に話題になった、整理券の呼び出し番号画面を配信するのと同じ発想ですねw
ライブ配信ソフトは利用できるプラットフォームも広く、利用者が多いため情報も多い OBS Studio を利用します。
というわけで、やることはとてもとても簡単です。
- OBS Studio をダウンロードしてインストールします。
- ライブ配信先のプラットフォームを選んで必要な設定します。
- OBS Studio 自体の詳細な設定は、Webを検索するとたくさん出てくるので割愛します。
- Androidエミュレーターを起動して、リアルタイム映像を確認したいカメラを表示します。
- すべての設定が完了したら、あとはAndroidエミュレーターの画面をOBS Studio に取り込んで配信します。
OBS Studio は特に躓くことはなかったのですが、YouTube Live の有効化がWebを検索した情報とちょっと違ってたので自分用にメモしておきます。
YouTube Live が有効化されていないと OBS Studio で以下のようなダイアログが表示されます。
ダイアログのリンクをクリックすると、YouTube Live の設定画面がWebブラウザで表示されます。
Webを検索して出てくる情報の多くが、この設定画面の話なのですが「中級者向け機能」というのが追加になってるっぽい雰囲気でした。
実際にはYouTube Live の機能を有効化するために、以下の画面のリンクをクリックする必要がありました。
ちゃんと設定さえできていれば、たったこれだけ簡単にでライブ配信が行えます。 あとは、配信されている映像をWebブラウザで視聴すればリアルタイム映像を確認できます。
今回はエミュレーターのウィンドウだけをOBS Studio に取り込みました。他にも例えばデスクトップ全体を取り込んで、複数のエミュレーターを表示すれば複数カメラのリアルタイム映像を配信できたり、OBS Studio を使うことで柔軟な配信ができます。
- 良い点
- 注意点
- 利用するツールや配信プラットフォームの使い方を習得する必要がある。
- 現時点では利用するツールも配信プラットフォームも無償だが、将来的に継続する保証がない。
- 利用するツールや配信プラットフォームの仕様に依存することになる。
- 利用しているものに仕様変更があった場合は、自力で確認と対応が必要となる。
- 利用する内容によっては利用規約やライセンスを確認して、条件を満たす必要がある。
- 配信用のPCがSPOFになる可能性がある。
- 配信する対象を変更するためには、配信用のPCを操作する必要がある。
- 配信ツールの性能に依存する可能性がある。
- 今回は何の設定もしないと、
30~50秒程度の遅延
があった。 - ツールの設定で「超低遅延」を選択することで
5~10秒程度の遅延
になった。
- 今回は何の設定もしないと、
[我流-6] 諸々をAWSに任せてみたかった我流(未解決)
[我流-5]
でOBS Studio を利用しましたが、実行はローカルPCで行なっています。
実際の運用を考えると、配信する対象のカメラを変更したい場合や配信を止めたい場合など、その都度ローカルPCがある場所に行く必要が出てきます。
[我流-4]
で利用した SORACOM Arc と SORACOM Napter を使えば、配信用のローカルPCに簡単にリモートアクセスできます。
これで現地に行かなくても設定が変更できます。 しかし、ローカルで配信を行うということは、そのローカルネットワークにライブ配信のトラフィックが流れ続けます。
おそらく光回線を利用している人が多い世界線かつ、個人の場合にここを気にする必要はないのかも?ですが、ネットワークに負荷がかかっている状態ではあるので、ここのカイゼンも考えてみます。
すぐに思いつくのは、配信する環境をDaaSに押し込めてしまえば良いのでは?という考えです。これであればネットワークもDaaS側のものを利用できます。
せっかっくなのでAWSのDaaSである Amazon WorkSpaces を利用してみようと思います。
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 だと ネストされた仮想化
を許可するだけで使えそうだったり
そもそもWebでAndroidエミュレーターのUIを表示できたりするみたいなので
この辺を頑張れば動作はしそうですね。面白そうですが今回は本題からホームラン級で逸れるのでやめておきますw
Amazon WorkSpaces でエミュレーターが動作するのであれば、ライブ配信のプラットフォームにも 同じくAWSのサービスである AWS Media Services を利用してみたかったのが心残り。残念。
OBS Studio での AWS Media Services 利用に関して、AWSのBlogに以下のような投稿があったので試してみたかったのと、AWSに録画データが蓄積できるのであれば、後で他のAWSのサービスを使って色々できそうかなーと思ったので。
AWS Media Services の利用と、AWSに蓄積される録画データをいろいろと試してみるのは、また別の機会にやってみたいと思います。
エミュレーター動くよ!とか、他にも方法あるよ!とかあればぜひ教えてください。
まとめ
- リアルタイムで視聴する「だけ」ならいろいろ方法はある
- 実用する場合は、仕組みや運用も含めて考える必要がある
- 単純にダッシュボード的に表示だけしたいなら、タブレット1台とモニター1台を用意してダブレットの画面を表示した方が簡単かつ安定する
- 無償で利用できるサービスも多いが、制限や仕様が変更される可能性があるので実用するなら考慮はしておく方が良さそう
- 有償のサービスを利用するのは心理的にハードルもあるが、細かいところを丸ごとお任せできるのと、サポートを受けられるというメリットもある
- プラットフォームを利用することで、機能追加やカイゼンといった恩恵も受けられる
- ソラカメが今後もアップデートを続けて、より魅力的になることを期待したい
というわけで、ネタ多めで長めの記事となってしまいました...
技術的に「できる」は、探すと意外に色々あることがわかります。
いっぽうで本番で利用するような運用が「できる」を考えると、なかなか難しいこともわかります。
使えるデバイスが手元にあるのであれば、必要に応じていろいろ試してみるのお勧めします。
「できる」が増えるのは楽しいですよ。くだらないことって大事ですよね。
以上です。