Amazon Kinesis Video Streamsを使ってストリーム映像をAWS上に流してみる【MacBook Pro】– ClassmethodサーバーレスAdvent Calendar 2017 #serverless #adventcalendar #reinvent

2017.12.08

どうも!大阪オフィスの西村です。

このエントリは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版としてブログで紹介したいと思います。

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