# Verkada カメラでのローカル ストリーミング機能

ローカルストリーミングとは、Verkadaカメラのフィードがクラウドからアクセスされるのではなく、アクセスしているデバイスに直接転送される方式です。

この機能はインターネットから送受信されるトラフィック量を削減します。カメラのストリームを表示する際、カメラは自動的にローカルストリームモードへの切り替えを試行します。

{% hint style="warning" %}
ローカルストリーミングが不可能な場合にカメラのライブ映像をリモートでアクセスすると、ビデオはクラウド経由でプロキシされ、取得時間と再生を高速化するためにキャッシュされます。この方法により、ローカルエリアネットワーク（LAN）の帯域幅に悪影響を与えずに多数の同時視聴者を可能にします。
{% endhint %}

***

## ローカルストリーミングの要件

* アクセスするデバイスはカメラのプライベートIPに到達できる必要があります。
* ポート4100のTCP/UDPがクライアントとカメラ間で双方向に開放されている必要があります。
* クライアントとカメラの間にプロキシが存在してはいけません。
* 参照 [カメラ向け必須ネットワーク設定](https://app.gitbook.com/s/NRq5qDDjsYNxwNzF1bcB/need-help/required-network-settings) 許可リストに追加されたドメインについて。

{% hint style="warning" %}
カメラがH265に設定されているがエンドユーザーがサポートされていないH265ブラウザおよび／またはデバイスを使用している場合、カメラはSQのローカルストリームは可能だがHQのローカルストリームはできません。詳細は [**カメラの高効率ビデオエンコーディング（HEVC）**](https://help.verkada.com/verkada-cameras/ja/bideonosutorminguto/live-streaming/camera-high-efficiency-video-encoding-hevc)**.**
{% endhint %}

***

### デバイスがローカルストリーミングしているか確認する

|                           |                                                                                                                                                                                                                                                                            |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **表示**                    | **例**                                                                                                                                                                                                                                                                      |
| Webまたはモバイルブラウザでのローカルストリーム | <img src="https://2033575148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FylYKicREo6JpuOJH4teK%2Fuploads%2Fgit-blob-8d2f6f6578c80fa7ce2bb32a85ab4a1f5f8f7015%2F030d89e888717259b60f41845861c4b5a6f232bd.png?alt=media" alt="" data-size="original"> |
| Commandモバイルアプリでのローカルストリーム | ![](https://2033575148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FylYKicREo6JpuOJH4teK%2Fuploads%2Fgit-blob-ab867a462814b2baffae0959d7e617d2b6b761d8%2F5e2f520308df28b085b686b1eadba030ccad2eaa.png?alt=media)                                    |
| Commandモバイルアプリでのリモートストリーム | ![](https://2033575148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FylYKicREo6JpuOJH4teK%2Fuploads%2Fgit-blob-d5fa6eb1f48e1527fc8fdb1738993d85d9931d8b%2Fb4824e080640dd6542adc7567981a48610e7bd4f.png?alt=media)                                    |

## ローカルストリーミングの仕組み

{% stepper %}
{% step %}
**カメラのドメインネームシステム（DNS）** [**レコードを登録する必要があります**](#h_2fa97bf9bd)**.**
{% endstep %}

{% step %}
**Verkada Commandはストリーミングデバイスに対して接続確立を試行するよう指示します** [**カメラとのローカルストリーム**](#h_ffd43b346e)**.**
{% endstep %}

{% step %}
**ストリーミングデバイスは** [**カメラのDNSレコードを要求します**](#h_071100bc92)**.**
{% endstep %}

{% step %}
**ストリーミングデバイスは** [**カメラと安全な接続を確立します**](#h_a9ef69580b)**.**
{% endstep %}

{% step %}
**カメラのフィードは** [**ストリーミングデバイスに直接送信されます**](#h_97ccafdecb)**.**
{% endstep %}
{% endstepper %}

### ステップ1：カメラのDNSレコードが登録される

カメラがCommandに接続すると、プライベートIPv4アドレスを含むメタデータを共有します。Verkadaはこのデータを使用して、カメラのプライベートIPアドレスを持つパブリックなAタイプのDNSレコードをプロビジョニングします。ローカルDNSサーバはこれによりカメラの完全修飾ドメイン名（FQDN）へのリクエストを解決できるようになります。このDNSレコードはローカルストリーミングに利用されます。

![](https://2033575148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FylYKicREo6JpuOJH4teK%2Fuploads%2Fgit-blob-41a4200782bf69b08e745541cea87e80a729beec%2Fa703aea1c9d82932c1f1c69641b0166b3b0f24c8.png?alt=media)

### **カメラのFQDNを取得する**

{% stepper %}
{% step %}
**Verkada Commandで、All Products > Cameras > カメラのライブストリームに移動します。**
{% endstep %}

{% step %}
**任意の場所で右クリックし、InspectをクリックしてNetworkタブを見つけます。**
{% endstep %}

{% step %}
**結果をフィルタするには `ping` を使用してページを更新します。**

pingトラフィックに表示しているカメラのFQDNが含まれます。
{% endstep %}
{% endstepper %}

**例**：カメラのFQDNを取得する

{% embed url="<https://player.vimeo.com/video/691052916>" %}

### ステップ2：ローカルストリーミングへの移行

カメラのライブストリームにアクセスされると、ストリーミングデバイスはローカルストリーミングに切り替えようとします。デバイスからカメラのプライベートIPアドレスに到達でき、ネットワーク上で適切なドメインが許可されている場合、ストリーミングデバイスはカメラとHTTPS接続を確立してライブフィードを直接取得します。

![](https://2033575148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FylYKicREo6JpuOJH4teK%2Fuploads%2Fgit-blob-03feb0e8015d3256b1a183133b2cde23e1070608%2F7ef831bbd616c5d19d5a9c3333005d989d362356.png?alt=media)

### ステップ3：ストリーミングデバイスがカメラのDNSレコードを要求する

{% stepper %}
{% step %}
**カメラフィードにアクセスされると、CommandはストリーミングデバイスにカメラのFQDNへの接続を確立するよう指示します。**
{% endstep %}

{% step %}
**アクセスするデバイスはカメラのFQDNに対して標準のDNSリクエスト（UDPポート53）を送信します。**
{% endstep %}

{% step %}
**DNSはFQDNを解決し、カメラのプライベートIPアドレスをアクセスデバイスに提供します。**

​

<div align="left" data-with-frame="true"><img src="https://2033575148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FylYKicREo6JpuOJH4teK%2Fuploads%2Fgit-blob-cff06b5cd790d0995bc1d4e0d59c3e9c14465dcd%2Fa28d1cec86da3289e811f357cf6ccfb30b01219e.png?alt=media" alt="" width="315"></div>
{% endstep %}

{% step %}
**デバイスはポート4100上でHTTPSセッションの確立を試みます。デバイスがカメラのプライベートIPに到達できない場合、プロセスはここで終了し、ストリームはローカルへ移行しません。**

​\
カメラのプライベートIPがCommandのこれらの設定と一致します:\
​

<div align="left" data-with-frame="true"><img src="https://2033575148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FylYKicREo6JpuOJH4teK%2Fuploads%2Fgit-blob-51c33fde0629af7a3dd1807ec9d56b2148362d9b%2Fc4677ae5bda8aefae2158649407f5c34fbc9d037.png?alt=media" alt="" width="370"></div>
{% endstep %}
{% endstepper %}

### ステップ4：ストリーミングデバイスがカメラと安全な接続を確立する

カメラのプライベートIPに到達できる場合、TCPセッションが開始されます。SSLハンドシェイク（TLS 1.2）が行われ、HTTPSセッションが確立されます。これによりトラフィックは暗号化され安全になります。この接続からカメラのSQライブフィードにアクセスされます。\
​

ポート4100でのブラウザ表示:\
\
パケットキャプチャ（ポート4100でカメラのプライベートIPに対するTCPハンドシェイクを示す）:

![](https://2033575148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FylYKicREo6JpuOJH4teK%2Fuploads%2Fgit-blob-1f0927cba4bda05d62ad85400190be97f7eb650a%2Fc49fc4c66c2351283d923acb578151faaffa9656.png?alt=media)

TLS鍵交換（カメラが提示する公開署名済み証明書を示す）:

![](https://2033575148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FylYKicREo6JpuOJH4teK%2Fuploads%2Fgit-blob-b57304f29034bc2d429258e689a66875f7d51960%2F78bd2c5d0cf907bee66f35b371739d5b8de55666.png?alt=media)

### ステップ5: カメラのフィードがストリーミング端末へ直接送信される

セキュアな接続が確立されると、カメラはクライアントに映像を送信します:

![](https://2033575148-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FylYKicREo6JpuOJH4teK%2Fuploads%2Fgit-blob-98b645c246fbd20cd57ff7e630652189acdb4766%2F5c1e84d6550ccaad9550a1fdac2c97a44b6040bf.png?alt=media)

***

## トラブルシューティング

ローカルストリーミングで問題が発生している場合、次を試してください:

* カメラがオンラインで、期待どおりにストリーミングしていることを確認します。
* ネットワーク構成を確認します:
  * ストリーミング端末が同一のローカルネットワーク上にあるか、カメラのネットワークへルーティングできること。
  * ポート4100のTCP/UDPがストリーミング端末とカメラの間で双方向に開いていること。
  * ネットワーク上にプロキシが存在しないこと。
* ストリーミング端末を確認します:
  * 最新のファームウェアまたはソフトウェアアップデートが適用されていること。
  * ブラウザのキャッシュとクッキーをクリアするか、シークレット/プライベートブラウジングモードで試してください。
  * 別の端末でローカルストリーミングをテストして、問題が端末固有かどうかを判定します。
* ブラウザの設定を確認し、「ローカルネットワークアクセス」をブラウザが許可していることを確認してください。ブラウザはデフォルトでローカルネットワークアクセスをブロックする場合があり、これがローカルストリーミングを妨げることがあります。
