This document is about: FUSION 1
SWITCH TO

수정중인 페이지 입니다.

화면 공유


Available in the Industries Circle
Circle
Fusion Industries 프로토 타이핑 애드온

이 모듈에서는 uWindowCapture 타사 모듈을 통해 캡처된 Photon Video SDK를 사용하여 사용자 화면을 공유하는 방법을 설명합니다.

개념

Photon VideoSDK

Photon Video SDK는 비디오 스트리밍 지원을 포함한 Photon Voice SDK의 특별 버전입니다.

자세한 내용은 SDK 다운로드 페이지 [Photon video SDK]Photon video SDK 에서 확인할 수 있는 전용 README에서 확인할 수 있습니다.

비디오 스트림의 캡처는 IVideoRecorderPusher를 구현하는 레코더로 가능하며, 재생은 IVideoPlayer를 구현하는 플레이어가 처리할 수 있습니다.

uWindowCapture

이 모듈에서는 uWindowCapture를 통해 화면 내용이 캡처됩니다.

uWindowCapture 에서는 특정 창 캡처 또는 전체 데스크톱 캡처를 제공합니다. 이 샘플에서는 단순화를 위해 전체 데스크톱 캡처만 지원됩니다.

IVideoRecorderPusher 인터페이스를 구현하는 uWindowCaptureRecorder 클래스는 PhotonVideo SDK의 프레임을 수집할 수 있습니다.

활성화하려면 정의 심볼에 U_WINDOW_CAPTURE_RECORDER_ENABLE을 추가해야 합니다.

모듈 로직

screen sharing image transfer logic
화면 공유 이미지 전송 로직

화면 공유 발행

설정

발행 활성화를 하기 위해, 씬은 다음이 포함되어 있어야 합니다:

  • ScreenSharingEmitter 컴포넌트: 캡처 및 화면 공유 발행을 시작 및 중지합니다.
  • UwcManager 컴포넌트: uWindows Capture를 통해 화면을 캡처할 수 있습니다
  • uWindowCaptureRecorder 컴포넌트: uWindowCapture 텍스처를 수집하여 PhotonVideo SDK로 전달합니다
  • ScreenSharingEmitter 컴포넌트에서 ConnectScreenSharing()DisconnectScreenSharing()을 호출하는 일부 컴포넌트
  • 음성 세션을 시작하는 NetworkRunner 게임 객체의 FusionVoiceClient 컴포넌트(Voice - Fusion 통합 참조)

발행 시작

동영상을 전송하려면 Photon Voice 연결이 초기화되어야 합니다. 모듈은 이것이 이미 고전적으로 수행되고 있다고 가정하고 Update()에서 세션이 언제 시작되는지 확인합니다.

ConnectScreenSharing()을 호출하면 ScreenSharingEmitter이 먼저 음성 세션 초기화가 완료될 때까지 기다립니다.

그런 다음 uWindowCapture 초기화가 완료될 때까지 기다립니다. 이 작업은 uWindowCaptureRecorder OnReady 콜백을 통해 수행됩니다.

모든 것이 준비되면 FusionVoiceClient에서 VoiceClient.CreateLocalVoiceVideo를 호출하여 전송 채널("Voice")이 생성됩니다. 이제부터 레코드가 데스크톱 캡처를 스트리밍 합니다.

IEmitterListener가 제공되면 OnStartEmitting 콜백과 함께 발행 시작에 대한 경고가 표시됩니다.

참고: 다중 화면 상황에서는 화면 ID 0부터 SelectDesktop을 호출하여 공유 데스크톱을 선택할 수 있습니다.

발행 중지

DisconnectScreenSharing()을 호출하면 비디오 스트리밍 음성의 연결이 끊어집니다.

IEmitterListener가 제공되면 OnStopEmitting 콜백과 함께 발행 종료 경고가 표시됩니다.

화면 공유 수신

설정

