모션 디자인 플레이아웃을 제어하는 작업은 두 가지 API를 결합하여 이뤄집니다. 런다운 서버 API 는 런다운 에셋 및 페이지 템플릿을 로드하고 임베드된 리모트 컨트롤 프리셋(Remote Control Preset, RCP)을 포함합니다.
해당 페이지의 RCP는 리모트 컨트롤 API를 통해 액세스 및 수정할 수 있으며, 그런 다음 즉시 또는 이후에 플레이아웃을 위해 런다운 페이지에 다시 저장됩니다.
아키텍처 개요

프로젝트 환경설정
1. 서버 모드에서 WebSocket 메시징 플러그인 구성
런다운 서버 API는 WebSocket 메시징(WebSocket Messaging) 브리지 플러그인을 통해 WebSocket에 노출됩니다. 이 플러그인은 모든 내부 메시지 버스 엔드포인트가 WebSocket을 통해 노출되도록 허용합니다.
플러그인 브라우저에서 web socket 을 검색하여 활성화할 수 있습니다.

활성화되면 프로젝트 세팅(Project Settings) > Json 에서 플러그인을 환경설정할 수 있습니다.

원하는 수신 포트를 입력하고 JSON에 시리얼라이즈를 환경설정합니다.
2. 런다운 서버 활성화
에디터 세팅에서 다음 단계를 따릅니다.

다음 에디터 재시작 시 런다운 서버 자동 시작을 활성화합니다. 서버 이름을 비워 두면 컴퓨터 이름이 대신 사용됩니다.
또는 'MotionDesignRundownServer.Start [ServerName]' 콘솔 명령을 사용하여 런다운 서버를 즉시 시작할 수 있습니다. 서버 이름은 선택적 실행인자입니다.
마지막으로, UE 프로세스는 -MotionDesignRundownServerStart[=ServerName]
명령줄 실행인자를 사용하여 실행할 수 있습니다.
서버가 실행 중인 경우 MotionDesignRundownServer.Status
콘솔 명령을 사용하면 서버 상태에 대한 일부 정보를 확인할 수 있습니다.
3. 리모트 컨트롤 구성
리모트 컨트롤 API WebSocket 레퍼런스 페이지의 지침을 따르세요.

HTTP 서버를 사용하는 경우 에는 기본적으로 localhost
에 바인딩되며, 이는 필요한 어댑터가 아닐 수 있습니다. 다른 어댑터에 바인딩하려면 DefaultEngine.ini
에 다음 줄을 추가합니다.
[HTTPServer.Listeners]
DefaultBindAddress=any
WebSocket 메시징 사용하기
WebSocket 메시징 플러그인은 UE 메시지 버스를 통과하는 모든 메시지를 노출합니다. 각 내부 메시지 버스 메시지는 추가 라우팅 정보와 함께 .json 메시지에 래핑됩니다.
WebSocket 메시징 브리지 message
분석:
필드 이름 | 설명 |
---|---|
Sender |
전송자의 UUID입니다. 메시징 버스의 전송 엔드포인트를 나타냅니다. |
Recipients |
수신자 UUID의 목록입니다. 비어 있는 경우, 지정된 메시지 타입을 수신하는 모든 엔드포인트에 대한 broadcast 와 동일합니다. |
MessageType |
메시지 콘텐츠의 UE 구조체에 해당합니다. |
Expiration |
메시지가 버려지는 Unix 시간입니다. |
Scope |
메시지 버스 시스템의 메시지(스레드, 프로세스 및 네트워크) 전파 범위를 지정합니다. WebSocket의 경우 항상 Network 입니다. |
Annotations |
선택적 메시지 주석입니다. |
Message |
메시지의 내용입니다. 이 내용의 구조는 MessageType 에 의해 결정됩니다. |
GetRundowns
요청 및 서버 응답 예시:
클라이언트 요청 | 서버 응답 |
---|---|
|
|
MessageType
은 Message
의 내용을 지정합니다. 클라이언트의 경우 API에서 MessageType
은 명령이고, Message
의 내용은 명령의 실행인자입니다.
런다운 서버와의 메시지 버스 핸드셰이크
메시지 버스에서 메시지의 Recipient
에 사용될 런다운 서버의 UUID를 구하려면 WebSocket 클라이언트가 ping
메시지를 WebSocket에 브로드캐스트하고 퐁 릴레이를 수신하여 서버의 UUID를 구해야 합니다. 메시지 버스에서 런다운 서버는 AvaRundownPing
메시지를 구독하고 AvaRundownPong
메시지를 사용하여 전송자에게 응답합니다.
클라이언트 요청 | 서버 응답 |
---|---|
|
|
퐁 메시지 Sender
필드는 메시지 버스 시스템에서 런다운 서버 엔드포인트의 UUID입니다. 그런 다음 이는 웹소켓 클라이언트의 모든 기타 메시지에 대한 Recipients
필드로 사용됩니다.
런다운 서버 API
기존 명령 및 응답 메시지는 다음 소스 코드에서 찾을 수 있습니다.
Engine\Plugins\Experimental\Avalanche\Source\AvalancheMediaEditor\Private\Rundown\AvaRundownMessages.h
USTRUCT의 경로는 WebSocket 메시지의 MessageType
필드이며, 내용은 앞에서 설명한 것과 같이 Message
필드에서 시리얼라이즈됩니다.
JSON 시리얼라이저는 UStructToJsonObject를 사용하며, 네이티브 구조체 정의에서 필드 이름의 대소문자를 변경합니다. 자세한 내용은 네이티브 코드의 StandardizeCase를 참고하세요. JSON 포맷에서 일반적인 규칙은 필드 이름의 첫 문자가 소문자라는 것입니다. 이는 JSON 포맷에만 해당되며, CBOR(Concise Binary Object Representation)은 필드 이름의 대소문자를 그대로 유지합니다.
리모트 컨트롤 API를 사용하여 페이지 RCP 편집하기

GetPageDetails
는 true 로 설정된 bLoadRemoteControlPreset
과 함께 사용되어 페이지의 RC 값을 해당 에셋의 관리되는 RCP에 주입합니다. 서버 응답은 다음 필드를 포함합니다.
'remoteControlPresetName': '/Temp/Managed/ESPYS/Blueprint/Avalanche/9021',
'remoteControlPresetId': '984A4E0146010512D839538C0AF265FA',
이는 PresetName
필드로서 리모트 컨트롤 API와 함께 사용될 수 있습니다.
RC 값은 UpdatePageFromRCP
요청으로 페이지에 다시 저장됩니다.
페이지 RC 값을 직접 수정하는 API는 없습니다. 그렇게 하면 RC 컨트롤러가 손상될 수 있으므로 기본적으로 허용되지 않습니다. RC 값을 수정하는 유일한 방법은 컨트롤러 및 모든 관련 로직을 실행하는 리모트 컨트롤 API를 사용하는 것입니다.