이더넷 카메라를 개발하기 위해 하드웨어단의 구성을 마치고 영상 데이터 전송 Viewer를 개발하고자
알아보던중 ONVIF를 알게되어 정리해보았다.
ONVIF는 (Open Network Video Interface Forum) 오픈 네트워크 비디오 인터페이스 포럼의 약자로
보안 목적의 물리적인 IP기반 제품 (쉽게 생각할수 있는 CCTP IP카메라)들의 인터페이스를 위해 세계
개방형 표준의 개발 및 이용을 용이하게 하는것을 목적으로 만든 비영리 조직단체이다.
초기 설립의 기업은 엑시스 커뮤니케이션, 보쉬 시큐리티 시스템, 소니 가 시작했다.
ONVIF 사양에서 ONVIF 프로파일이란게 있는데, 이것은 특정 기능의 상호 운용을 보장하는 기술적인 사양을 말해준다.
언급된 프로파일은 아래와 같다.
프로파일 G : Video 스토리지, 녹화, 검색
프로파일 Q : 장치 발견, 구성, TLS 인증의 관리
프로파일 S : 비디오 및 오디오 스트리밍, PTZ 옵션, 릴레이 액티베이션 등의 IP비디오 시스템의 공통기능
프로파일 T : 영상 데이터 압축 Format, Alarm Event, 등의 비디오 데이터 기능을 지원.
프로파일 C : 도어 상태 및 제어, 자격관리, 이벤트관리 등의 IP 접근 통제 시스템의 공통 기능
프로파일 A : 정보, 상태, 이벤트의 검색을 수행하고, 접근 규칙, 자격 정보, 스케줄 등의 PACS(물리 접근 제어 시스템) 관련 항목들을 구성하는 기능
위의 Media Transport
RTP,RTCP, RTSP에 대해 포스팅을 하려한다.
위 세계의 기술을 이용해서 IP카메라 (이더넷 카메라)의 영상 데이터를 스트리밍 하여 영상을 보고, 제어할수 있기 때문이다.
ONVIF Streaming Specification의 구성에 따르면 아래 그림과 같다.
이전 포스트에 OSI의 물리계층과 데이터링크 계층의 PHY와 MAC을 제외한
상위 네트워크 계층과 전송 계층 부터 응용 계층의 구성의 보여줌을 알 수 있다.
먼저 구성과 함께 용어에 대해 간략히 정리해 보았다.
RTP (Real-Time TransPort Protocol)
- 인터넷상에서 다수의 End-to-End간 Video 혹은 Audio 패킷을 실시간 데이터를 전송하기 위해
표준화된 실시간 통신 프로토콜이다.
- RTP는 기본적으로 UDP를 Base로 하여 IP상에서 데이터를 통신하게 된다. (아래 그림)
- 물론 UDP를 통해 RTP 데이터를 전송하기 위해서는 사용하는 디바이스가 RTP/UDP 프토콜을 지원하고
RTP/UDP 멀티캐스팅이 지원해야 한다.
- 위에서 일반적인 UDP 베이스를 한다고하였는데 구조를 잘 살펴보면 TCP도 가능하다.
하지만 난 UDP 베이스로 할 것이기 때문 누군가 TCP기반이라면 자세한 표준은 [RFC4571, RFC4572]를
참조하면 도움이 될듯하다.
- RTP는 기본적으로 RTCP와 함께 사용된다.
- RTP는 다른 프로토콜 (80,21,22,554 등) 과같이 미리 예약된 포트를 사용하지 않는다.
즉 UDP상의 포트사용에 대해 특정 포트 사용을 강요 받지 않는다는것이다.
단지 연이은 짝수, 홀수 포트 번호만 사용하게되는데
RTP는 짝수 포트번호, RTCP는 RTP바로 다음의 홀수 포트번호를 사용한다.
- RTP 표준 관련 참조 사항 (RFC 3550, 3551,3984,7798,3016,3640)
RTP 헤더의 구조
V (Version - 16비트) : RFC3550 버전으로는 2이다.
P (Padding - 1비트) : RTP 패킷의 페이로드 구성을위해 정수배 단위를 채워넣기 위한 비트라고
봐도 될 것 같다.
X (extension - 1비트) : 가변길이 헤더확장이 있음을 나타낸다고 써있는데
(반복 재생이나 뭔가 가변적인 헤더 확장이 있는지 알려주는 비트인거 같은데 아직 잘 모르겠다.
CC (CSRC Count - 4비트) : 어떤 여러개의 미디어가 합성되는 경우 그 갯수를 나타낸다고한다.
M (Marker - 1비트) : 이벤트 발생을 알림.
( RTP에 의해 전송되는 XML의 metadata가 Closed 되면이 값이 1로 바뀜)
PT (Payload Type - 7비트) : 오디오나 비디오의 인코딩 방식이 어떤건지 알려주는 것을 말한다.
[RFC3551 - section6 참조]
sequence number - 16비트 : 패킷 손실을 검출하고 순서를 재구성하는 기능을 할수있게
보내는 데이터들이다.
수신측에서 RTP헤더의 이부분을 가지고 패킷 손실을 검출하여 뒤바뀐 순서를 재구성한다고 한다.
(즉, 패킷 손실 검출, 패킷 순서 재구성 기능)
time stamp - 32비트 : RTP 스트림내 각 패킷이 샘플링된 시간 관계를 나타낸다.
(이것을 이용해 시간 동기 및 지연에 대한 계산을 할 수 있다.)
앞에 말한것 처럼 RTP는 통상 RTCP와 함께 사용된다.
실제 RTP를 이용해 영상데이터를 전송하지만, 패킷 지연이나 손실, 지터 등에 대한 QoS(Quality of Service)를 보장하지 못하기때문 RTCP를 이용하여 별도로 위 언급된 부분을 제어한다
RTCP (RTP-Control-Protocol)
- RTP 세션의 품질 제어를 위한 별도의 제어용 프로토콜이다.
- RTP의 송수신과 관련하여 멀티미디어 세션 참여자들이 Qos 관련 정보를 주기적으로 교환하도록
하는 역할을 한다.
- 즉, 주기적으로 품질 정보를 멀티캐스팅하는데, 멀티캐스트 환경에서, 송신자(Server)는 주기적으로
모든 세션 참가자들에게 RTCP SR(Sender Report) 를 보내고
- 각 세션 참여자들(Client)은 이를통해 RTP를 제어하는 데사용한다.
- 요약하면, 데이터 흐름제어 및, 서버에 연결된 클라이언트(들)에게 상태 정보를 제공하는것.
또한, RTP는 예를들면 카메라가 호스트 PC (Client)에게 단방향으로 데이터를 전송하고
SR(SenderReport)과 RR(Receiver Report)를 통해 RTCP는 양방향성임을 알 수 있다.
앞서 언급된 RTP 헤더의 구조의 Timestamp , Wall clock Timestamp
(날짜, 시간, 64비트 NTP{Network Time Protocol}) 에 대한 필드가 SR(SenderReport)에 포함되어있다
예시로 그림과같이 Audio 데이터의 경우 8kHz, Video 같은경우는 90kHz로
서로 다른 스트림 속도에 대해 RTP clock 과 Wall Clock의 Timestamp를 기반으로 적절한 타이밍에서
미디어 스트림들을 동기화 할 수 있다.
RTCP 패킷구조는 RTP 구조와 비슷하다.
Payload Type 설명
SR (Sender Report) / RR (Receiver Report) :
- 각 송/수신측의 주기적인 패킷 통계 (송신 패킷수, 패킷손실율, 누적손실 패킷수 등)
SDES(Source Description message) :
- 소스가 자신의 정보를 주기적으로 알림(사용자이름 , 전자우편 주소, 로그인 ID 등)
BYE (Bye Message) :
- 현재 세션에의 모든 참가자에게 종료될 것을 알림.
APP (Application specfice RTCP) :
- 어플리케이션 상호간에 정보를 전달하기 위해 사용
RTSP (Real Time Streaming Protocol)
미디어 스트림을 제어하는 데에 사용 되는 프로토콜이고, URI에 정의된 프로토콜을 사용한다.
ONVIF 미디어 서비스 Specfication에 정의된 GetStreamURI 명령어에 URI가 반환된다.
RTSP같은경우 TCP/UDP를 전송 프로토콜로 사용하고 RTP/RTCP 와 달리 예약된 포트번호가 있다
기본 TCP 포트는 554번이다.
스트리밍 재생 관련 명령어.
Setup : 연결설정.
Play : 재생
Forward,Rewind, Pause : 일시멈춤
Stop : 완전정지
Resume : 다시시작
Record, Teardown : 연결해제
'Network' 카테고리의 다른 글
TCP 와 UDP (0) | 2020.07.31 |
---|---|
이더넷(Ethernet) (1) | 2019.10.02 |
댓글