WebRTC Signaling

최신 업데이트:2025-08-14 16:08:28

WebRTC 시그널링은 통신 조정을 위해 메타데이터를 교환하는 과정입니다. 여기에 핵심이 되는 것은 Session Description Protocol(SDP)로, 피어 간 코덱, 네트워크 경로, 미디어 유형 등 세션 파라미터를 협상할 수 있게 해줍니다. 당사 서비스는 업계 표준 WHIP(WebRTC-HTTP Ingestion Protocol) 및 WHEP(WebRTC-HTTP Egress Protocol)와 맞춤형 HTTP/JSON 기반 프로토콜, 두 가지 시그널링 방식을 지원합니다. 본 가이드에서는 맞춤형 HTTP/JSON 프로토콜의 상세 내용을 설명합니다.

핵심 원리: Offer/Answer 모델

시그널링 프로세스는 표준 WebRTC Offer/Answer 모델에 기반합니다. 클라이언트가 offer SDP를 전송하여 세션을 시작하고, 서버는 answer SDP를 반환함으로써 협상을 최종 완료합니다.

스트림의 발행(푸시)과 재생(풀)을 구분하기 위해, 당사 서비스는 클라이언트의 offer SDP 내 속성들을 검사합니다.

  • 스트림을 발행(푸시)할 경우: 클라이언트의 offer SDP에는 a=sendonly 속성이 포함되어야 합니다. 이는 클라이언트가 미디어를 송신만 하고 수신하지 않겠다는 의미입니다. 서버는 a=recvonly가 포함된 answer SDP로 응답합니다.
  • 스트림을 재생(풀)할 경우: 클라이언트의 offer SDP에는 a=recvonly 속성이 포함되어야 합니다. 이는 클라이언트가 미디어를 수신만 하고 송신하지 않겠다는 의미입니다. 서버는 a=sendonly가 포함된 answer SDP로 응답합니다.

중요 안내:
a=sendrecv 속성(양방향 스트림)은 지원되지 않습니다. 반드시 클라이언트가 푸시 전용 또는 풀 전용으로 설정되어 있는지 확인해 주세요.

시그널링 엔드포인트

모든 시그널링 통신은 하나의 HTTP 엔드포인트를 통해 이뤄지며, URL로 대상 스트림을 지정합니다.

URL 형식

http://domain/appName/streamName.sdp?params=xxx
매개변수 설명
domain Low Latency Streaming에서 구성한 domain입니다(예: stream.cdnetworks.com).
appName 어플리케이션 또는 live stream forwarding의 application name(예: live).
streamName 스트림의 고유 이름(예: channel_001).
params (옵션) 추가 쿼리 파라미터(예: userid=123).

이 형식은 RTMP(rtmp://...) 및 HTTP-FLV(... .flv) URL과 의도적으로 유사하지만, 주요 차이점은 .sdp 접미사가 붙는다는 점입니다.

API 명세

요청

  • Method: POST
  • Content-Type: application/json

요청 본문

매개변수 타입 필수 여부 설명
version String API 버전입니다. 반드시 고정 값인 "v1.0"이어야 합니다.
sessionId String 아니오 클라이언트에서 생성한 고유 ID로서, 세션 식별에 사용됩니다. 선택 항목이지만, 로그 기록 및 디버깅 목적상 사용을 적극 권장합니다.
localSdp Object 클라이언트의 SDP 정보를 담고 있는 객체입니다.

응답

응답 본문

매개변수 타입 필수 여부 설명
code Integer 응답의 상태 코드입니다. Status Codes를 참조하세요.
message String 응답 상태를 설명하는 메시지입니다.
remoteSdp Object 서버의 answer SDP가 포함된 객체입니다.

SDP 오브젝트 정의

localSdp(요청 내)와 remoteSdp(응답 내) 오브젝트는 동일한 구조를 공유합니다.

매개변수 타입 필수 여부 설명
type String Yes SDP 유형입니다. 클라이언트의 요청에서는 "offer"를 사용해야 하며, 서버의 응답에서는 "answer"를 사용합니다.
sdp String Yes 전체 표준 준수 SDP 콘텐츠이며 문자열입니다(RFC 4566 참고).

상태 코드

Code Message Description
200 success 요청이 성공적으로 완료되었습니다.
400 body error 요청 body가 올바른 JSON 형식이 아닙니다.
401 parameter error 하나 이상의 필수 input parameters가 누락되었거나 유효하지 않습니다.
402 information error input parameters에 제공된 정보가 올바르지 않습니다.
403 authentication failure 인증에 실패하였습니다.
404 stream not found 요청한 스트림이 존재하지 않습니다.
600 RTC 지원 안 됨 서버가 이 스트림에 대해 RTC를 지원하지 않으므로, 클라이언트는 다른 프로토콜로 다운그레이드해야 합니다.

예시

요청 예시
응답 예시
요청 예시
{
  "sessionId": "123456789",
  "version": "v1.0",
  "localSdp": {
    "type": "offer",
    "sdp": "v=0\r\no=- 12345 67890 IN IP4 192.0.2.1\r\ns=-\r\nt=0 0\r\na=sendonly\r\nm=video 9 UDP/TLS/RTP/SAVPF 100\r\n..."
  }
}
응답 예시
{
  "code": 200,
  "message": "success",
  "remoteSdp": {
    "type": "answer",
    "sdp": "v=0\r\no=- 98765 43210 IN IP4 198.51.100.1\r\ns=...\r\nt=0 0\r\na=recvonly\r\nm=video 9 UDP/TLS/RTP/SAVPF 100\r\n..."
  }
}
이 문서의 내용이 도움이 되었습니까?
아니오
정상적으로 제출되었습니다.피드백을 주셔서 감사합니다.앞으로도 개선을 위해 노력하겠습니다.