Amazon Kinesis Video Streamsを使ってストリーム映像をAWS上に流してみる【MacBook Pro】– ClassmethodサーバーレスAdvent Calendar 2017 #serverless #adventcalendar #reinvent
どうも!大阪オフィスの西村です。
このエントリはServerless Advent Calendar 2017の8日目の記事になります。
re:Invent 2017でカメラ搭載デバイスからストリーム映像の取り込みを実現する Amazon Kinesis Video Streamsが発表されました。 このサービスによって、サーバーレスでデバイスからストリーム映像をAWS上に配信することができます。 今回、MacBook Proに搭載されているカメラのストリーム映像をAmazon Kinesis Video Streamsを使って AWS上に流してみたいと思います。 映像を配信するためのプロデューサーライブラリはC++のライブラリを使用します。
使用機器
- MacBook Pro(Retina, 13-inch, Early 2015)
- プロセッサ:3.1 GHz Intel Core i7
- メモリ:16 GB 1867 MHz DDR3
- OS:macOS Sierra
使用プロデューサーライブラリコード
Amazon Kinesis Video Streamsへ映像を配信するためのプロデューサーライブラリコードがAWSより提供されています。 現在JavaとC++の2つあるようです。
今回はC++のプロデューサーライブラリコードを使ってみたいと思います。 こちらのサンプルプログラムはUbuntu系のOSかMacで動作するようです。 コードの実行手順としては、コード管理されているGithubが最新版なので、 GitHub上のREADMEを確認しながら進めるのがよいかと思います。
https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp
ビルド時の依存関係
C++のプロデューサーライブラリコードをビルドするためにはmacで下記環境が必要となります。 下記環境構築のためのアップグレード方法や導入方法については省略させていただきます。 詰まった際はGitHub上のREADME、Issuesを確認するとヒントがあるかもしれません。
- autoconf 2.69 (License GPLv3+/Autoconf: GNU GPL version 3 or later)
- cmake 3.7/3.8 https://cmake.org/
- bison 2.4 (GNU License)
- automake 1.15.1 (GNU License)
- libtool (Apple Inc. version cctools-898)
- xCode (Mac OS) / clang / gcc (xcode-select version 2347)
- Java jdk (for Java JNI compilation)
Amazon Kinesis Video Streamsでの作業
▼マネージメントコンソールにアクセスし、Amazon Kinesis Video Streamsへ移動します。
▼ストリーム名を「test」として作成します。 これで終わりです。簡単ですね。
Macでの作業
C++のプロデューサーライブラリコードをダウンロード
Macで撮影した映像を配信するためのプロデューサーライブラリコードをダウンロードします。
$ git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp $ cd amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build
必要なコンポーネントをインストール
amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build
配下にある、install-script
を実行することで、
コード実行に必要なソフトウェアを自動的にダウンロード、およびビルドしてくれます。
完了するまで、私の場合2,3時間ぐらいかかっていました。気長に待ちましょう。 ここの処理でエラーとなってしまう場合は、ビルド時に必要なソフトウェアのバージョンが 条件をクリアしてるか再度確認しましょう。
# sudo ./install-script ・ ・ ・ [ 99%] Linking CXX executable start [100%] Built target start ********************************************************** Success!!! **********************************************************
ダウンロード、ビルドが完了すると上記のようなログが出力されます。
単体テストを実行
install-script
の実行が完了すると、
単体テスト用のスクリプトstart
やサンプルアプリケーションの
kinesis_video_gstreamer_sample_app
などが生成されています。
単体テスト・サンプルアプリケーションを実行するために AWSアクセスキーIDと秘密鍵を使用して、AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEY環境変数を定義します。
# export AWS_ACCESS_KEY_ID={AccessKeyId} # export AWS_SECRET_ACCESS_KEY={SecretAccessKey}
単体テスト実行
# ./start . . . heapRelease(): Freeing native heap.[ OK ] ProducerApiTest.create_produce_stream (181583 ms) [----------] 1 test from ProducerApiTest (181583 ms total) [----------] Global test environment tear-down [==========] 308 tests from 30 test cases ran. (185083 ms total) [ PASSED ] 308 tests. INFO - Curl shutdown.
単体テストが問題なく完了した際は上記のような出力となります。
サンプルアプリケーションの実行
単体テストをパスしたら、実際にサンプルアプリケーションを使って、 MacBook Proに搭載されているカメラの映像をAWS上に流してみましょう。
サンプルプログラムは下記コマンドで実行することができます。 ``````は今回の場合「test」となります。
$ AWS_ACCESS_KEY_ID={your key id} AWS_SECRET_ACCESS_KEY={your access key} ./kinesis_video_gstreamer_sample_app
問題なく実行されると、ターミナル上に下記のようなデバッグログが流れつづけます。
マネージメントコンソールのAmazon Kinesis Video Streamsへ移動し、 ストリーム名をクリックし、映像がながれるか確認しましょう。(リージョンが対象のリージョンになってるか確認しましょう。) タイムラグがありますが、きちんと配信されていることがわかります。
配信元の映像情報もきちんと表示されています。
さいごに
いかがだったでしょうか。
Amazon Kinesis Video StreamsをつかってMacBook Proに搭載されているカメラの
ストリーム映像をAWS上に映し出してみました。
当初はRaspberry Piでためしていましたが、アプリケーション実行時に
Segmentation fault
となってアプリケーションが落ちてしまう現象に遭遇したため、
今回Macを使って紹介してみました。
エラーが解決しましたらRaspberry Pi版としてブログで紹介したいと思います。
誰かの参考になれば幸いです。