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通信します。
④P2P通信時のRaspberryPi側(KVS WebRTC SDK C言語サンプル)の機能は以下です。
- ブラウザから受信した音声・文字列のコンソール出力
- ブラウザに映像・音声を送信
4.前提
5.手順の図の「ブラウザから通信するための準備」は完了していることを前提に進めます。
完了していない場合は、前回記事【初心者向け】Amazon Kinesis Video Streams WebRTC SDKのJSサンプルをEC2にデプロイする手順に従って、ブラウザから通信できる状態にしておいてください。
5.手順
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を押下して通信リクエストをします。
ブラウザにRaspberryPiのカメラ映像が表示されれば通信成功です。ブラウザから文字列を送信すると、RaspberryPi側のコンソールに出力されます。
※RaspberryPiのカメラ映像が表示されるまで時間がかかる場合があります。少し待っても表示されない場合は、C言語サンプルの実行からやり直してください。
6. 文字列送信処理を追加する
サンプルコードには、RaspberryPiから文字列を送信する処理はありません。
そこで、文字列を受信した際に、「reply」と文字列を返す処理を追加してみます。
samples/Common.c
を、下図赤枠内のように書き換えます。
書き換えたらもう一度、ビルド・実行します。
さらに、ブラウザで受信した際の処理を追加する必要があります。
Webサーバーに配置しているexamples/viewer.js
の下図赤枠内を追加します。
C、JSサンプルの書き換えが完了したら、通信を確認します。
ブラウザから文字列を入力して送信ボタン押下後、「reply」と表示されれば成功です。
7. まとめ
Amazon KVS WebRTC SDK のC言語サンプルをRaspberryPiで実行する手順をまとめました。
私と同じような初心者エンジニアの方のお役に立てれば幸いです。