リモナビ：ローカル環境のカメラ映像の監視

# ローカル環境のカメラ映像
　現在はスマートフォンなどで家などに設置したカメラ映像を確認できる製品が数多くあります。
 
　**一方で、ネットワークカメラ映像の流出は、報道によると、世界各国でおよそ2万7,000カ所、そのうち日本ではおよそ5,800カ所の監視カメラ映像が流出したとのことです。**
 
　ネットワークカメラを安易にクラウドシステムに繋ぐということはそういうことなのです。　**リモナビ**は、「<INS>どこへでもセキュアなリモート接続を実現する</INS>」　ことができます。
 - カメラに自由にクラウド接続させず、ローカルネットでだけアクセス
 - リモナビを介してローカルネット内のカメラ映像を見る

こんなこともできるのです。
 
# 具体な物理構成
 IPカメラは TP-Link tapo ネットワークカメラを利用。
 Tapoカメラは、仕様外機能としてRTSPプロトコルを開放しているので、クラウド接続はせずに直にRTSP接続でカメラ映像を参照することができます。
 
<img width="640px" src="https://remonavi.com/img/network_camera.png">

　カメラ配備のローカルネットには、「カメラ」 と 「リモナビ Receiverが動作する小型PC」　を配備します。　安価な小型PC ですが Windows11 Pro ですので、カメラ映像だけでなく、リモナビで リモートデスクトップ の利用も可能です。

:::note info
**技術的な難しい話**
映像配信には技術的知識が必要です。　「通信プロトコルの専門知識」を要しますので、苦手、無理、という方は読み飛ばしてください。 専門の方には少し物足りない説明ですが、リモナビ利用ついて説明なのでご容赦ください。

現在、カメラに直接アクセスして映像を参照するプロトコルの主流は、 **RTSP** で、安価なカメラでも比較的多くサポートしています。
 
このプロトコル、ちょっと曲者で、**RTSP** は１本のTCP/IP なのですが、この通信の中で、音声と映像を配信するための ２本の UDP通信（RTPなるプロトコル）を決定します。　　RTSP のネゴシエーション中にUDP通信で使う IPポートが決定されるということです。
 
リモナビは、あらかじめ決めたTCP | UDP 通信（レイヤ４） しか許しませんので、こうした動的な接続には対応できません。　そのためカメラに直接アクセスして RTSP で通信しても接続することはできません。　この問題をクリアするために、あらかじめ決めた TCP/IP 1本 で音声や映像を配信することができる **RTMP** に変換して、リモナビによる接続を実現します。

**RTMP**でのカメラ映像配信は、　「<INS>RTMPサーバ</INS>」　に、「<INS>映像をpush するアプリ</INS>」　と、　「<INS>RTMPで映像を参照するアプリ</INS>」　の３者が登場します。　つまりこの３者構成を実現しなければならないのです。　（リモート端末では前者２つですね）

今回は、リモート端末にて
　① カメラ映像を RTSP で吸い出し、
　② 立ち上げたRTMPサーバに push し、
リモナビは RTMP サーバから映像を RTMP で読み出す方法を案内します。

**とても大変と思いきや、たった２つのソフトダウンロードして簡単な設定をするだけで実現できる方法を確立していますので安心してください！**
:::

:::note warn
今回利用する RTMP って暗号化されてないし、安全じゃない、って聞いたことがあるけど？

全く問題ありません。そもそも　**リモナビ通信は暗号化されています**し、他者は一切参照することができないセキュアな通信です。　だからこそ RTMP が利用できるのです。
:::


# 具体的な設定方法
設定には上記の小難しい話が大きく関係しています。 なのでよくわからない人は、その通りに、そうでない方は上記をどう実現しているのか、を考えながら以下、進めてください。

### 1.　カメラ設置ネットワーク上にPCを一台用意します
- 小型PC 「**GMKTech G5**」　をこちらでは用意しました。 2.5万円程度超小型PC
- カメラは 「**TP-Link tapo C220**」　を用意しました。　　0.6万円程度の屋内カメラ
　　　※ TP-Link のカメラは RTSP が使えるため、これを選定した。

