This document is about: FUSION 2
SWITCH TO

Screen sharing


Available in the Industries Circle
Circle
Fusion行業原型附加元件

這個模組展示了如何使用Photon影片SDK來共享使用者畫面,透過u視窗捕捉第三方模組來捕捉。

概念

Photon影片SDK

Photon影片SDK是一個Photon語音SDK的特別版本,其包含支援影片串流。

在它專用的讀我檔案中有更多細節,其在SDK下載頁面中的Photon影片SDK

可以透過記錄器執行IVideoRecorderPusher來完成影片串流的捕捉,並且玩家可以執行IVideoPlayer來處理重新播放。

u視窗捕捉

在這個模組中,u視窗捕捉來捕捉畫面內容。

u視窗捕捉提供特定視窗捕捉,或全桌面捕捉。在這個範例中,為了簡化,只支援全桌面捕捉。

uWindowCaptureRecorder類別執行IVideoRecorderPusher介面,其允許針對Photon影片SDK來收集幀。

為了啟用它,U_WINDOW_CAPTURE_RECORDER_ENABLE必須被新增到定義符號。

模組邏輯

screen sharing image transfer logic
畫面共享圖案轉移邏輯

畫面共享發出

設定

為了能夠發出,場景必須含有:

  • 一個ScreenSharingEmitter元件:它開始及停止捕捉及畫面共享排放。
  • 一個UwcManager元件:它允許畫面由u視窗捕捉來捕捉。
  • 一個uWindowCaptureRecorder元件:它收集u視窗捕捉材質,並且傳送它到Photon影片SDK
  • 在畫面共享發出器元件上的一些元件調用ConnectScreenSharing()DisconnectScreenSharing()
  • NetworkRunner遊戲物件上的一個FusionVoiceClient元件,其開始語音階段(請參見語音 - Fusion整合)

開始發出

為了能夠發送影片,必須初始化一個Photon語音連線。模組假設這個已經透過傳統方式完成了,並且查看Update()以了解階段何時開始。

在調用ConnectScreenSharing()時,ScreenSharingEmitter將首先等待語音階段初始化的完成。

然後,它也將等待u視窗捕捉初始化的完成。這是透過uWindowCaptureRecorder OnReady回調來完成。

當一切準備好後,調用FusionVoiceClient上的VoiceClient.CreateLocalVoiceVideo來建立一個傳輸通道(一個「語音」):從現在開始,記錄器將串流桌面捕捉。

如果提供了一個IEmitterListener,它將透過OnStartEmitting回調來進行發出開始的警告。

注意事項:在多重畫面的情況,可以透過畫面ID(從0開始)調用SelectDesktop來選擇共享的桌面。

停止發出

調用DisconnectScreenSharing()將中斷連線影片串流聲音。

如果提供了一個IEmitterListener,它將透過OnStopEmitting回調來進行發出結束的警告。

畫面共享接收

設定

為了能夠接收畫面共享,畫面必須含有:

  • 一個ScreenSharingReceiver元件:它偵測新的影片連線,然後建立影片播放器及關聯的材質。
  • 一個ScreenSharingScreen元件:它說明接收轉譯器,並且確保傳送Oculus Quest著色器所需的正確的資料。

選擇性地,可以設定一個LOD畫面處理器,來啟用MIP映射(針對低像素密度畫面來說很有用,比如在VR頭戴式裝置上)。

畫面共享接收器

接收器使用VoiceClient.OnRemoteVoiceInfoAction回調來監視新的語音連線,其程式碼是影片轉碼器。

在該等連線時,它以Platform.CreateVideoPlayerUnityTexture建立一個影片播放器。

然後,當這個影片播放器已經準備好(OnVideoPlayerReady),它建立一個材質,其含有影片播放器材質,並且以EnablePlayback傳送它到ScreenSharingScreen:畫面將隨後更改其轉譯器材質為這個新的材質。

Oculus Quest著色器

針對Oculus Quest,一個特定的設定需要一個自訂著色器:

  • 如果使用了URP管道
  • 在Android上(這是針對Oculus Quest的案例)
  • 如果使用單一通道(或多重檢視)轉譯(這在VR中很常見)

針對這個設置,預設Photon影片著色器不會工作。

這個模組提供一個特定的Quest影片材質Ext3D著色器以處理這個,而且ScreenReceiver在需要時使用它。

為了順利工作,這個著色器需要在各個更新期間接收一些額外的關於轉譯器的資訊:在ScreenSharingScreen Update()中處理它。

MIP映射

影片SDK即時建立的材質無法提供MIP映射。在一些低密度像素的平台上,比如VR頭戴式裝置,它可能導致顫抖的效果。

為了處理這個問題,ScreenSharingScreenLODHandler驅動一個相機,其以一個慢的速率來捕捉影片材質的圖片,以在另一個支援MIP映射的轉譯器上投射它。

安裝注意事項

在一個專案中安裝u視窗捕捉時,它的asmdef必須被新增到Photon/PhotonVoice/PhotonVoiceApi/PhotonVoice.API.asmdef,這樣uWindowCaptureRecorder可以存取它。

相依性

目前的版本已經透過以下的軟體來測試:

  • Fusion SDK 2.0
  • Photon影片SDK 2.53
  • u視窗捕捉1.1.0

示範

可在Assets\Photon\FusionAddons\ScreenSharing\Demo\Scenes\資料夾中找到一個示範場景:

必須使用兩個客戶端來測試場景:

  • 第一個客戶端是畫面共享發出器:Emitter遊戲物件必須被啟用,而Receiver遊戲物件必須被停用,
  • 第二個客戶端是畫面共享接收器:Emitter遊戲物件必須被停用,而Receiver遊戲物件必須被啟用,

因為StartSharingOnVoiceConnectionAvailable預設被設定為真,在啟動場景時,發出器開始共享桌面。

fusion industries addon screensharing

下載

這個附加元件的最新版本被包含在附加元件專案之中

已支援拓撲

  • 共享模式

更改記錄

  • 版本2.0.2:在示範場景中更改轉碼器設定(VP8而非VP9)
  • 版本2.0.1:在登錄語音客戶端之前新增驗證
  • 版本2.0.0:支援Fusion 2.0
  • 版本1.0.3:更新Photon語音影片SDK 2.53
  • 版本1.0.2:在資源目錄中的移動Quest影片材質Ext3D著色器
  • 版本1.0.1:畫面共享被重新命名為畫面共享及清理+新增命名空間
  • 版本1.0.0:第一個版本
Back to top