에픽게임즈는 Google이 WebRTC 버전에서 공개한 취약성을 알고 있으며, EOS SDK에 미치는 영향과 향후 단계에 대해 조사하고 있습니다. 자세한 내용은 여기를 참고하세요.
이전에 웹 서비스를 개발하거나 디플로이해 본 경험이 없더라도, 개요 및 퀵스타트 가이드 페이지의 설명에 따라 단순한 로컬 영역 네트워크에서 작동하도록 픽셀 스트리밍을 구성할 수 있습니다. 하지만 보다 복잡한 네트워크 또는 개방형 인터넷에서 서비스를 디플로이하거나 사용자 경험 및 연결 플로를 재설계하려는 경우, 구성을 재고해 보아야 할 수 있습니다.
픽셀 스트리밍에 동반되는 시그널링 서버, 웹 서버, 매치메이커 서버는 레퍼런스 구현 전용입니다. 에픽은 이러한 서버를 모든 사례에 맞는 완전한 솔루션으로 간주하지 않으며, 그보다는 자신의 목적에 맞게 수정할 것을 권장합니다. 이를 위해 시그널링 서버, 웹 서버, 매치메이커 서버를 새로 제작된 Pixel Streaming Infrastructure(외부 웹사이트)에서 제공하여 언리얼 엔진 EULA에 따라 자유롭게 배포할 수 있도록 했습니다(예시의 배포 및 2차 라이선스 참조).
픽셀 스트리밍 프론트엔드 및 웹 서버에 대한 자세한 내용은 픽셀 스트리밍 인프라 페이지를 참조하세요.
STUN 및 TURN 서버
시그널링 및 웹 서버가 언리얼 엔진 애플리케이션과 브라우저 간의 직접 연결을 협상할 수 있으려면, 각 파티가 서로에게 자체 IP 주소를 전송해야 합니다. 브라우저는 UE5 애플리케이션에서 전송한 IP 주소에 액세스할 수 있어야 하며, 그 반대도 가능해야 합니다.
단순한 로컬 영역 네트워크 내에서 각 엔드포인트는 보통 다른 파티가 자체 네트워크 카드에 알려진 프라이빗 IP 주소를 사용하여 해당 IP 주소에 액세스할 수 있다고 가정합니다. 개방형 인터넷을 통하거나, 여러 서브넷에 걸쳐 있거나, 브라우저와 UE5 애플리케이션 사이에 네트워크 주소 변환(Network Address Translation, NAT) 서비스가 개입될 때는 그렇지 않은 경우가 일반적입니다. 대신 각 파티는 NAT용 세션 탐색 유틸리티(STUN, Session Traversal Utilities for NAT) 프로토콜을 구현하는 서버에 쿼리하여 공개적으로 표시되는 자체 IP 주소를 찾아야 합니다. STUN 서버가 공개적으로 표시되는 IP 주소를 각 엔드포인트에 알린 후 시그널링 및 웹 서버가 직접 연결을 계속 중개할 수 있습니다.