화면 공유를 수신하려면 씬에 다음이 포함되어야 합니다:

  • ScreenSharingReceiver 컴포넌트: 새로운 비디오 연결을 감지하고 비디오 플레이어와 관련 텍스처를 생성합니다.
  • ScreenSharingScreen 컴포넌트: 수신 렌더러를 설명하고 Oculus Quest 셰이더에 필요한 적절한 데이터를 전달합니다.

선택적으로, LOD 화면 핸들러를 설정하여 밉 매핑을 활성화할 수 있습니다(VR 헤드셋과 같이 낮은 픽셀 밀도 화면에 사용 가능).

ScreensharingReceiver

수신기는 VoiceClient.OnRemoteVoiceInfoAction 콜백(코드가 비디오 코덱인 경우)을 통해 새로운 음성 연결을 확인합니다.

연결되면 Platform.CreateVideoPlayerUnityTexture로 비디오 플레이어를 만듭니다.

그러면 이 비디오 플레이어가 준비되면(OnVideoPlayerReady) 비디오 플레이어 텍스처가 포함된 자료를 생성하여 EnablePlayback과 함께 ScreenSharingScreen으로 전달합니다. 그러면 화면은 렌더링 자료를 이 새로운 자료로 변경합니다.

Oculus Quest 셰이더

특정 설정에는 Oculus Quest에 대한 사용자 지정 셰이더가 필요합니다:

  • URP 파이프라인이 사용되는 경우
  • Android에서 (Oculus quest의 경우에 해당)
  • 단일 패스(또는 다중 뷰) 렌더링이 사용되는 경우(VR에서 일반적임)

이 구성의 경우 기본 Photon Video 셰이더가 작동하지 않습니다.

이 모듈은 이를 처리하기 위해 특정 QuestVideoTextureExt3D 셰이더를 제공하며, 필요할 때 ScreenReceiver에서 이 셰이더를 사용합니다.

이 셰이더가 작동하려면 업데이트할 때마다 렌더링에 대한 추가 정보를 받아야 합니다. 이 셰이더는 ScreenSharingScreen Update()에서 처리됩니다.

밉-매핑

비디오 SDK에 의해 즉시 생성된 텍스처는 밉 매핑을 제공할 수 없습니다. VR 헤드셋과 같이 픽셀 밀도가 낮은 일부 플랫폼에서는 떨림 효과가 발생할 수 있습니다.

이를 처리하기 위해 ScreenSharingScreenLODHandler는 동영상 질감의 사진을 느린 속도로 캡처한 카메라를 다른 렌더러에 투사하여 밉 매핑을 지원합니다.

설치 노트

프로젝트에 uWindowsCapture를 설치할 때 해당 asmdef를 Photon/PhotonVoice/PhotonVoiceApi/PhotonVoice.API.asmdef에 추가해야 uWindowCaptureRecorder에서 접근할 수 있습니다.

또한 이 모듈에 사용된 uWindowCaptureRecorder 버전은 isReady 속성을 추가하기 위해 약간 수정되었으며, OnReady가 호출될 때마다 설정됩니다(일부 에지 사례를 처리하기 위해). 수정된 버전은 이를 사용하는 샘플에 제공되거나, 2.52 파일에서 다음과 같은 패치를 적용할 수 있습니다:

Unknown

31,32d30
<         public bool isReady = false;
<
34d31
<
52d48
<                     isReady = true;
79d74
<                     isReady = true;

의존성

현재 버전은 아래 기준으로 테스트되었습니다:

  • Fusion 1.1.7
  • Photon Video SDK 2.51
  • uWindowCapture 1.1.0

다운로드

이 애드온의 최신 버전은 애드온 프로젝트에 포함되어 있습니다.

지원하는 토폴로지

  • 공유 모드
  • 호스트 모드

변경 내역

  • 버전 1.0.0 (2023/07/06) : 최초 릴리즈
Back to top