Lobsters

Hijacking the PS5's RTMP Stream

PS5의 RTMP 스트림을 가로채기

PS5 방송 기능은 Twitch나 YouTube로만 송출하지만, DNS 응답을 바꾸면 스트림을 로컬 Mac으로 보낼 수 있습니다. 글쓴이는 dnsmasq와 nginx-rtmp를 구성해 PS5의 1080p60 영상을 받아 mpv로 재생하고 Discord에서 공유합니다.

AI 요약

PS5에는 Twitch와 YouTube 방송 기능이 있지만 Discord 화면 공유는 지원하지 않습니다. 글쓴이는 캡처 카드를 사는 대신 Remote Play를 써봤지만, 컨트롤러와 이어폰을 Remote Play 기기에 연결해야 했고 입력 지연과 화질 설정 문제도 있었습니다. 물리적 연결을 바꾸지 않고 PS5가 보내는 방송을 Mac에서 받는 방법을 찾기 시작합니다.

방송 목적지를 찾기까지

PS5의 방송 프로토콜은 RTMP(Real-Time Messaging Protocol)입니다. 처음에는 PS5가 조회하는 ingest.twitch.tv를 Mac으로 연결하려 했지만, 이 주소는 실제 영상 수신 서버가 아니라 지역별 서버를 알려주는 HTTPS 디스커버리 엔드포인트였습니다. Twitch는 요청에 지역별 주소를 돌려주고 PS5는 그 서버로 실제 영상을 보냅니다.

실제 Twitch 수신 서버는 포트 443에서 RTMPS를 씁니다. PS5가 인증 기관(CA)의 인증서를 검증하므로 자체 서명 인증서로는 연결할 수 없고, 콘솔에 사용자 지정 CA를 설치하는 방법도 없습니다. YouTube 수신 서버는 TLS 없는 RTMP를 포트 1935에서 받기 때문에 영상 수신에는 성공했지만, YouTube API가 방송 상태를 확인하지 못하자 PS5가 약 60초 뒤 송출을 중단했습니다.

방송 중 DNS 로그를 확인한 결과 PS5는 ingest.global-contribute.live-video.net을 조회했고, 실제 수신 주소는 aps30.contribute.live-video.net으로 이어졌습니다. 글쓴이는 contribute.live-video.net 계열 도메인의 DNS 응답을 Mac의 로컬 IP로 바꿨습니다. 이 방법은 실제 스트림을 로컬 서버로 보내면서 RTMPS 인증서 문제를 피합니다.

dnsmasq로 목적지 바꾸기

dnsmasq에 Twitch 수신 도메인과 지역별 주소를 등록해 Mac의 LAN 주소인 192.168.8.175를 반환하도록 설정합니다. 예를 들어 address=/contribute.live-video.net/192.168.8.175와 address=/live.twitch.tv/192.168.8.175를 추가합니다. 설정에는 ingest.global-contribute.live-video.net과 여러 지역별 Twitch 주소도 포함됩니다.

PS5가 이 DNS 서버를 쓰도록 GL.iNet 공유기(OpenWRT)의 DHCP 설정도 바꿉니다. PS5의 고정 임대에 지정된 tag:PS5 태그를 이용해 DHCP 옵션 6에 Mac의 IP를 전달합니다. 글쓴이는 uci add_list 명령으로 옵션을 추가하고 설정을 저장한 뒤 dnsmasq를 다시 시작합니다. 그러면 PS5가 다음 DHCP 갱신 때 Mac을 DNS 서버로 받습니다.

nginx-rtmp로 스트림 받기

Mac에서는 nginx-rtmp를 포트 1935에서 실행합니다. ps5라는 RTMP 애플리케이션을 만들고 라이브 스트림을 받도록 설정합니다. on_publish 콜백은 방송이 시작될 때 localhost의 9988 포트로 POST 요청을 보냅니다. 글쓴이의 macOS 메뉴 막대 앱은 이 요청을 받아 스트림 이름을 확인하고, 복사할 RTMP 주소를 표시합니다.

이 구성을 마치면 PS5는 Twitch 대신 Mac으로 1080p60, H.264 영상과 AAC 스테레오 음성을 전송합니다. 받은 스트림은 OBS에서 다시 송출하거나 로컬에 녹화할 수 있습니다. 글쓴이는 OBS를 거치지 않고 mpv로 스트림을 재생한 뒤 창을 Discord에 공유했습니다. mpv에 저지연 프로필과 0.3초 오디오 버퍼를 지정했고, 지연은 1초 미만이었습니다. 글쓴이는 몇 주간 사용하면서 별다른 문제를 겪지 않았다고 전합니다.

원문: yashgarg.dev / 번역·요약: Trawling