또한 TURN 서버를 사용하여 UE5 애플리케이션과 브라우저 간의 미디어 스트림을 중계할 수 있습니다. TURN 프로토콜을 통해 TURN 서버가 UE5 애플리케이션과 브라우저에 모두 연결됩니다. UE5 애플리케이션은 스트리밍된 모든 데이터를 TURN 서버에 전송하고, TURN 서버는 해당 데이터를 브라우저에 전달합니다. 이 경우 UE5 애플리케이션과 브라우저 간에 직접 연결이 없습니다. 무선 캐리어 네트워크에서 모바일 디바이스를 지원하려면 TURN 서버를 사용할 수밖에 없습니다. 모바일 네트워크에서는 클라이언트가 WebRTC 프로토콜을 사용하여 성공적으로 연결하지 못하는 경우가 있습니다.
STUN 및 TURN 프로토콜은 하나의 서버에서 다른 서버로 예비 전환하는 기능과 더불어 상호 연결 확립(Interactive Connectivity Establishment, ICE) 프레임워크를 구성합니다.
인터넷에서 STUN 및 TURN 서버의 몇 가지 오픈 소스 구현을 찾을 수 있습니다. 직접 호스팅하는 대신 무료로 사용할 수 있는 퍼블릭 STUN 서버도 있지만, 직접 호스팅하지 않는 서비스를 사용할 때는 주의를 기울여야 합니다. TURN 프로토콜을 통해 미디어를 중계하는 데 수반되는 처리량과 대역폭 때문에 퍼블릭 TURN 서비스를 무료로 이용할 수 있는 경우는 드뭅니다.
편의를 위해 Samples/platform_scripts/
폴더에는 Windows 및 Linux에서 CoTURN 을 실행하는 스크립트가 포함되어 있습니다. CoTURN은 정식 버전의 STUN/TURN 서버로, 무료 오픈 소스입니다. 이전에 출시했던 STUN 및 TURN 레퍼런스 서버는 제작에 바로 사용할 수 있는 수준이 아니었기 때문에 제거했습니다.
픽셀 스트리밍이 ICE 연결을 사용하도록 구성하려면, 사용하고자 하는 STUN 및 TURN 서버의 호스트 이름을 시그널링 및 웹 서버의 peerConnectionOptions 환경설정 파라미터에서 설정해야 합니다. 이 파라미터의 포맷을 지정하고 파라미터를 제공하는 방법에 대한 자세한 내용은 픽셀 스트리밍 레퍼런스를 참조하세요.
이와 더불어 자체 STUN 또는 TURN 서버를 호스팅하는 경우 peerConnectionOptions 파라미터에서 지정한 IP 주소와 포트가 개방형 인터넷에서 반드시 표시되어야 합니다.
멀티 플레이어 엔드포인트
모든 사용자가 동일한 언리얼 엔진 세션에 있지만 해당 세션을 제어하는 권한은 동일하지 않게 설정해야 하는 경우가 있습니다.
예를 들어 발표자는 브라우저에서 언리얼 엔진을 완전히 제어할 수 있지만 다른 사용자는 스트림을 보는 것만 가능한, 프레젠테이션과 같은 경험을 만드는 것입니다. 아니면 사용자마다 다른 커스텀 컨트롤 세트를 생성하여 협업을 통해 경험의 다양한 요소를 실시간으로 제어해야 할 수도 있습니다.
이러한 시나리오에서는 다음과 같이 하나의 웹 서비스 스택으로 하나의 언리얼 엔진 인스턴스를 실행하고, 시그널링 및 웹 서버에서는 다른 플레이어 HTML 페이지를 만들면 됩니다.

이 시나리오에서는 각기 다른 HTML 플레이어 페이지와 그 JavaScript 환경을 커스터마이징하여 원하는 컨트롤만 노출할 수 있습니다. 그런 다음, 사용자의 각 클래스는 시그널링 및 웹 서버에서 다른 URL을 요청해야 합니다. 예를 들어 발표자는 http://yourhostname/presenter.html
을 로드하고, 다른 사용자들은 http://yourhostname/attendee.html
을 로드합니다.
플레이어 페이지 커스터마이징 방법에 대한 자세한 내용은 플레이어 웹 페이지 커스터마이징하기를 참조하세요.
매치메이킹을 통한 다중 풀 스택
모든 사용자를 동일한 스트림에 연결하는 대신 각 사용자에게 고유한 인터랙티브 경험을 제공하려는 경우, 사용자마다 별도의 픽셀 스트리밍 컴포넌트 스택을 실행하고, 각 사용자를 별도의 시그널링 및 웹 서버로 접속하게 하여 연결을 시작하면 됩니다.
픽셀 스트리밍 컴포넌트의 각 스택을 별도의 호스트에서 구성할 수도 있고, 각 스택 내 컴포넌트의 포트 세팅을 다른 모든 포트와 통신하도록 환경설정한다면 동일한 호스트에 2개 이상의 스택을 넣을 수도 있습니다. 이러한 포트 세팅에 대한 자세한 내용은 픽셀 스트리밍 레퍼런스를 참조하세요.
같은 컴퓨터에서 픽셀 스트리밍을 사용하여 다수의 언리얼 엔진 인스턴스를 실행할 계획인 경우, NVIDIA GeForce 라인과 같은 소비자급 그래픽 카드 대다수는 최대 3개의 인코더만 동시에 실행할 수 있습니다. Quadro, Tesla와 같은 전문가급 카드의 경우 제한 사항이 동일하지 않습니다.
이러한 유형의 환경설정을 구성하는 데 도움이 되도록, 픽셀 스트리밍 시스템은 어떤 시그널링 및 웹 서버를 사용할 수 있는지와 클라이언트 연결에 사용되고 있는지 여부를 추적하는 매치메이커 서버를 사용할 수 있습니다.

