[RenderStreaming] 랜더스트리밍 Brodcast로 Connect ID 각각 설정하는방법
스트리밍 Brodcast로 Connect ID 각각 설정하는방법
1. WebApp 수정
1-1. WebApp 원본 파일 다운로드
https://github.com/Unity-Technologies/UnityRenderStreaming
1-2. 파일위치 확인
*Broadcast html/js 파일위치
C:\Users\chaelin\Documents\WebApp\client\public\receiver
(WebApp - client - public - receiver)
1-3. connectID 값 지정스크립트 작성
**(WebApp - client - public - receiver - index.html)
body 태그안에 아래 코드 추가
<input id="myConnectId" type="number" min="0" max="4096">
**(WebApp - client - public - receiver - main.js)
async function setupRenderStreaming() 함수내용 변경
let myConnectID =document.getElementById('myConnectId').value;//수정내용
await renderstreaming.createConnection(myConnectID);//myConnectID변수 추가
1-4. WebApp 빌드
(npm install은 한번만 해도됨)
- 방법1. 빌드파일 안만들고 동작
cd C:\Users\chaelin\Desktop\MyWebsocket\WebApp
npm install
npm run build
npm run start -- --websocket
-방법2. 빌드파일 만들고 따로 동작
cd C:\Users\chaelin\Desktop\MyWebsocket\WebApp
npm install
npm run build
npm run pack
~~~생성된 WebServer.exe파일 실행 ~~~
cd C:\Users\chaelin\Desktop\MyWebsocket\WebApp
.\webserver.exe -w
참고: WebServer 커스텀 제작방법 문서
https://docs.unity3d.com/Packages/com.unity.renderstreaming@3.1/manual/customize-webapp.html
2. 유니티 샘플씬 수정
2-1. 유니티실행파일 실행시, 받은 어규먼트 값으로 ConnectID, URL 설정하기
private IEnumerator AssetLoadProcess()
{
string[] arguments = Environment.GetCommandLineArgs();
if (arguments.Length >= 2)
{
string url = arguments[1];
string connectionID = arguments[2];
brodcastSample.StartBroadCast(url, connectionID);
wsClient.StartWsClient(url);
}
else
{
Debug.Log("<color=red>ERROR</color>" + arguments.Length);
for (int i=0;i<arguments.Length;i++)
{
Debug.Log($"argument: {arguments[i]}");
}
}
yield return null;
}
2-2. BrodcastSample.cs의 StartBroadCast(string url) 함수변경
public void StartBroadCast(string url, string connectID)
{
if (renderStreaming.runOnAwake)
return;
GetComponent<Broadcast>().myConnectID = connectID;//Connect ID 커스텀 설정
RenderStreamingSettings.SignalingAddress = url;
renderStreaming.Run(
hardwareEncoder: RenderStreamingSettings.EnableHWCodec,
signaling: RenderStreamingSettings.Signaling);
inputReceiver.OnStartedChannel += OnStartedChannel;
}
2-3. Brodcast.cs의 OnOffer(SignalingEventData data) 함수변경
public void OnOffer(SignalingEventData data)
{
if (data.connectionId != myConnectID) //들어오는 ConnectID랑 내가 설장한 ConnectID랑 다르면 실행 안되게 함
{
return;
}
data.connectionId = myConnectID;//커스텀 커넥트 아이디 수정 -->사실 의미없음
if (connectionIds.Contains(data.connectionId))
{
Debug.Log($"Already answered this connectionId : {data.connectionId}");
return;
}
connectionIds.Add(data.connectionId);
foreach (var source in streams.OfType<IStreamSender>())
{
AddSender(data.connectionId, source);
}
foreach (var channel in streams.OfType<IDataChannel>().Where(c => c.IsLocal))
{
AddChannel(data.connectionId, channel);
}
SendAnswer(data.connectionId);
}
--
RenderStreaming 도큐먼트 사이트에는 Brodcast의 ConnectID값 설정하는 방법이 안나와있다.
그래서 connectID를 따로 설정할 수 있는 Bidirectional.html 로 하려고 했는데 마우스 Input관련해서 해결할 수 없어서 포럼에 물어봤었다.
원하는답변이 와서 정말정말 고마웠음..
--
선명하게 내보내는법
코덱 Defualt 로 설정하면 전체화면 시 깨지고, 물체를 움직였을때 잔상도 남는다
그래서 Video/VP9 profile id=0 로 코덱을 변경해주면 선명하게 나오고 잔상도 남지 않는다.