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上に流してみましょう。

サンプルプログラムは下記コマンドで実行することができます。 <stream name>は今回の場合「test」となります。

$ AWS_ACCESS_KEY_ID={your key id} AWS_SECRET_ACCESS_KEY={your access key} ./kinesis_video_gstreamer_sample_app <stream name>

問題なく実行されると、ターミナル上に下記のようなデバッグログが流れつづけます。

マネージメントコンソールのAmazon Kinesis Video Streamsへ移動し、
ストリーム名をクリックし、映像がながれるか確認しましょう。(リージョンが対象のリージョンになってるか確認しましょう。)
タイムラグがありますが、きちんと配信されていることがわかります。

配信元の映像情報もきちんと表示されています。

さいごに

いかがだったでしょうか。

Amazon Kinesis Video StreamsをつかってMacBook Proに搭載されているカメラの
ストリーム映像をAWS上に映し出してみました。
当初はRaspberry Piでためしていましたが、アプリケーション実行時に
Segmentation faultとなってアプリケーションが落ちてしまう現象に遭遇したため、
今回Macを使って紹介してみました。
エラーが解決しましたらRaspberry Pi版としてブログで紹介したいと思います。

誰かの参考になれば幸いです。