ONVIF 표준, 벤더가 다른 카메라를 한 VMS에 묶는 법
ONVIF의 프로파일 구조·디스커버리·이벤트 모델과 RTSP URL 획득 코드 예시로 상호운용성 확보 방법을 정리한다.
2026-08-12 · 최초 발행 2025-12-06
IP 카메라·비디오 장비가 급증하면서 벤더별 사양이 제각각으로 흩어지는 문제가 커졌다. ONVIF(Open Network Video Interface Forum)는 영상 보안(네트워크 비디오, 액세스 제어 등) 분야의 사실상 표준 컨소시엄으로, 공통 API와 프로파일 기반 상호운용성을 제공해 이 분산 문제를 정면으로 다룬다.
표준이 다루는 범위
ONVIF는 네트워크 비디오 및 물리 보안 장비 간 상호운용성 확보를 위한 개방형 표준 제정 기구이자 명세 집합이다. 독자적인 새 프로토콜을 만드는 대신 SOAP 기반 Web Services, RTSP/RTP, WS-Discovery, WS-Eventing 같은 기존 표준을 조합한 서비스 지향 인터페이스를 제공한다.
서비스 도메인은 Device Management, Media, Imaging, PTZ, Event, Recording/Replay, Analytics/Metadata, Access Control 등으로 나뉘며, 각각 기능 단위의 WSDL 인터페이스와 동작 요구사항을 정의한다.
기능 교집합은 **프로파일(Profile)**로 묶어 상호운용성 검증 범위를 명확히 한다. Profile S/T는 라이브 스트리밍, G는 녹화/검색, M은 메타데이터/분석, A/D는 출입통제를 다룬다. 실제 적용 가능 범위와 최신 프로파일 현황은 벤더·버전별로 다를 수 있어 최신 정보 확인이 필요하다.
구조를 나눠서 살펴보기
프로파일 기반 상호운용성은 라이브 보기, 저장/검색, 분석 이벤트 같은 특정 시나리오를 프로파일로 규정하고 적합성 시험으로 호환성을 담보한다. 전체 스펙 대비 필요한 최소 교집합만 구현·검증하면 되므로 통합 리스크와 개발 비용이 줄어든다.
서비스 아키텍처와 전송 분리는 제어/관리 평면(SOAP over HTTP(S) 기반 디바이스·미디어·이벤트 API)과 데이터 평면(RTSP/RTP over TCP/UDP 기반 미디어 전송, 필요 시 RTSPS/TLS)을 나눈다. 제어와 미디어가 분리되어 있어 확장성과 튜닝이 쉬워진다.
디스커버리·인증·시간 동기에서는 WS-Discovery(UDP 3702)의 Probe/ProbeMatch로 네트워크 내 장치를 자동 탐색한다. 인증은 HTTP Digest가 기본이고 TLS/서버 인증서 기반 보안 채널을 선택적으로 적용할 수 있으며, 장치 사용자/역할 관리 API도 제공된다. 시간 동기는 NTP를 권장해 이벤트·녹화 타임라인의 정합성을 확보한다.
이벤트·메타데이터 모델은 WS-Eventing 구독/푸시 방식으로, 토픽 트리 기반 구독 필터링을 통해 모션/탬퍼링/IO 등 상태 이벤트를 전달한다. 영상 분석 결과(객체/행동/ROI 등)는 구조화된 메타데이터로 전송되며 Profile M 등을 기반으로 분석 연계가 표준화된다.
적합성 시험과 생태계는 ONVIF Conformance Test 도구와 공인 테스트 절차, 적합 장치/클라이언트 목록 공개로 뒷받침된다. VMS, 카메라, 인코더, 출입통제 컨트롤러 등 멀티벤더 통합이 확산되면서 시장 진입·교체가 쉬워졌다.
통합이 진행되는 순서
입력은 네트워크 세그먼트, 자격증명, 보안 정책, VMS/클라이언트 요구사항이고, 처리는 디스커버리→능력 조회→보안 설정→미디어·이벤트 구독→운영 모니터링 순으로, 출력은 표준화된 스트림 URL·이벤트 채널·관리 엔드포인트다.
인증 실패 시에는 계정 롤백·락아웃 방지 정책을 적용하고, 이벤트 타임아웃이나 네트워크 분리 시에는 재구독 백오프와 회로 차단기 패턴을 쓴다. RTSP 전송 경로는 방화벽/NAT 정책을 사전에 점검하고 UDP→TCP 페일오버를 설계해둔다.
실무에서 마주치는 장면
대규모 VMS 멀티벤더 통합에서는 수백~수천 대 카메라를 자동 검색·프로파일 기반으로 연결하고, 현장 교체 시 동일 프로파일 장비로 무중단 스왑이 가능하다. 코덱·해상도·ROI 같은 기능 차이는 Capability 기반 협상으로 다운스케일하거나 기능 플래그로 처리한다.
스마트시티·캠퍼스 관제에서는 이기종 카메라를 통합해 교통·치안·시설 관리에 쓰고, 침입·군중 밀집 같은 이벤트 기반 상황 인지를 메타데이터와 연계한다. 네트워크가 분산된 환경에서는 엣지 녹화(Profile G)와 중앙 검색을 최적화한다.
제조사 펌웨어/제품 라인 전략에서는 공통 ONVIF 모듈로 다기종 하드웨어를 재사용하고, 적합성 자동 회귀 테스트로 릴리스 리스크를 줄인다. 벤더 확장 기능은 표준 익스텐션 네임스페이스로 공개해 호환성을 유지한다.
액세스 제어 및 연동에서는 출입통제 패널·리더기와 영상의 상관 분석으로 이벤트 타임라인을 동기화해 포렌식 신뢰성을 높인다.
보안·아키텍처에서의 균형점
TLS/HTTPS를 우선 적용하고 장치 인증서 관리(갱신·폐기·핀닝)를 도입하며, 초기 비밀번호 강제 변경과 역할 기반 접근 제어를 적용한다. 네트워크 분리(VLAN/VRF)로 관리 평면과 스트림 평면을 나누고 감사 로그를 중앙 수집하며 실패 인증 시 지수 백오프·계정 잠금을 건다. 다만 TLS 암호화는 CPU 부하와 지연을 늘릴 수 있어 하드웨어 가속(TLS offload)이나 RTSPS 지원 여부를 검토할 필요가 있다.
대규모 환경에서는 WS-Discovery 브로드캐스트 폭주를 재전송 제어·서브넷 스캔·디렉터리 캐시로 방지하고, 이벤트 폭주는 토픽 필터링·배압·버퍼링·서킷 브레이커로 제어한다. 다만 브로커형 이벤트 집선기를 도입하면 단일 지점 복잡도와 운영비가 늘어난다.
운영 편의를 위해서는 Device Management API로 펌웨어·설정 템플릿 배포를 자동화하고 적합성 회귀 테스트 파이프라인을 구축하며, 관제 현장 교체 절차를 프로파일·Capability 체크리스트 기반으로 표준화한다.
전용 SDK와 무엇이 다른가
| 항목 | 전용 SDK 통합 | ONVIF 기반 통합 |
|---|---|---|
| 성능 | 장비별 최적화 용이, 최고 성능 달성 가능하나 커스텀 튜닝 필요 | 표준 경로 사용, 충분한 성능 달성. 극한 최적화는 제한 가능 |
| 확장성 | 벤더 추가 시 드라이버 개발·검증 반복 필요 | 프로파일 호환 장비 즉시 수용, 수평 확장 용이 |
| 일관성 | API·이벤트 모델 상이, 케이스별 분기 증가 | 공통 모델·토픽 트리 기반 일관 동작 |
| 안정성 | SDK·펌웨어 버전 상호 의존성 높음 | 적합성 테스트로 회귀 리스크 감소 |
| 운영 편의 | 장애 분석·도구 분산, 운영 복잡 | 표준 로그/진단, 툴·레퍼런스 재사용 용이 |
RTSP URL을 직접 받아보기
전제조건: Python 3.10+ 권장, 방화벽에서 80/443(HTTP/S), 554(RTSP), 3702(UDP) 허용. 패키지는 onvif-zeep을 설치한다(버전은 환경별로 다를 수 있어 최신 정보 확인 필요).
pip install onvif-zeep
# Python 3.10+
# pip install onvif-zeep
from onvif import ONVIFCamera
from zeep.exceptions import Fault
import socket
HOST = "192.168.1.100"
PORT = 80
USER = "admin"
PASS = "change_me"
def get_rtsp_uri(host, port, user, password, timeout=5):
# 소켓 타임아웃 설정
socket.setdefaulttimeout(timeout)
cam = ONVIFCamera(host, port, user, password)
dev = cam.create_devicemgmt_service()
media = cam.create_media_service()
# 기본 능력 조회
caps = dev.GetCapabilities({'Category': 'All'})
# 프로파일 목록
profiles = media.GetProfiles()
if not profiles:
raise RuntimeError("No media profiles found")
token = profiles[0].token
stream_setup = {
'Stream': 'RTP-Unicast',
'Transport': {'Protocol': 'RTSP'}
}
uri = media.GetStreamUri({'StreamSetup': stream_setup, 'ProfileToken': token})
return uri.Uri
if __name__ == "__main__":
try:
rtsp = get_rtsp_uri(HOST, PORT, USER, PASS)
print(f"RTSP URL: {rtsp}")
# 예: ffprobe/ffplay 또는 GStreamer로 연결 검증 수행
# ffprobe -v error -show_streams -of json "{rtsp}"
except Fault as e:
print(f"ONVIF Fault: {e}")
except Exception as e:
print(f"Error: {e}")
TLS를 사용하는 장치는 443 포트, HTTPS 엔드포인트를 쓰고 인증서 체인 검증을 수행한다. 오프라인 환경에서는 WSDL 로컬 경로를 지정해야 하고, 대규모 스케일에서는 연결·요청 동시성 제어와 백오프 정책을 적용한다.
도입했을 때 달라지는 것
신규 벤더/모델을 추가할 때 드라이버 개발 없이 통합 기간을 3070% 줄일 수 있고, 전용 SDK를 여러 개 유지하는 대신 공통 ONVIF 스택을 유지해 개발·유지보수 비용을 연간 2050% 절감할 수 있다는 기대치가 제시된다. 표준 이벤트·진단 연계로 장애 탐지/복구 평균시간(MTTR)이 25~40% 개선되고, 장비 교체·확장 시 조달이 유연해져 벤더 락인이 완화되고 총소유비용(TCO)도 줄어든다.
ONVIF 도입은 네트워크 비디오·물리 보안 인프라의 상호운용성과 확장성을 표준 절차로 확보하는 전략이다. 프로파일 기반 설계, 표준화된 서비스·데이터 평면, 적합성 시험 체계로 통합 리스크와 운영 복잡도를 줄일 수 있어 신규 구축·리뉴얼·멀티벤더 전환 프로젝트에서 기본 전제 조건으로 채택할 만하다. 다만 프로파일 범위·버전 호환성·TLS 적용 범위는 장비별로 다를 수 있어, 사전 적합성 테스트와 보안 정책 수립을 병행해야 한다.