클라이언트마다 자체 시그널링 및 웹 서버 URL에 연결해야 하는 대신 매치메이커 서버에 먼저 연결합니다. 매치메이커 서버가 각 요청자를 자체 시그널링 및 웹 서버로 리디렉션하면, 시그널링 및 웹 서버가 클라이언트와 UE5 애플리케이션 간의 피어 투 피어 연결을 구성합니다. 해당 연결이 활성 상태인 동안 매치메이커 서버는 새로 들어오는 브라우저 연결을 같은 시그널링 및 웹 서버로 리디렉션하지 않습니다.
픽셀 스트리밍 시스템에 매치메이커 서버의 레퍼런스 구현이 포함되어 있으며, 위치는 Samples/PixelStreaming/WebServers/Matchmaker
폴더입니다. 이 서버는 그대로 사용해도 되며, 시그널링 및 웹 서버에서 동일한 메시지를 처리하는 한 matchmaker.js
파일을 필요에 따라 커스터마이징해도 됩니다.
매치메이커 서버를 구성하려면 다음 단계를 따르세요.
-
시그널링 및 웹 서버를 시작하기 전에
run.bat
파일을 실행하여 매치메이커 서버를 시작합니다. 기본적으로 서버는 90번 포트에서 클라이언트의 HTTP 연결을 수신하고, 9999번 포트에서 시그널링 및 웹 서버의 연결을 수신합니다. 이러한 세팅은 명령줄에서 다음과 같은 환경설정 파라미터를 제공하여 오버라이드할 수 있습니다.파라미터 설명 --HttpPort 매치메이커 서버가 브라우저에서 들어오는 HTTP 연결을 수신하는 포트를 정의합니다. --MatchmakerPort 매치메이커 서버가 시그널링 및 웹 서버에서 들어오는 상태 메시지를 수신하는 포트를 정의합니다. 예시는 다음과 같습니다.
\> node cirrus --HttpPort 88 --MatchmakerPort 9988
-
시그널링 및 웹 서버에 다음과 같은 환경설정 파라미터를 설정합니다.
파라미터 설명 --UseMatchmaker 이 파라미터를 true
로 설정하면 시그널링 웹 서버가 현재 상태를 매치메이커 서버에 전송합니다.--MatchmakerAddress 이 시그널링 및 웹 서버가 연결할 매치메이커 서버의 IP 주소입니다. --MatchmakerPort 이 시그널링 및 웹 서버가 매치메이커 서버에 메시지를 전송해야 할 때 사용할 포트입니다. 이 값이 매치메이커 서버에 설정한 --MatchmakerPort 값과 일치해야 합니다. --PublicIp 공개적으로 표시된 시그널링 및 웹 서버 IP 주소입니다. 매치메이커 서버가 사용자를 이 시그널링 및 웹 서버로 리디렉션할 때 이 IP 주소로 보냅니다. 따라서 연결 브라우저에 표시되어야 합니다. --HttpPort 시그널링 및 웹 서버가 HTTP 연결을 수신하는 포트입니다. 매치메이커 서버가 사용자를 이 시그널링 및 웹 서버로 리디렉션할 때 이 포트로 보냅니다. 이 파라미터를 설정하는 방법은 픽셀 스트리밍 레퍼런스를 참조하세요.
온디맨드 스케일링
위 설명처럼 별도의 풀 스택이 들어오는 각 클라이언트 연결을 처리하는 전략을 사용하려는 경우, 실행할 언리얼 엔진 애플리케이션 수를 미리 설정해 두지 않는 것이 좋습니다. 사용자 수가 서버 수보다 적으면 리소스가 낭비되며, 반대로 사용자 수가 서버 수보다 많으면 연결이 가능할 때까지 기다려야 할 수 있습니다. 그 대신 클라이언트가 연결을 시도할 때마다 새 서버 인스턴스를 가동하는 것이 좋습니다.
픽셀 스트리밍 시스템의 컴포넌트와 선택적 매치메이커 서버가 있으니, 이 같은 동적 스케일링 호스팅 시스템을 구성하는 데 필요한 모든 요소를 갖춘 셈입니다. 하지만 현재 이러한 수준의 클라우드 디플로이는 자체 클라우드 서비스 제공자에서 어떻게 구성하는지에 달려 있습니다.
SFU란
선택적 전달 유닛(Selective Forwarding Unit, SFU)은 참여자 간에 미디어 스트림을 지능적으로 라우팅하는 서버입니다. 픽셀 스트리밍에서 SFU의 역할은 언리얼 엔진 애플리케이션에서 스트림 데이터를 수신하고, 수신자 피어(보통 연결된 웹 브라우저)에 전달하는 것입니다. 데이터를 선택적으로 서브세팅하여 각 수신자 피어의 우선적 네트워크 조건에 맞추기도 합니다.
SFU 사용 시 픽셀 스트리밍은 스트림 대역폭 적응을 위해 동시 브로드캐스트 전략을 구현합니다. 동시 브로드캐스트 전략에서 언리얼 인스턴스는 해상도가 다양한 다수의 스트림을 생성합니다. 그런 다음 SFU는 수신자의 네트워크 조건에 따라 스트림의 어떤 퀄리티 베리언트를 수신자에게 전송할지 선택합니다.
현재 픽셀 스트리밍의 SFU는 실험단계 기능입니다.

