실시간 인터넷 방송
에 사용될만한 기술 스택 내용 정리
- 데이터 스트림을 En/Decoding 하는 기술, 소프트웨어
- 효율적인 데이터 전송 및 보관을 위해 데이터 열화를 감안한 손실 방식(MP3, JPEG, H.264 등)과 원본의 품질을 해치지 않기 위한 비손실 방식(FLAC, PNG, HuffYUV 등)이 있음
- ISO, IEC 산하의 멀티미디어 표준 개발 담당 그룹
- 비디오 데이터에서 많이 사용되는 H.264(MPEG-4 AVC)와 같은 표준을 정의함
- 비디오, 오디오의 En/Decoding, Transcoding 등 멀티미디어 파일 처리를 위한 오픈 소스 프로젝트이자 툴
- 무료로 제공되며 멀티 플랫폼 환경에서 이용 가능
- 2009년 발표된 Adobe Flash에 이용하기 위한 오디오, 비디오 데이터 실시간 통신 프로토콜
- TCP/IP 기반이며 많은 스트리밍 서비스에서 라이브 서비스를 위해 이용되고 있음
- 2020년 Adobe Flash가 공식 지원 종료되며 직접 이용자에게 데이터를 전달하는 용도로는 사용되지 않는 추세
- 2009년 Apple에서 발표한 HTTP 기반 적응 비트레이트 스트리밍 통신 프로토콜
- 비디오 데이터를
.m3u8
확장자로 된 재생목록을 기록한 파일과.ts
확장자의 여러 개의 멀티미디어 파일로 분할하여 스트리밍에 이용 - Apple 제품에서 호환되는 유일한 스트리밍 포로토콜이며 기타 환경에서는 HLS Player를 통해 재생 가능
- 전송에 이용할 비디오 데이터의 경우 H.264, H.265 Encoding 이용 필요 (참조)
- 2014년 MPEG에서 정의한 국제 표준 HTTP 기반 적응 비트레이트 스트리밍 통신 프로토콜
- 비디오 데이터를
.mpd
확장자의 스트리밍 메타데이터 파일과 여러 개의.m4a
,m4v
파일로 분할하여 스트리밍에 이용
(.mpd
파일이 HLS의.m3u8
의 역할 /.m4a
파일은 AAC Codec의 음성 파일 /m4v
파일은 H.264 Codec의 비디오 파일) - 국제 표준인만큼 HLS와 달리 다양한 인코딩에 대응할 수 있음
- 효율적인 컨텐츠(데이터) 전송을 위해 캐시 서버를 이용하는 기술
- 주로 물리적으로 먼 거리의 사용자에게 서비스를 제공하기 위해 사용
- HLS Player : hls.html에
hls.js
예제를 이용하여 구성 - Encoder :
FFMPEG
를 이용해 RTMP를 통해 전달 받은 데이터를 Encoding하는 서비스 생성
(HLS : go, spring, nginx / DASH : nginx) - HLS : Encoder를 통해 생성된 파일을 HLS Player로 전달하여 재생 가능 여부 테스트(go, spring)
- RTMP Server :
Nginx RTMP
Plugin을 이용하여 RTMP 서버(참조)를 띄우고OBS
와 연결 가능 여부 테스트 - Dash Player : dash.html에
dash.js
예제를 이용하여 구성
실시간 스트리밍 서비스에 필요할 것으로 예상되는 개념을 정리하여 예상해본 논리적인 서비스 구성 예상도
실제 서비스는 Web 및 Mobile UI, UI API 등도 포함이 되어 있을 것으로 생각되며
운영상의 이유 혹은 분산 처리의 목적으로 각 서비스들이 더욱 세부적인 단위로 분리되어 있을 수 있으나
실시간 인터넷 방송
에 초점을 맞춰 간략하게 구성함
Web Service
: 실시간 영상 수신 및 송출에 필요한 웹 서비스- Streamer로부터 RTMP 요청을 통해 영상 수신
- 영상을 Viewer에게 HLS로 송출
- 수신 및 송출을 담당하는 서비스는 분리하여 각자 구성할 수 있음
- 트래픽 부하 분산을 위한 캐시 서버 구성이 필요할 수 있음
Middleware
: 시스템 전반을 관리하는 서비스- 각 서비스간 처리 연계 Interface(Message Queue나 In-Memory DB 등을 이용할 수 있음)
- Logging, Monitoring 서비스와 연계하여 시스템 현황 기록 및 관리(ELK 등을 이용할 수 있음)
Encoder
: 영상 데이터 Encoding 서비스- RTMP로 수신 받은 영상 데이터를 HLS 및 DASH 응답에 이용할 수 있는 형태로 Encoding
(HLS :.3m8u + .ts
/ DASH :.m4a + .m4v
) - 영상 데이터를 VOD 서비스용 Codec으로 Encoding
- Encoding 처리된 영상은 NFS나 Object Storage 등에 저장하여 데이터를 이용하는 서비스에서 접근하는 방식으로 처리할 수 있음
- RTMP로 수신 받은 영상 데이터를 HLS 및 DASH 응답에 이용할 수 있는 형태로 Encoding
Broadcast Service
: 방송 진행과 시청에 필요한 요청 처리- Streamer가 방송 정보 변경 시 Viewer의 화면에도 반영
- 채팅 서비스
- Viewer가 구독, 후원 시 해당 정보를 Streamer의 방송 시스템에 전달
- 서비스 공급자(중앙)로부터 데이터를 제공 받는 것이 아닌, 서비스 이용자(Peer)끼리 서로 통신하여 필요한 데이터를 주고 받는 형태
- 국내에서 스트리밍 서비스 시 네트워크 이용을 분산하기 위해
P2P
시스템을 대부분 도입하고 있음 - 주의사항
- Peer 간의 데이터 공유를 위해 서로의 위치(IP)가 식별되어야 함 (보안 문제)
- Peer의 수가 적은 경우, 효용성이 떨어짐
- 가장 대표적인 P2P 프로토콜이자 동명의 서비스
- 공유할 데이터를 조각(Piece)으로 나누어 Peer에게 공유
- Seeder : 데이터의 모든 조각을 가진 Peer
- Leecher : 데이터의 일부 조각을 가진 Peer
- Tracker : 파일 공유를 일으키는 중앙 서버로, 공유 대상인 Peer 목록과 공유 파일 고유 식별자인 Hash 값으로 구성된 정보(
Swarm
)를 관리함
- 분산형 파일 시스템에 데이터를 저장하고 네트워크를 통해 공유하기 위해 고안된 P2P용 프로토콜
- 기반 기술
DHT
(Distributed Hash Tables) : 네트워크에 참여한 노드들이Hash Table
을 각자 관리하여, 중앙 서버 없이 P2P 네트워크 형성BitTorrent
: P2P 파일 공유 프로토콜Merkle DAG
(Merkle Directed Acyclic Graphs) : IPFS에서 이용되는 데이터에 적용되는 자료 구조- Merkle Tree에서 DAG로 확장된 자료 구조로, Leaf(말단) 노드만 실제 데이터를 가지고 있던 Tree 구조에서 모든 노드들이 데이터를 가지는 형태가 되었음
- 부모 노드가 자식 노드의 해시값으로 구성되는 점으로 인해, 아래의 특징을 가짐
- 위변조가 불가(위변조 시 Root 노드의 해시값이 변경됨)
- 모든 노드가 사실상 연결된 구조(해시값)
- 자체적으로 무결성 확인 가능(Multi hash Checksum)
- 같은 데이터는 같은 해시값을 가지므로 데이터 중복 불가
SFS
(Self-certified FileSystems) : IPFS의 name system인IPNS
의 기반 기술- IPFS를 이용하기 위한 주소 자체에
공개키로 해시화된 값
을 사용하여, 자체적으로 공유 위치(서버) 식별이 가능
- IPFS를 이용하기 위한 주소 자체에
HTTP-over-QUIC
: Quick UDP Internet Connections- 기존의
TCP
기반 연결에서UPD
기반으로 변경 - 인터넷 사용 환경이 PC에서
모바일
환경으로 이동하면서
네트워크 연결 상황이 연속적이지 않게 되며 이로 인해 매 연결을 유지하는 TCP보다 UDP 이용이 유리해짐 - 또한 네트워크 연결 변동 상황에서 기존의 HTTP 연결에 비해 간략한 Handshake 과정을 통해 빠른 시간 안에 네트워크 서비스 연결을 복원할 수 있음
→ Zero Round Trip Time : 최초 연결(Handshake) 시에만 1번의 연결 인증을 위한 네트워크 통신 왕복이 일어나고, 이후 재연결 시에는 Cache된 연결 정보를 이용해 네트워크 통신 왕복 없이 네트워크 재연결 가능
- (Apple) HTTP 라이브 스트리밍
- (Youtube) YouTube Live Streaming API
- (아프리카TV) Afreeca TV Open API
- (Twitch) Twitch API
- Introduction to HLS
- RTMP Streaming: 실시간 메시징 프로토콜에 대하여
- 웹 소켓으로 실시간 데이터 전송하기
- [방장기강] 방송장비 기술강좌 - 비디오 프로토콜
- nginx rtmp를 이용해서 실시간 스트리밍 구현 예제
- MPEG-DASH란 무엇입니까? | HLS와 DASH의 비교
- P2P의 개념
- BitTorrent (토렌트) 의 원리와 구조
- IPFS_Explained
- IPFS(InterPlanetary File System)이해하기
- what-is-http3
- what-is-quic