# 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/ko/video-streaming-and-sharing/live-streaming/camera-high-efficiency-video-encoding-hevc)**.**
{% endhint %}

***

### 장치가 로컬 스트리밍 중인지 확인하기

|                         |                                                                                                                                                                                                                                                                            |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **보기**                  | **예시**                                                                                                                                                                                                                                                                     |
| 웹 또는 모바일 브라우저에서의 로컬 스트림 | <img src="https://1726484256-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://1726484256-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FylYKicREo6JpuOJH4teK%2Fuploads%2Fgit-blob-ab867a462814b2baffae0959d7e617d2b6b761d8%2F5e2f520308df28b085b686b1eadba030ccad2eaa.png?alt=media)                                    |
| Command 모바일 앱에서의 원격 스트림 | ![](https://1726484256-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://1726484256-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에서 모든 제품 > 카메라 > 카메라의 라이브 스트림으로 이동합니다.**
{% endstep %}

{% step %}
**아무 곳이나 마우스 오른쪽 버튼으로 클릭하고 검사를 클릭한 다음 네트워크 탭을 찾습니다.**
{% endstep %}

{% step %}
**결과 필터링: `ping` 을(를) 사용하고 페이지를 새로 고칩니다.**

ping 트래픽에는 현재 보고 있는 카메라의 FQDN이 포함되어 있습니다.
{% endstep %}
{% endstepper %}

**예시**: 카메라의 FQDN 가져오기

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

### 2단계: 로컬 스트리밍으로 전환

카메라의 라이브 스트림에 접근하면 스트리밍 장치가 로컬 스트리밍으로 전환을 시도합니다. 카메라의 사설 IP 주소에 장치에서 접근할 수 있고 네트워크에서 적절한 도메인이 허용되어 있으면, 스트리밍 장치는 카메라와 HTTPS 연결을 설정하여 실시간 피드를 직접 가져옵니다.

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

카메라가 제시한 공개 서명 인증서를 보여주는 TLS 키 교환:

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

### 5단계: 카메라의 피드가 스트리밍 장치로 직접 전송됨

보안 연결이 설정되면 카메라가 비디오를 클라이언트로 전송합니다:

![](https://1726484256-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가 열려 있어야 하며, 스트리밍 장치와 카메라 간에 양방향으로 통신 가능해야 합니다.
  * 네트워크에 프록시가 없어야 합니다.
* 스트리밍 장치를 확인합니다:
  * 최신 펌웨어 또는 소프트웨어 업데이트로 업데이트되어 있는지 확인합니다.
  * 브라우저의 캐시와 쿠키를 지우거나 시크릿/개인 브라우징 모드를 사용해 보세요.
  * 다른 장치에서 로컬 스트리밍을 테스트하여 문제가 장치별인지 확인합니다.
* 브라우저 설정에서 브라우저가 “로컬 네트워크 액세스”를 허용하는지 확인합니다. 브라우저는 기본적으로 로컬 네트워크 액세스를 차단할 수 있으며, 이로 인해 로컬 스트리밍이 불가능할 수 있습니다.