SFU 사용 시점
SFU는 모든 피어가 피어 투 피어 방식으로 픽셀 스트리밍 애플리케이션에 연결된 경우, 일반적으로 가능한 숫자보다 더 많은 피어를 연결할 수 있는 일대다 스트림을 가능하게 합니다. SFU는 픽셀 스트리밍 애플리케이션이 다수의 연결된 수신자를 필요로 하며, 이러한 수신자의 네트워크 조건이 서로 달라 다양한 스트림 퀄리티 레벨(예: 낮은 비트레이트, 해상도 또는 프레임 레이트)이 요구될 때 적절하게 사용할 수 있습니다.
SFU 환경설정
SFU는 Samples/PixelStreaming/WebServers/SFU
에 있는 config.js
파일을 수정하여 환경설정할 수 있습니다.
SFU는 기본적으로 2가지 퀄리티 레벨을 제공하도록 환경설정됩니다. 하나는 전체 해상도 스트림, 다른 하나는 절반 해상도 스트림입니다. 이러한 환경설정은 -SimulcastParameters=
를 사용하여 변경할 수 있습니다. 자세한 내용은 픽셀 스트리밍 레퍼런스를 참조하세요.
3개 이상의 동시 브로드캐스트 스트림을 생성하는 경우 인코딩 세션이 3개로 제한되는 일반 소비자용 GPU에서 H.264 하드웨어 인코더를 사용할 때 한계에 부딪힐 수 있습니다.
SFU 레이어 토글 생성하기
SFU의 레이어 전환 기능을 가장 잘 테스트하기 위해 스트림이 SFU의 사용 가능한 레이어 사이를 강제로 전환하는 데 필요한 블루프린트를 추가했습니다.

레벨 블루프린트에 위 내용을 추가하면 할당된 키를 연결된 피어로 사용하여 레이어를 전환할 수 있습니다.
SFU는 연결에 따라 레이어 간 피어를 자동으로 전환하도록 설계되었으므로, 실제 배포에는 이 블루프린트를 사용할 필요가 없습니다.
Layer 1
Layer 2
Layer 3
호스트 머신 하드웨어 성능
언리얼 엔진 애플리케이션 및 픽셀 스트리밍 웹 서비스를 호스팅하기 위해 Amazon(AWS) 또는 Microsoft Azure와 같은 서비스 제공자를 선택하는 경우, 하드웨어 성능이 다른 여러 호스트 계층 중에서 선택할 수 있습니다. 호스트의 성능이 제공 가능한 스트림의 퀄리티에 영향을 줄 수 있다는 점에 유의하세요.
예를 들어 GPU 성능이 떨어지거나 메모리가 적은 호스트를 선택하는 경우, 스트림에서 최대 비디오 퀄리티를 얻지 못할 수 있습니다.