SRTLA 수신 서버 셀프 호스팅

LOLS IRL은 BELABOX 호환 표준 srtla를 쓰기 때문에 직접 운영하는 수신 서버도 저희 호스팅 릴레이와 똑같이 동작해요. 무엇을 돌리고, 어떤 포트가 중요하고, 모바일 데이터 회선이 서버에 아예 닿지 못하게 만드는 실수 하나가 무엇인지 알려 드려요.

아무것도 호스팅하지 않아도 돼요. 무료 LOLS Cloud 릴레이가 있어서 본딩이 바로 되고, 직접 수신 서버를 호스팅하면 누구에게도 의존하지 않아요. 직접 호스팅하는 데는 다 이유가 있어요. 방송이 내가 통제하는 인프라에 도착하길 원하거나, 저희 릴레이가 가까이 없는 곳에 물리적으로 가까운 장비가 필요하거나, 신경 쓸 한도가 없길 원하거나, 그냥 내 걸 돌리는 게 좋아서요. 앱의 어느 것도 저희 서버에 묶여 있지 않아서, 바꾸는 건 호스트 이름 하나 바꾸는 일이 전부예요.

만들려는 것

폰 (wifi + 모바일 데이터)
   |
   |  srtla, UDP, 네트워크마다 소켓 하나
   v
srtla_rec          공개 UDP 포트에서 대기, 회선을 다시 합침
   |
   |  일반 SRT, UDP, localhost에서
   v
미디어 서버        MediaMTX 또는 같은 종류
   |
   +--> OBS, 또는 Twitch / Kick / YouTube로 재송출

조각은 둘이고 각자 맡은 일이 하나씩이에요. BELABOX 프로젝트의 srtla_rec는 본딩을 이해하는 부분이에요. 폰이 연 모든 회선이 한 그룹으로 여기에 등록되고, 이 그룹을 다시 평범한 SRT 스트림 하나로 바꿔요. 그다음 그 스트림을 SRT 리스너로 넘기고, 거기서부터는 미디어 서버가 맡아요. MediaMTX가 흔한 선택이고 스트림을 OBS로 넘기거나 다시 송출하거나 녹화할 수 있지만, SRT를 받는 거면 뭐든 돼요.

어디서 돌릴까

수신 서버는 폰이 방송에 쓰는 모든 네트워크에서 닿아야 하고, 현실적으로는 공개 주소라는 뜻이에요. 작은 VPS면 충분해요. 트랜스코딩이 아니라 패킷 전달이라서 코어 수보다 메가비트와 무난한 CPU가 훨씬 중요해요. 가장 가까운 릴레이를 고르는 것과 같은 이유로 방송하는 곳에서 지리적으로 가까운 곳에 두세요. 거리는 되돌릴 수 없는 지연이고, 재전송마다 다시 치르게 돼요.

거의 모두가 걸리는 실수

192.168.1.50 같은 집 LAN의 수신 서버는 내 Wi-Fi에서만 닿고 다른 어디서도 닿지 않아요. 모바일 데이터 회선은 사설 주소로 갈 수 없어서 등록되지 못하고, 본딩은 안 되고, 그냥 Wi-Fi로 번거롭게 방송하는 셈이에요. 통계에도 회선이 둘이 아니라 하나로 보여요.

공개 주소가 있는 장비에 호스팅하거나, 공유기에서 LAN 안의 장비로 UDP 포트를 포워딩하고 앱이 공유기의 공개 주소를 가리키게 하세요. 다이내믹 DNS 이름을 쓰면 주소가 바뀔 때마다 다시 입력하지 않아도 돼요.

포트

Port용도
UDP, srtla 포트, 인터넷에서 들어오는 방향폰이 접속하는 유일한 포트예요. 관례로 5000을 써요. 본딩된 회선은 각자 자기 출발지 주소와 포트로 들어오기 때문에, 회선마다 열거나 설정할 게 없어요.
UDP, SRT 리스너, 로컬srtla_rec가 다시 합친 스트림을 넘기는 곳이에요. MediaMTX는 기본으로 8890에서 SRT를 받아요. 일반 SRT 클라이언트도 여기로 직접 송출하게 할 게 아니라면 인터넷에 열 필요 없어요.
미디어 서버가 제공하는 것 전부OBS나 시청자에게 나가는 RTMP, RTSP, HLS, WebRTC예요. 전적으로 내 선택이고 본딩 경로에는 들어가지 않아요.

UDP는 TCP가 아니에요

방화벽, 클라우드 보안 그룹, 공유기 포워딩 규칙은 기본값이 TCP인 경우가 아주 많아요. TCP 전용 규칙에 보낸 srtla 등록은 어디에도 오류 없이 사라지고, 수신 서버가 죽은 것과 똑같아 보여요. 회선이 등록되지 않으면 다른 걸 보기 전에 규칙의 프로토콜부터 확인하세요.

스트림 ID

srtla_rec는 SRT 스트림 ID를 그대로 통과시켜서, 앱의 Stream id 칸에는 그 뒤의 서버가 기대하는 값을 그대로 넣어요. MediaMTX라면 publish 형식이고, 경로와 인증이 켜져 있을 때는 선택적으로 자격 증명이 들어가요:

publish:mypath
publish:mypath:username:password

포트가 인터넷에 열려 있다면 인증을 켜세요. 공개 주소에 인증 없는 publish 엔드포인트가 있으면 결국 내가 아닌 누군가에게 발견돼요.

앱이 가리키게 하기

  1. LOLS IRL에서 Streams → + → SRTLA.
  2. Host: 공개 호스트 이름. Port: srtla_rec가 듣고 있는 UDP 포트.
  3. Stream id: 미디어 서버가 기대하는 publish 문자열.
  4. Latency: 처음에는 2000 ms. 방송을 시작하면 앱이 재고 있는 왕복 시간을 보여 주고 값을 제안하는데, 가까운 서버라면 보통 기본값보다 낮게 나와요.
  5. 저장하고, 켜고, 방송을 시작하고, 통계 오버레이를 펼치세요. 회선마다 한 줄이에요. 두 줄이면 두 네트워크가 모두 등록된 거예요.

실제로 되는지 확인하기

미리 알아 두면 좋은 것

어느 단계에서 막혔거나, 두 번째 회선을 받아 주지 않는 수신 서버를 같이 봐 줄 사람이 필요한가요? Discord에서 묻거나 support@lols.gg로 메일 주세요. 있는 지역, 통계 오버레이에 나오는 것, 수신 서버 로그를 가져오면 보통 메시지 두 번이면 끝나요.

관련 글: 앱 쪽과 표시 읽는 법은 5분 만에 본딩, 직접 호스팅하기 싫다면 무료 릴레이 쓰기, 그리고 모든 가이드.