[Capstone] RTMP 서버

이정연·2023년 5월 3일
0

Project

목록 보기
5/11
post-thumbnail

Real Time Messaging Protocol

RTMP는 실시간 동영상 스트리밍을 송출할 때 가져다 쓰는 프로토콜

개념

  • RTMP(Real-Time Messaging Protocol)는 Adobe Systems에서 개발한 멀티미디어 데이터 전송을 위한 프로토콜입니다. RTMP는 Adobe Flash 플레이어와 같은 웹 브라우저에서 동영상 또는 오디오를 스트리밍하는 데 사용됩니다.

  • RTMP 서버는 RTMP 클라이언트로부터 받은 스트리밍 데이터를 처리하고, 이를 다시 RTMP 클라이언트에게 전송합니다. RTMP 서버는 또한 스트리밍 데이터를 저장하거나, 라이브 스트리밍을 지원할 수 있습니다.

  • RTMP 서버는 여러 가지 기능을 제공할 수 있습니다. 예를 들어, 스트리밍 데이터의 압축, 인코딩, 디코딩 등의 처리를 수행할 수 있습니다. 또한, RTMP 서버는 다양한 스트리밍 프로토콜을 지원할 수 있습니다. 예를 들어, RTMPS(Real-Time Messaging Protocol Secure)는 SSL(Secure Sockets Layer)을 이용하여 암호화된 스트리밍을 제공하는 프로토콜입니다.

  • RTMP 서버는 다양한 운영 체제에서 구동할 수 있으며, Adobe Media Server, Wowza Streaming Engine 등의 상용 솔루션뿐만 아니라, Red5, NGINX-RTMP 등의 오픈 소스 솔루션도 있습니다. 이러한 RTMP 서버를 사용하면, 웹 기반의 미디어 서비스나, 게임 라이브 스트리밍, 온라인 강의 등 다양한 분야에서 스트리밍 서비스를 구현할 수 있습니다.

RTMP vs RTSP

Real time Streaming Protocol

RTMP(Real-Time Messaging Protocol)와 RTSP(Real-Time Streaming Protocol)는 모두 멀티미디어 데이터 전송을 위한 프로토콜이지만, 몇 가지 차이점이 있습니다.

1. 프로토콜 종류

RTMP는 Adobe Systems에서 개발한 프로토콜이며, 주로 Flash 플레이어를 사용하는 웹 기반 미디어 서비스에서 사용됩니다. 반면에, RTSP는 IETF(Internet Engineering Task Force)에서 개발한 프로토콜이며, IP 기반의 네트워크에서 사용됩니다.

2. 스트리밍 방식

RTMP는 Adobe Flash 플레이어와 같은 클라이언트-서버 모델에서 사용됩니다. 클라이언트는 RTMP 서버로부터 스트리밍 데이터를 받아와 재생합니다. 반면에, RTSP는 서버-클라이언트 모델에서 사용됩니다. 클라이언트는 RTSP 서버로부터 스트리밍 데이터의 위치 정보를 받아와, 직접 스트리밍 데이터를 수신합니다.

3. 전송 방식

RTMP는 Adobe Flash 플레이어와 같은 웹 브라우저에서 동작하는 애플리케이션에서 주로 사용되며, HTTP를 기반으로 하는 프로토콜입니다. 반면에, RTSP는 TCP나 UDP를 이용하여 데이터를 전송합니다.

4. 보안

RTMP는 RTMPS(Real-Time Messaging Protocol Secure)를 통해 SSL(Secure Sockets Layer)을 이용하여 암호화된 스트리밍을 제공할 수 있습니다. 반면에, RTSP는 RTP(Real-Time Transport Protocol)를 사용하여, 데이터를 암호화하지 않습니다.

따라서, RTMP는 웹 기반의 미디어 서비스에서 주로 사용되며, RTSP는 IP 기반의 네트워크에서 사용됩니다.

SSL?

Secure Socket Layer

SSL은 인터넷에서 데이터 보안을 유지하기 위해 가져다 쓰는 프로토콜이다.

이렇게 암호화된 데이터는 브라우저와 웹 서버 사이에서 전송되며, 데이터를 가로채더라도 해독할 수 없습니다.

웹 기반 vs IP 기반

웹 기반은 인터넷에서 사용하는 웹 기술을 기반으로 한 애플리케이션을 의미합니다. 웹 기술은 HTTP(Hypertext Transfer Protocol), HTML(Hypertext Markup Language), CSS(Cascading Style Sheets), JavaScript 등의 프로토콜과 언어를 사용하여 인터넷 상에서 정보를 공유하고 웹 애플리케이션을 개발하는 기술입니다. 즉, 웹 브라우저를 통해 인터넷에서 다양한 정보를 검색하고, 컨텐츠를 소비하며, 웹 기반의 애플리케이션을 이용할 수 있는 것입니다.

반면에, IP 기반은 인터넷 프로토콜(IP)을 기반으로 한 네트워크를 의미합니다. IP는 컴퓨터와 다른 기기들이 인터넷에서 통신하기 위한 프로토콜로, 인터넷상에서 패킷을 교환하고, 라우팅하는 기술입니다. 즉, IP 기반의 네트워크는 데이터를 IP 패킷으로 분할하여, 이를 인터넷 상에서 전송하고, 수신하는 기술입니다.

따라서, 웹 기반과 IP 기반은 서로 다른 개념이며, 각각의 분야에서 다양한 기술과 프로토콜을 사용합니다. 예를 들어, 웹 기반에서는 HTTP, HTML, CSS, JavaScript 등의 웹 기술을 사용하여 인터넷 상에서 정보를 공유하고, IP 기반에서는 TCP/IP, UDP, ICMP 등의 프로토콜을 사용하여 인터넷 상에서 데이터를 전송하고, 라우팅합니다.

카메라 ➡️ 제스처 인식부

카메라 ➡️ 통신부

레드 박스 PUBLISHED 버튼을 누르면 라이브 스트리밍이 WOWZA 서버로 송출이 된다.

서버 컨넥션이 1로 증가하며 카메라 ➡️ 통신부의 연결이 성공적으로 구축되어 있음을 확인할 수 있다.

통신부 ➡️ 제스처 인식부

import cv2

# RTMP URL 지정
url = 'rtmp://273.194.7.87:1935/live/test'

# 원격 카메라에서 영상 읽기
cap = cv2.VideoCapture(url)

while True:
    # 영상 읽기
    ret, frame = cap.read()

    # 영상 출력
    cv2.imshow('frame', frame)

    # 'q' 키를 누르면 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 리소스 해제
cap.release()
cv2.destroyAllWindows()

opencv-python의 파라미터로 wowza 서버의 rtmp url을 입력하여 라이브 스트리밍을 받아온다.

서버를 재확인 해보면 컨넥션 = 2로 제스처 인식부 또한 제대로 연결되어 있음을 확인할 수 있다.

profile
0x68656C6C6F21

0개의 댓글