SkyWay IoT SDK＋ラズパイで遠隔監視カメラが作れなかった話

SkyWayを使いラズパイに付けたカメラを遠隔監視カメラにしたかったけどできなかった話です。ちゃんと設定できれば動くと思いますが私にはできませんでした。いつか動かせると信じてここに失敗手順を残します。

## 構成

|||
|---|---|
|カメラモジュール|[Raspberry Pi Camera Module V2 カメラモジュール](https://www.amazon.co.jp/Raspberry-Pi-Camera-%E3%82%AB%E3%83%A1%E3%83%A9%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB-Daylight/dp/B01ER2SKFS/ref=asc_df_B01ER2SKFS/?tag=jpgo-22&linkCode=df0&hvadid=221603572271&hvpos=1o2&hvnetw=g&hvrand=6503640034757073834&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009309&hvtargid=pla-406302832745&psc=1)|
|ラズパイ|Raspberry Pi Type B|

- OSバージョン

```
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster
```


## 参考

- SkyWay関連
    - [SkyWay IoT SDK + ラズパイでカスタム遠隔監視カメラを作ってみる](https://qiita.com/komasshu/items/5042c1e18eb4589b977a)
    - [続・SkyWay IoT SDKでのカスタム遠隔監視カメラ](https://qiita.com/komasshu/items/f8f3497ca4ee139437a1#_reference-adb9f12dcbfc6808a1fe)
    - [skyway-webrtc-gateway](https://github.com/skyway/skyway-webrtc-gateway)
    - [How to use sample app](https://nttcom.github.io/skyway-iot-sdk/docs/how_to_use_sample_app.html)

- ラズパイ関連
    - [モニタ/キーボードを接続しないでラズパイにOSをインストールする](https://note.mu/agw/n/n22ee9c4f6edc)
    - [ストリーミングサーバを構築してみた](https://note.mu/agw/n/ne767158e323d?magazine_key=mc40e905e6d42)
        - ラズパイに接続したカメラモジュールの有効化

---

## やったこと

ではここからやったこと（動かない手順）をつらつらとかいていきます。

##### SkyWayアプリケーション登録した

[SkyWayのサイト](https://webrtc.ecl.ntt.com/?_ga=2.70082265.853768134.1574496063-1750034297.1574496063)でアカウント登録し、`新しくアプリケーションを追加する`ボタンをクリックします。

`アプリケーションの説明`欄には、管理しやすい文字列を登録し、`利用可能ドメイン名`には、アクセスを許可するドメインを登録します。後で、テストサイトで動作確認をするので、`nttcom.github.io`と`skyway.github.io`は登録しておくとよいと思います。


<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/c86f4f99-16b9-46b8-9f0d-6bbe8c384d16.png">


- APIキーは後で使うのでメモしておきます。

##### ラズパイにOSインストールと基本的なセットアップをした。

- 以下コマンドの実行以外にロケールの設定やカメラモジュールの有効化などいろいろやりました。

```
# パッケージ更新
$ sudo apt-get update
$ sudo apt-get upgrade -y
$ sudo apt-get dist-upgrade
# ファームウェアを更新
$ sudo rpi-update
```

カメラモジュールが認識していることを確認します。

```
$ vcgencmd get_camera
supported=1 detected=1
```

## ラズパイにskyway-iot-sdkをインストールする

- [サイト](https://nttcom.github.io/skyway-iot-sdk/docs/how_to_install.html)に従い`Raspbian stretch`を実行する

```
curl https://nttcom.github.io/skyway-iot-sdk/install_scripts/raspbian_stretch/installer.sh | sudo -E bash -
```

インストール終了時の画面はこんな感じです。

<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/e9865c26-c50c-d909-2c00-a988f0100cf4.png">



- `ssg setup` を実行し、APIキーを設定する

```
$ ssg setup
Input your SkyWay API Key : XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
setup finished
```

これで、セットアップは完了です。念のため、ラズパイOSをリブートしました。


#### 遠隔監視を開始してみる

ラズパイで3つのコマンドを実行するためssh接続のターミナルを3つ用意して、それぞれ以下のコマンドを実行します。

```
# 【ターミナル①】　Janus gatewayを動かす
$ /opt/janus/bin/janus

# 【ターミナル②】　SSGを動かす
$ ROOMNAME=testroom MQTT_URL=mqtt://localhost MQTT_TOPIC=testtopic/+ ssg start

# 【ターミナル③】　Video Streamingを動かす
gst-launch-1.0 videotestsrc is-live=true ! \
  video/x-raw,width=640,height=480,framerate=30/1 ! \
  videoscale ! videorate ! videoconvert ! timeoverlay ! \
  omxh264enc target-bitrate=2000000 control-rate=variable ! \
  h264parse ! rtph264pay config-interval=1 pt=96 ! \
    udpsink host=127.0.0.1 port=5004 \
audiotestsrc ! \
  audioconvert ! queue ! \
  audioresample ! \
  audio/x-raw,channels=1,rate=16000 ! \
  opusenc bitrate=20000 ! \
    rtpopuspay ! udpsink host=127.0.0.1 port=5002
```

ターミナル①（赤枠）とターミナル②（青枠）でコマンド実行したところ、ターミナル③（緑枠）は、まだ実行してません。

<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/385f6c8a-cd38-acc7-eedd-949d3a47e39f.png">

ターミナル③でもコマンドを実行したところ、ターミナル①に、`New audio stream!`と`New video stream!`と表示されました。

<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/38654e53-e677-fd6f-96e6-19c0be36c078.png">



#### SkyWayのサイトで確認した

ラズパイで遠隔監視を開始した状態で、SkyWayのアプリケーションの管理画面で状況を確認します。
登録したアプリケーション管理画面を開き、接続中のPeerIDを確認します。

<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/a2e01d42-0c2c-d40e-a1b3-edde243c9ab8.png">

何も接続していない場合は、このようになります。

<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/96c862c2-4bf3-c883-518c-6f029b205c67.png">



#### テストサイトで確認した

確認サイト [https://nttcom.github.io/skyway-siru-client/examples/](https://nttcom.github.io/skyway-siru-client/examples/)で確認してみます。

`apikey`に取得したAPIキーを設定し、`start` ボタンをクリックします。成功例は、[こちらのサイト](https://nttcom.github.io/skyway-iot-sdk/docs/how_to_use_sample_app.html)で紹介されているような画面になるそうです。私は、以下のように中途半版な結果になりました。

<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/6b3f0135-830c-79b5-c408-ca2741d64202.png">


stausは、`connected` となったのですがvideoは`idle`となりました。video映像がちゃんと取れてないようです。uuidも表示されてないです。

ブラウザのデバッグモードで確認したところエラーと警告が発生していました。

<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/3402fdb4-72ca-582c-d233-ac8445c1f628.png">


エラーメッセージ

>Unchecked runtime.lastError: The message port closed before a response was received.

警告メッセージ

>A cookie associated with a cross-site resource at <URL> was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at <URL> and <URL>.


警告メッセージの内容から、ブラウザ側のセキュリティにブロックされているような？ちがうような。。。この問題の対策がわからず断念しました。

Signalingが18回と増えているので、動いている感がある(？)んだけどなぁ～


<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/bc0bea28-5a00-3144-d633-909750d86ebd.png">