Amazon Kinesis Video StreamsでPanasonicやAXISのMJPEGの映像をアップロードするメモ
Webカメラの映像をAmazon Kinesis Video Streamsにアップロードしてみている。
Kineisis Video StreamsではアップロードにKinesis ビデオストリーム プロデューサーライブラリ - Amazon Kinesis Video Streamsを使うと良いそうで、
gstreamerの kvssink
というシンクエレメントのプラグインも用意されているので、これを試す。
プロデューサーライブラリはこれの kinesis-video-native-build
というディレクトリで install-script
を実行すると、 ローカルディレクトリ以下だけで動かせるよう、gstreamer 本体を含む必要なライブラリ一式ソースからダウンロードしてビルドしてくれる。
このへんの説明は
Kinesis ビデオストリーム プロデューサーライブラリ - Amazon Kinesis Video Streams
などに書いてある。
ところで、よくあるPanasonicやAXISというメーカーの監視カメラにはhttpでmjpegを取得するAPIが用意されているものがある。Panasonicに至っては、映像を取得するAPIはMJPEGしか無いものもある。
そこで、gstreamerでは souphttpsrc
というソースエレメントを使うとhttpのリクエストを簡単に行える。 単純にMJPEGの映像を再生するだけであれば、このように簡単にできる。
$ gst-launch-1.0 souphttpsrc location=https://<user>:<passwd>@<webcam mjpeg api uri> ! jpegparse ! jpegdec ! autvideosink
MJPEGAPIのURIは、Panasonicなら http://<webcam ip>/nphMotionJpeg?Resolution=640x480
とか、 AXISなら http://<webcam ip>/axis-cgi/mjpg/video.cgi
という感じ。
しかし、上に書いたプロデューサーライブラリのgstreamerには souphttpsrc
が含まれていない。 ビルドするライブラリ一式の中に libsoup
が入っていないためだ。
install-scriptにlibsoupのビルドを追加しても良いが、ただでさえinstall-scriptは時間がかかるので、kvssinkプラグインのみビルドして使うことにした。
aptでインストールできるgstreamerはsouphttpsrcが入っているので、これを使うようにDockerfileにした。
gstreamerでは GST_PLUGIN_PATH
を設定してやるとプラグインが追加できる。
log4cplus-1.2.0とlibgtestはaptでインストールできなかったのでビルドした。これだと、install-scriptでビルドするより圧倒的に早いしプラグインも多い。
Docker ビルドし、実行したら、kvssink が使えるのでgstreamerのパイプラインを以下のようにつないで実行する
$ gst-launch-1.0 souphttpsrc location=http://<webcam mjpeg api uri> ! jpegparse ! jpegdec ! queue ! x264enc tune=zerolatency ! h264parse ! kvssink stream-name=<stream name>
とりあえず、これだけで、AWSコンソールでのプレビューはできる。