ATOM Cam 2 を Amazon Kinesis Video Streams に繋げてみた #ATOMCam #aws

目次

前提

uchimanajet7.hatenablog.com

前回の最後でATOM Cam 2(以下、AC2)がRTSPに対応してるのがわかりました。 今回はこのRTSPサーバーで配信されている映像を、Amazon Kinesis Video Streams(以下、KVS)に流してみようと思います。

とは言っても、AC2-----> RTSPクライアント -----> KVS という感じで、途中に中継の役割を持ってもらうだけなんですけど。

RTSPとは?

そもそもRTSPとは?私自身も詳しくは知らなかったので調べてみました。

ja.wikipedia.org

Real Time Streaming Protocol(リアルタイム・ストリーミング・プロトコル、略称:RTSP)は IETF において標準化されたリアルタイム性のあるデータの配布 (ストリーミング) を制御するためのプロトコルである。ストリーミングデータ自体の配信を行なうためのプロトコルではない。1998年4月にその最初の版がRFC 2326として標準化されたが、様々な問題点があることが指摘され、改訂が続けられている。2016年にReal-Time Streaming Protocolバージョン2.0がRFC 7826として標準化された。

tex2e.github.io

実態としては rtsp:// で始まるURIで記載され、HTTPと同じようにクライアント側からのリクエストにサーバー側がレスポンスを返すという形で通信されているようです。

実際にAC2のRTSPサーバーの動作確認をしてみると

のような形でリアルタイムの映像を確認することができます。

動作確認ではFFmpeg をクライアントとして利用しています

ffmpeg.org

RTSPクライアントならなんでもOKなはずです。例えばVLC media playerでも再生可能でした

www.videolan.org

FFmpeg のインストールはHomebrewで行いましたが、公式にはMac用のStatic buildも用意されているようなので環境に合わせて利用してください。

trac.ffmpeg.org

中継機

中継機はなんでも良いのですが、AC2とセットで稼働してないとダメなので、PCで中継するよりは中継専用で動いているほうが都合がよさそう。

ということで、これも手元にあった Raspberry Pi 3 B+(以下、ラズパイ) を利用してみることにした

$ uname -a
Linux raspi 5.15.38-v7+ #1552 SMP Mon May 9 17:06:58 BST 2022 armv7l GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 11 (bullseye)
Release:    11
Codename:   bullseye

今現在、ラズパイを手に入れようとすると価格が高騰しているようなので、動作確認するだけなら手持ちの他の機器かPCを使うことも検討してください

Amazon Kinesis Video Streams

KVSに接続するにはラズパイをプロデューサーとして動作させれば良さそう。 そして、このプロデューサーがアップロードするメディアを、RTSPクライアントで受信した映像にすれば希望の形になりそう

aws.amazon.com

dev.classmethod.jp

www.youtube.com

いろいろ調べてみると、公式の情報がすごい充実していた。さすがAWSGitHubリポジトリにもいろいろあって、動作確認するぐらいの話なら作ったりしなくて良さそうな雰囲気

github.com

Producer Libraries なるSDKがあるらしく、これを利用するだけで良さそう

docs.aws.amazon.com

設定

実際にラズパイにKVSのProducerをセットアップしてみる。今回利用するのは以下。

github.com

Google先生に聞いてみると、いろいろな記事が出てきましたが、READMEに記載の通り進めれば問題なくセットアップできました。

github.com

cmake が入ってないとか、ビルドに必要なツール系が不足していることがあるので、その場合は以下を確認して追加でインストールしました。

github.com

GStreamer のplugin として動作させる必要があるみたいなのでcmake のオプションは以下で実行しました。

cmake -DBUILD_GSTREAMER_PLUGIN=TRUE ..

github.com

gstreamer.freedesktop.org

ラズパイだとcmakeは終了までにそこそこ時間がかかりました。気長に待ちましょう。 そしてcmakeが終了したら make の実行を忘れずに。。。。

github.com

実行

ビルドが終了したら、ドキュメント記載の通りビルドされたライブラリにパスを通して、動作を確認します。

github.com

To load this plugin set the following environment variables. This should be run from the root of the repo, NOT the build directory.

コマンドをコピペで試す場合には、カレントディレクトリの位置だけ注意が必要って感じですね。 ここまで来れば、あとは実際に映像の転送を開始するだけです。

gst-launch-1.0 -v rtspsrc location="rtsp://YourAC2RtspUrl" short-header=TRUE ! rtph264depay ! video/x-h264, format=avc,alignment=au ! h264parse ! kvssink stream-name="YourStreamName"

docs.aws.amazon.com

当然ながら、実行にはAWSへの権限と認証が必要です。 公式ドキュメントだと実行時引数に必要な access-key/ secret-key/ aws-region を渡しています。

今回はビルドしたライブラリにパスを通すタイミングでAWSの接続に必要な情報を環境変数に設定しています。

export AWS_DEFAULT_REGION=ap-northeast-1
export AWS_ACCESS_KEY_ID=YourAccessKey
export AWS_SECRET_ACCESS_KEY=YourSecretKey

映像の確認

最後にAC2の映像を確認します。KVSのWebコンソールに簡易的なプレーヤーがあるので、これを利用すれば映像が確認できます。 今回試した私の環境だと、遅延はおおよそ10秒以内という感じでした。 ネットワーク環境や転送している機器の性能にも依存しそうなのであくまでも目安で。

この簡易的なプレーヤーだとAWSにログインしないと確認できない状態です もう少しゆるく共有できると良さそうですが、作り込むところまでは。。。

そこはさすがのAWSサービスと言ったところで、探してみると以下がありました。

github.com

このWeb Viewerで利用する読み取り専用のAWS認証情報を作成し、ストリーム名ををはじめとした必要な項目を入力すればライブ映像を確認することができました。とても便利。

まとめ

  • ATOM Cam 2 の映像を Amazon Kinesis Video Streams に流し込んでみた
  • 中継機が必要となるが、ドキュメント通りに設定すれば簡単に始められる
  • Dockerイメージが用意されているようなので、こっちのほうがお手軽そう

docs.aws.amazon.com

  • AWS側に映像データがアップロードできるので、クラウド側のアセットが利用できるようになる
  • AC2単体でクラウド側への映像アップロードができると幸せになれそう
  • クラウドまで映像が上がってるので ソラカメ のサービス拡張に期待

soracom.jp

  • 長期安定運用を考えると中継機の部分は考慮が必要そう
  • KVS周辺のドキュメンとや、サンプルコードが充実していた
  • 公式ドキュメントやサンプルなど非常に助かった。ドキュメント大事。
  • 試すのは簡単だったので、AC2 とラズパイその他中継用の機器を持て余している人がいれば是非
  • Atom Cam Swing にはRTSPがなかったので、RTSPが目的の場合はAC2が必要かも

ATOM Cam Swingwww.atomtech.co.jp

  • あと、まさに同じことをしているAWS公式の動画があったので見ながらハンズオンするのが良さそう

www.youtube.com

以上になります。


Following is in English

medium.com