LoginSignup
5
3

More than 1 year has passed since last update.

【初心者向け】Amazon Kinesis Video Streams WebRTC SDKのC言語サンプルをRaspberry Piに実装する手順

Last updated at Posted at 2021-05-27

1. この記事の内容

WebRTCを勉強中の初心者エンジニアです。
前回は、Amazon Kinesis Video Streams WebRTC(以降KVS WebRTC) SDKのJavaScriptサンプルをEC2にデプロイして、ブラウザ間の通信確認をしました。
今回は、SDKのC言語サンプルを使ってRaspberryPi-ブラウザ間で通信確認をしたので、実装手順をまとめます。

この記事で触れる内容は以下です。

  • RaspberryPiをセットアップする方法
  • RaspberryPiでKVS WebRTC SDK(C)のサンプルを実行する方法
  • KVS WebRTC SDK(C)のサンプルに文字列送信処理を追加する方法

2.実装環境

RaspberryPiモデル:RaspberryPi 3 B+
RaspberryPi OS:Raspbian
カメラモジュール :Raspberry Pi Camera Rev 1.3
USBマイク :audio-technica AT9934USB

※今回実行するサンプルコードはOpus、H264のみに対応しています。対応していないコーデックのカメラ・マイクを使用する場合は、コーデックの変換を別途行う必要があります。この記事では対応していません。

3. 構成イメージ

KVS WebRTCを使って、下図のようなサービスを構築します。

ブラウザは、KVS WebRTC SDK(JavaScript)サンプルを配信するWebサイトを介してシグナリング、P2P通信します。
RaspberryPiは、KVS WebRTC SDK(C)サンプルを実装して、シグナリング、P2P通信します。

構成1.png

④P2P通信時のRaspberryPi側(KVS WebRTC SDK C言語サンプル)の機能は以下です。

  • ブラウザから受信した音声・文字列のコンソール出力
  • ブラウザに映像・音声を送信

4.前提

5.手順の図の「ブラウザから通信するための準備」は完了していることを前提に進めます。
完了していない場合は、前回記事【初心者向け】Amazon Kinesis Video Streams WebRTC SDKのJSサンプルをEC2にデプロイする手順に従って、ブラウザから通信できる状態にしておいてください。

5.手順

フロー004.png

RaspberryPiの環境構築

1.RaspberryPiをセットアップする

公式の手順に従って、RaspberryPiに、最新バージョンのRaspbian OSをインストールします。使用するカメラやマイクも接続します。

2.カメラモジュールを設定する

カメラモジュールを読み込ませるために、設定を確認・変更します。
画面左上のRaspberry Piのメニューボタンから「設定」>「Raspberry Piの設定」をクリックし、システム設定を開きます。
次に「インターフェイス」をクリックし、「カメラ」が「有効」になっていることを確認します。「無効」になっている場合は「有効」を選択し、「OK」ボタンをクリックします。

3.パッケージを更新する

ターミナルを開いて、下記コマンドを実行してパッケージを更新します。

sudo apt-get update
sudo apt-get upgrade
sudo apt-get clean
sudo reboot

以上で、Raspberry Piの準備は完了です。

C言語サンプルの実行

次に、Raspberry Piにサンプルを設置して実行します。

1.SDKをクローンする

ターミナルを開いて、以下コマンドでKVS C SDKのリポジトリをクローンします。

sudo yum install git-all 
git clone https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-C
2.必要なライブラリをインストールする

下記コマンドでライブラリをインストールします。

sudo apt-get install pkg-config cmake libcap2 libcap-dev libssl-dev
sudo apt-get install gstreamer1.0-tools libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-omx gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly
3.ビルドする

下記コマンドを入力して、ビルドを実行します。

cd ~
git clone --recursive https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c.git
mkdir -p amazon-kinesis-video-streams-webrtc-sdk-c/build; 
cd amazon-kinesis-video-streams-webrtc-sdk-c/build; 
cmake ..
make
4.通信開始に必要な値を設定する

下記のコマンドで環境変数を設定します。それぞれ、前回シグナリングチャンネル作成時に取得した値を入力します。
AWS_KVS_LOG_LEVELは2または1でないと受信した文字列がコンソールに出力されません。

export AWS_ACCESS_KEY_ID= <AWS account access key>
export AWS_SECRET_ACCESS_KEY= <AWS account secret key>
export AWS_DEFAULT_REGION= <AWS region>
export AWS_KVS_LOG_LEVEL = 2 switches on DEBUG level logs while runnning the samples
5.実行する

下記コマンドで実行します。
第一引数は、シグナリングチャネルのChannel Nameです。存在しなければ新規作成されます。
第二引数は、video-onlyまたは、audio-videoです。送信するメディアを指定します。

./kvsWebrtcClientMasterGstSample <Channel Name> video-only

これで、Raspberry Piからシグナリングサーバーへリクエストが飛び、通信相手を待つ状態になります。

通信テスト

Raspberry Pi側の通信準備が整ったので、ブラウザからもリクエストをして通信確認をします。

1.ブラウザから通信リクエストする

前章までの通り、RaspberryPiでC言語サンプルを実行している状態で下記手順を実行します。
ブラウザから下図の通り入力、Start Viewerを押下して通信リクエストをします。
ページ001.png
ブラウザにRaspberryPiのカメラ映像が表示されれば通信成功です。ブラウザから文字列を送信すると、RaspberryPi側のコンソールに出力されます。

※RaspberryPiのカメラ映像が表示されるまで時間がかかる場合があります。少し待っても表示されない場合は、C言語サンプルの実行からやり直してください。

6. 文字列送信処理を追加する

サンプルコードには、RaspberryPiから文字列を送信する処理はありません。
そこで、文字列を受信した際に、「reply」と文字列を返す処理を追加してみます。
samples/Common.cを、下図赤枠内のように書き換えます。
c001.png

書き換えたらもう一度、ビルド・実行します。

さらに、ブラウザで受信した際の処理を追加する必要があります。
Webサーバーに配置しているexamples/viewer.jsの下図赤枠内を追加します。
js002.png

C、JSサンプルの書き換えが完了したら、通信を確認します。
ブラウザから文字列を入力して送信ボタン押下後、「reply」と表示されれば成功です。

7. まとめ

Amazon KVS WebRTC SDK のC言語サンプルをRaspberryPiで実行する手順をまとめました。
私と同じような初心者エンジニアの方のお役に立てれば幸いです。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3