#### 1-1. カメラの設定
カメラには IPアドレスでアクセスしますので、WiFiルータなどの DHCP で毎回IPアドレスが変更されるのでは面倒なので、固定IPアドレスを振ってください。 tapo c220 には 固定IP設定機能はありませんので、 WiFiルータで、tapo カメラの MAC アドレスで固定IPアドレスを設定してください。
ここではカメラの IPアドレスを 192.168.84.170  とします。

:::note info
エレコムやバッファローのWiFiルータのFAQなどや　カメラ製品のFAQなどを参考にしてください。
https://qa.elecom.co.jp/faq_detail.html?id=3126
https://www.buffalo.jp/support/faq/detail/15917.html
tapo : https://www.tp-link.com/jp/support/faq/2680/
　　カメラの設定では、RTSPを利用する場合の user / password もここで設定します
:::

#### 1-2.　小型PCの設定
カメラに IPアドレス指定でアクセスできる環境を前提とします。
インストールするソフトウェアは 2つです。  リモナビを入れると３つですね。

**- ffmpeg**
**- RtmpRelay**
**- RemoNavi Receiver**　：　この設定はカメラ設定の後に記載します

:::note info
ffmpeg
https://ffmpeg.org/download.html
<img width="420px" src="https://remonavi.com/img/ffmpeg_install.png">

:::

:::note info
RtmPlayer
https://github.com/tokjin/RtmpRelayer/releases/tag/v1.1.2
<img width="420px" src="https://remonavi.com/img/rtmprelay_install.png">
:::

<br>

### ２.　小型PCでの ２つのアプリの起動と説明
インストールした二つのアプリにはそれぞ以下の役割があります。

<img width="960px" src="https://remonavi.com/img/ffmpeg_rtmp.png">

リモナビは、あらかじめ決められた TCP|UDP (L4)通信しか接続しないため、ネゴによって音声と映像を個別に通信する RTSPには適用できません。そのため、 1本の TCPコネクションで映像配信ができる RTMP に変換する必要があります。

① ffmpeg は RTSP -> RTMP 変換を行い、 ② RtmpRelay は RTMP サーバとして、push されたライブ映像を外部に提供する役割を果たします。 RtmpRelay は RTMPサーバではないのですが、限定的に役割を果たせるために利用しています。　 なぜなら RTMP サーバの設定は、本来とても面倒だからです。　ことWindows での設定は、一般の方には難しすぎるため、この方法を掲載しました。

一番簡単なこの方式でも、実はここからまだ苦労があります。各アプリの起動です。

#### 2-1. RtmpRelay による RTMPサーバとしての設定
1) **RtmpRelay** を解凍したディレクトリに移動
2) **RtmpRelay.exe**  をダブルクリックで起動
<img width="420px" src="https://remonavi.com/img/rtmp_setting.png">

 ffmpeg から rtmp への出力設定を定義します。
 最後の欄の リレー先 RTMP はありませんので未設定です。
 
 設定したら、「Start」 で RTMPサーバの起動です。　
 <font color="grey">このアプリは 本来RTMPサーバではないので、live1, live2 の二つだけ RTMP サーバとして公開することができます。</font>

#### 2-2. ffmpeg による RTSP -> RTMP 変換と　 RTMPサーバへの push
-
  ```powershell
  # 1) Windows のターミナル画面を表示
  # 2) ffmpeg を解凍したディレクトリに移動
  cd xxxxxx\ffmepeg-maser-latest-win64-gpl\bin
  # 3) ffmpeg 実行
  #  - tp-link tapo では 先に示した設定URLで、RTSP を使う場合の カメラの user/password 設定があります。
  #  - 最後の rtmp の 出力先指定は、 RtmpRelay で設定した URLです
  .\ffmpeg.exe -i rtsp://{user}:{password}@『カメラIPアドレス}/stream2 -ar 44100 -f flv rtmp://localhost/live1/{stream-key}
  
  # ちゃんとカメラアクセスできているかは、ffmpeg の代わりに以下で確認できます。
  .\ffplay i rtsp://{user}:{password}@『カメラIPアドレス}/stream2
  ```
<br>

