Tapo C200というネットワークWi-Fiカメラを使用しています。このカメラは4,000円以下で購入できますが、なかなかよくできています。
また、マニュアル等には記載がなかったのですが、公式サイトで「仕様外機能としてRTSPプロトコルを開放しています」とありました。
せっかくなので、Amazon Kinesis Video Stream(以下KVS) プロデューサーを使って、このカメラの動画をKVSにアップロードして、閲覧や蓄積できるようにしてみます。
Kinesis Video Streams プロデューサーライブラリには何種類かありますが、今回は Amazon Linux 2 で「C++ プロデューサーライブラリ」を使って、GStreamer プラグインとして使ってみます。
AWSのマネジメントコンソールから、IAMでKVS用のユーザーを作成します。認証タイプは「アクセスキー – プログラムによるアクセス」とし、ポリシー「AmazonKinesisVideoStreamsFullAccess」を付与します。ここでAccess key IDとSecret access keyは大事にメモっておきます。
Amazon Linux 2 で ec2-user として作業します。まずは必要そうなパッケージを入れます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
sudo yum install \ cmake3 \ m4 \ git \ openssl-devel \ openssl-libs \ libcurl-devel \ gstreamer1 \ gstreamer1-devel \ log4cxx \ gstreamer1-plugins-base \ gstreamer1-plugins-base-devel \ gstreamer1-plugins-good \ gstreamer1-plugins-bad-free \ gstreamer1-plugins-bad-free-devel \ gstreamer1-plugins-base-tools \ gstreamer1-plugins-ugly-free-devel |
あと、C++のビルドするために、Development Toolsも入れておきます。
1 |
sudo yum groupinstall 'Development Tools' |
適当なディレクトリ(今回はwork)を作成し、gitでC++用プロデューサーSDK を clone して、ビルド用ディレクトリ作って cmake3 する。
GStreamerのプラグインを作成するためのオプションを指定します。
1 2 3 4 5 6 7 8 |
mkdir work cd work git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git cd amazon-kinesis-video-streams-producer-sdk-cpp/ mkdir build cd build cmake3 .. -DBUILD_GSTREAMER_PLUGIN=ON make |
うまくビルドできたら、動作確認してみる。
GStreamerのプラグインのパスと、さっきビルドしたライブラリのパスを指定しておく。
1 2 |
export GST_PLUGIN_PATH=/home/ec2-user/work/amazon-kinesis-video-streams-producer-sdk-cpp/build export LD_LIBRARY_PATH=/home/ec2-user/work/amazon-kinesis-video-streams-producer-sdk-cpp/open-source/local/lib |
以下のコマンドでGStreamerのプラグインとして、kvssink が認識されているか確認してみる。
1 |
gst-inspect-1.0 kvssink |
次のように表示されたら成功。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Factory Details: Rank primary + 10 (266) Long-name KVS Sink Klass Sink/Video/Network Description GStreamer AWS KVS plugin Author AWS KVS <kinesis-video-support@amazon.com> Plugin Details: Name kvssink Description GStreamer AWS KVS plugin Filename /home/ec2-user/work/amazon-kinesis-video-streams-producer-sdk-cpp/build/libgstkvssink.so Version 1.0 License Proprietary Source module kvssinkpackage Binary package GStreamer Origin URL http://gstreamer.net/ GObject +----GInitiallyUnowned +----GstObject +----GstElement +----GstKvsSink |
KVSにストリームするために、Access key IDとSecret access keyが必要です。アクセスキーIDとシークレットアクセスキー、デフォルトリージョンを東京に設定。
1 2 3 |
export AWS_ACCESS_KEY_ID=[アクセスキーID] export AWS_SECRET_ACCESS_KEY=[シークレットアクセスキー] export AWS_DEFAULT_REGION=ap-northeast-1 |
GStreamer 起動コマンドの例を参考に、Tapo C200の動画をKVSにストリーミングしてみます。
1 |
gst-launch-1.0 -v rtspsrc location="rtsp://YourCameraRtspUrl" short-header=TRUE ! rtph264depay ! video/x-h264, format=avc,alignment=au ! h264parse ! kvssink stream-name="Your_Stream_Name" storage-size=128 aws-region="ap-northeast-1" |
KVS側で先にストリーム名を作成していなくても、ここで指定したリージョンでストリームが作成されました。
うまくいっていれば、マネジメントコンソールで、対象のリージョンでKinesis Video Streamsを開き、ビデオストリームから、対象のストリーム名を選択、メディア再生で動画が確認できます。
思いのほか簡単にできました。
ここに防犯カメラの動画を蓄積して、SageMakerなんかでオブジェクト認識したりしたら楽しそうです。