### 3.　リモナビからの映像確認
#### 3-1.　事前の確認

 設定に先立って、 RTMPサーバ (RtmpRelay) の映像へは、以下の接続情報でアクセスします。

 - IP-Port 番号　　　:　　<font color="darkred">**1935**</font> 　(RTMPのポート番号です)
 - RTMPのURL　　　:　　RtmpRelay で設定した  ffmeg の出力先URL
 
   ```powershell
   # 今回の設定でなら 外部から rtmp でアクセスする場合の URL は以下です。
   rtmp://192.168.84.170/live1/{stream-key}

   # RempRelay をインストールしたマシンのIPアドレス= 192.168.84.170 (今回の設定では)
   ```

　また、rtmp アクセスで映像を参照するアプリについてですが、今回は以下を推奨としておきます。　 VLC Media Player は RTMP だけでなく RTSP でも接続して映像を参照することができるツールです。Windows　や　Mac などで容易にインストール、利用できるため、これを選択しました。
 
:::note info
VLC Media Player
https://www.videolan.org/index.ja.html
:::

 　**リモナビから使う前に、VLC Media Player で、上記　{rtmp：//...} で映像が参照できことを必ず確認してください。**
<br>

#### 3.2　VLC の利用方法 
- VLC Media Player の起動
- RTMP 接続
    - URL : **rtmp://{RtmpRelay動作PCのホスト}/live1/{stream-key}**
        - Widows: メディア／ネットワークストリームを開く
        - MAC: ファイル／ネットワークを開く
  <br>
  <img width="640px" src="https://remonavi.com/img/vlc_use.png">


#### 3.3 RemoNavi 設定
　詳細は、リモナビのホームページから運用マニュアルを参照できるので、そこを参考にしてください。

　　[【リモナヒSaaSのドキュメントサイト】](https://remonavi.com/?pos=saas_doc)
<br>
  
**3-3-1. RemoNavi SaaS の SecureGateway 設定**
  
<img width="640px" src="https://remonavi.com/img/securegw_setting.png">
  
・　接続先ホスト名　　[マシンのIPアドレスかWindowsホスト名]
・　接続先ポート番号　[1935]

<br>

**3-3-2. 今回の小型PC へ RemoNavi Receiver のインストール & 設定**

<img width="640px" src="https://remonavi.com/img/recv_setting.png">

- ① RemoNavi Receiver Windows アプリをダウンロード
- ② ダウンロードした msi ファイルをダブルクリックしてインストールするとデスクトップにアイコンが表示
- ③ アイコンをクリックすると Receiver が起動されますので、「ServerDomain」、「ConnectKey」 を入力して、「接続設定」
    - 設定されると、「サーバ情報更新」　から 接続対象一覧を表示できます
- ④ 対象行の　「接続対象」　をチェックすると、当該接続が可能になります

<br>

**3-3-3. 映像を参照するPCへ RemoNavi Sender のインストール & 設定**

<img width="640px" src="https://remonavi.com/img/recv_setting.png">

- ① RemoNavi Sender Windows アプリをダウンロード
- ② 起動から接続設定は Receiver と同様
    - 設定されると、「サーバ情報更新」　から 接続対象一覧を表示できます
- ③ 対象行のに　「受入IPポート」　にしようする IPポート番号をいれて、「接続対象」　をチェックすると、当該接続が可能になります

<br>

**3-3-4. 映像を参照するPC　から VLC を使ってリモートカメラの映像を参照**
　接続する際には、Senderに向けて接続しますので、本来のURLの 「ホスト」 を Sender に書き換えれば接続できます。

　　URL : rtmp://<INS>localhost:{sender設定したポート番号}</INS>/live1/{stream-key}

　下線部が本来なら、RTMPサーバ（RtmpRelayを動作させたサーバ)になりますが、そこを Sender のホストに書換えます。

　また、RTMPはデフォルトのポート番号は 1935 ですが、それ以外を使う場合には、ポート番号を上記のように指定します。　このポート番号は Sender の利用登録をした際の 受入ポート番号です。

<br>
<img width="600px" src="https://remonavi.com/img/remote_camera.png">


# おわりに
　今回はリモートPCに　GMKTec G5 超小型PCを利用しましたが、実運用では画像系に十分な性能を有したPCの利用をお勧めします。
 
　実は小型PCは、ハードウェア的にこうした画像処理を特に苦手にしています。　それはビデオカードを考えれば当然のことです。
 
 　今回は、そんな超小型PCでも複雑な画像転送をリモナビを使って可能です、ということと示すために、あえてそうしので、その点はご了承ください。