Webrtc 외부 연결 Turn server for Exnernal Connection window

Turn server for Exnernal Connection window

초보도 구축 가능한 Turn server (window 환경)

Turn server for Exnernal Connection window

Webrtc와 sturn 서버만으로는 모바일의 LTE로 접속하는 외부연결을 할 수 없는 문제가 있습니다. 알아보니 Turn server를 써야 된다 합니다.

coturn이란 것이 있는데 리눅스 설명이고 그나마도 설명이 어려워 포기할 찰나에 언리얼엔진에서 Pixel Streaming를 위해 윈도우에서 간편하게 구동할 수 있도록 만들어논 Turn server를 찾게 되었습니다. coturn기반으로 window환경에서 Turn server를 구축하고 싶은 저 같은 초보 분들에게 도움이 될 것 같습니다.

https://docs.unrealengine.com/5.0/en-US/getting-started-with-pixel-streaming-in-unreal-engine/

https://dev.epicgames.com/community/learning/tutorials/VY4X/unreal-engine-where-s-my-stream-turn-server-debugging-for-pixel-streaming

https://github.com/EpicGames/PixelStreamingInfrastructure

https://docs.unrealengine.com/5.2/en-US/hosting-and-networking-guide-for-pixel-streaming-in-unreal-engine/

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=djjproject&logNo=220896510901

도대체 TURN서버는 뭐지?

TURN 서버란? TURN은 WebRTC 설정의 중요한 부분으로, 보안 및 개인 정보 문제로 인해 인터넷에서 브라우저로의 “직접” 연결을 원치 않는 네트워크 인프라와 관련이 있습니다.
TURN 서버는 Signaling Server와 최종 사용자의 브라우저 사이를 중계합니다.

WebRTC(Web Real-Time Communication)에서 STUN(Server Traversal Utilities for NAT)을 사용하는 주요 이유는 NAT(네트워크 주소 변환)과 방화벽을 통과하여 Peer-to-Peer(P2P) 연결을 설정합니다.

서버 시작

Turn server for Exnernal Connection window TURN 서버 설정 방법

PowerShell 창에서 관리자 권한으로 아래의 스크립트를 실행하면 coturn이라는 오픈 소스 TURN 서버가 설치되고 실행됩니다.

이 단계에서는 Unreal Engine 애플리케이션과 클라이언트 브라우저 간의 P2P 연결을 설정하는 데 도움이 되는 웹 서비스를 시작하게 됩니다.

다음 단계에서는 Windows를 사용하고 있다고 가정합니다. 그러나 Linux는 대신 SignallingWebServer\platform_scripts\cmd\bash 폴더에서 스크립트를 실행한다는 점을 제외하면 동일한 프로세스입니다.

  1. Unreal Engine github 폴더 다운을 받고 Signaling Server의 위치를 ​​찾으세요
  2. 시그널링 서버를 준비하려면 관리자 권한으로 PowerShell을 열고 SignallingWebServer\platform_scripts\cmd\setup.ps1. 그러면 필요한 모든 종속성이 설치됩니다.
  3. 다음을 실행하여 시그널링 서버를 시작합니다 SignallingWebServer\platform_scripts\cmd\Start_SignallingServer.ps1. 서버가 시작되고 연결을 수락할 준비가 되면 콘솔 창에 다음 줄이 표시됩니다.WebSocket listening to Streamer connections on :8888 WebSocket listening to Players connections on :80 Http listening on *: 80
  4. 이제 이전 섹션에서 생성한 바로가기에서 Unreal Engine 애플리케이션을 시작하세요. 또는 명령줄에서 애플리케이션을 시작하려면 다음 명령을 실행하세요.MyPixelStreamingApplication.exe -PixelStreamingIP=127.0.0.1 -PixelStreamingPort=8888

편의를 위해 Unreal Engine 애플리케이션을 패키징할 때 이러한 서버는 패키징된 실행 파일이 포함된 폴더에도 복사됩니다. 위에 표시된 것과 동일한 경로의 Engine 하위 폴더 에서 찾을 수 있습니다 . Unreal Engine 설치 폴더에서 서버를 시작하는 대신 거기에서 서버를 시작할 수 있습니다.
그러나 이러한 폴더의 파일, 특히 시그널링 및 웹 서버의 플레이어 페이지나 구성 파일을 수정해야 하는 경우 원래 위치에서 수정해야 한다는 점을 기억하십시오. 패키지 폴더에서 수정하면 다음에 애플리케이션을 패키지할 때 변경 사항을 덮어쓸 수 있습니다.

기본 픽셀 스트리밍 배포의 일부로 Epic은 TURN 서버를 시작하는 데 필요한 참조 구현을 제공합니다. 패키지된 픽셀 스트리밍 빌드로 생성된 Samples 폴더 에는 여기에 표시된 것과 같은 다양한 스크립트가 있습니다. 저는 항상 Epic의 Pixel Streaming Infrastructure GitHub 에서 최신 버전을 다운로드하는 것을 권장합니다 .

픽셀 스트리밍 스크립트는 빌드의 Samples 폴더에 있습니다.

Turn server for Exnernal Connection window 시작하기 설명서를 따랐다면 아마도 Start_SignallingServer.ps1 스크립트를 실행했을 것입니다 . TURN 서버를 가동하고 실행하려면 관리자 권한으로 Powershell 창에서 Start_WithTURN_SignallingServer.ps1을 실행하기만 하면 됩니다. 모든 것이 순조롭게 진행되면 오픈 소스 TURN 서버 “coturn”의 복사본을 새 폴더에 다운로드하고 해당 인스턴스를 실행합니다. Coturn을 다시 시작하거나 시그널링 서버가 아닌 별도의 컴퓨터에서 사용하려면 관리자 권한으로 Powershell 창을 열고 Start_TURNServer.ps1 스크립트를 실행하세요.참고: 시그널링 서버와 통신하려면 TCP 및 UDP 트래픽용 포트 19303을 열어야 합니다.

TURN 작동 확인 방법
Chrome과 Firefox에서 WebRTC 연결 정보를 통해 TURN 서버가 제대로 작동하는지 확인할 수 있습니다.

TURN이 작동하는지 확인하는 방법

픽셀 스트리밍 앱에 연결하는 데 문제가 없었다면 TURN 서버가 문제를 해결하고 있는지 알기가 어렵습니다. 이전에 연결할 수 없었고 이제 모든 것이 작동하는 장치나 동료를 얻을 수 있기를 바랍니다. 이 자습서의 테스트 사례에는 회사 사무실에서 액세스할 수 없는 Azure에서 실행되는 픽셀 스트리밍 앱이 있습니다. 큰 재생 아이콘을 누르면 아무 것도 로드되지 않습니다. 자신의 앱을 개인적으로 볼 수 있는지 여부에 관계없이 아래 단계를 통해 TURN 서버가 작동하고 연결 문제가 있는 사용자가 사용할 수 있는지 확인할 수 있습니다.

크롬

Google Chrome에서는 한 탭에서 픽셀 스트리밍 페이지를 계속 실행하고 다음 주소로 다른 탭을 엽니다: chrome://webrtc-internals/

픽셀 스트리밍 탭을 나타내는 색상이 지정된 텍스트 블록이 있으며 이미 선택되어 있어야 합니다. 페이지 본문에는 ” ICE 후보 그리드 “라는 단어 옆에 검은색 삼각형이 있습니다. WebRTC 연결에 대한 정보 테이블을 드롭다운하려면 클릭하세요.

Chrome은 WebRTC 연결을 위한 ICE 후보 목록을 표시합니다.

아래 스크린샷은 우리 스트림에 대한 연결 후보를 보여주며, 우리가 찾고 있는 가장 중요한 부분은 ” 프로토콜 / 후보 유형 ” 이라고 적힌 열입니다 . TURN 서버가 없으면 픽셀 스트리밍 솔루션은 공용 STUN 서버를 사용하며 해당 연결은 목록에 ” srflx “(서버 재귀) 로 표시됩니다 . 이는 아마도 “호스트”뿐만 아니라 가능한 후보자 목록에도 항상 표시될 것입니다. 운이 좋은 일부 사용자에게는 이 연결 유형이 완벽하게 작동하지만 다른 사용자에게는 전혀 작동하지 않습니다. 제 경우에는 UE 앱을 예상했던 곳에 검은색 빈 화면이 있었고 여기서는 해당 연결 상태가 “진행 중”으로 표시되어 있었습니다.

Chrome은 테이블을 후보로 확장하고 "srflx"와 "host"만 표시합니다.

VM에서 TURN 서버와 함께 시그널링 서버를 다시 시작하고 로컬 웹페이지를 새로 고쳤습니다. 이번에는 ” 릴레이 ” 유형의 후보를 볼 수 있으며 성공적인 연결은 “prflx”(피어 반사) 유형입니다. “릴레이” 유형의 연결은 TURN 서버가 있는 경우에만 표시됩니다. “릴레이”가 최종적으로 “성공한” 연결은 아니지만, 이 경우 픽셀 스트리밍 앱이 제한된 IT 조건에서 즉시 작동할 수 있게 해주었습니다. 후보 목록에 “릴레이”가 표시되지 않으면 TURN 서버를 디버깅하고 실행 중인지 확인하고 시그널링 서버가 이를 가리키는지 확인해야 합니다.

TURN 서버를 시작하면 "릴레이" 후보가 나타납니다.

파이어폭스

Firefox에서는 한 탭에서 픽셀 스트리밍 페이지를 계속 실행하고 다음 주소로 다른 탭을 엽니다: about:webrtc

픽셀 스트리밍 탭과 관련된 세션 통계 모듈이 있습니다 . “세부정보 표시”를 클릭하세요.

참고: 실제로 WebRTC 연결이 있는 경우에만 여기에 정보가 있습니다. 내 경우에는 픽셀 스트리밍 페이지에서 ‘시작하려면 클릭’을 클릭해도 Chrome에서 발생한 것과는 달리 아무 일도 일어나지 않았습니다. 이 디버깅의 나머지 부분은 브라우저가 실제로 연결할 수 있는 경우에만 수행할 수 있습니다.

Firefox는 모든 WebRTC 세션에 대한 세부 정보를 표시합니다

연결 후보 목록을 표시하는 테이블이 확장됩니다. “릴레이” 후보가 표시되지 않으면 TURN 서버가 작동하지 않는 것입니다. TURN 서버가 없으면 “srflx” 및 “host” 유형의 후보만 볼 가능성이 높습니다. 이것은 일부 사람들에게는 완벽하게 작동하지만 다른 사람들에게는 전혀 작동하지 않습니다. 내 경우에는 TURN 서버를 켜면 최종 연결 유형이 “prflx” / “srflx”인 경우에도 제한적인 IT 조건에서 브라우저가 연결할 수 있었습니다.

prflx 유형의 Firefox 연결(피어 반사)

"릴레이" 유형의 Firefox 연결 후보

요약하자면

픽셀 스트리밍 배포에서 흔히 건너뛰는 단계인 TURN 서버 설정은 로컬 네트워크 외부에서 애플리케이션을 공유할 때 필수입니다. 귀하 또는 다른 사람이 스트림에 액세스하는 데 문제가 있는 경우 먼저 UE 앱이 실제로 실행되고 있는지 확인한 다음 즉시 WebRTC ICE 후보 간의 “릴레이”를 확인하세요.

Turn server for Exnernal Connection window 여기서 다루는 주제에 대한 자세한 내용을 보려면 이 페이지 끝에 있는 링크를 검토하세요.

보너스 팁

기본 픽셀 스트리밍 웹페이지의 설정 메뉴에는 “Force TURN” 옵션이 있습니다. 페이지 URL에 ” /?ForceTURN=true “를 추가하여 이 작업을 수행할 수도 있습니다 . UE 4.27 이하의 픽셀 스트리밍 인프라를 사용하는 경우 이 옵션이 표시되지 않거나 작동하지 않을 수 있습니다. TURN 서버의 릴레이 후보를 사용하도록 스트림을 강제하는 것은 TURN 서버가 작동하는지 확인하는 가장 좋은 방법은 아니지만 해당 스트림의 품질을 확인하는 좋은 방법입니다. 옵션을 사용할 수 있습니다.

기본 웹페이지에서 강제 TURN 옵션

이 coturn 구현의 대안

스트리밍된 앱과 시그널링 서버의 자체 인스턴스를 실행하는 각 시스템은 데이터를 중계하기 위한 자체 서버를 가질 수도 있습니다. TURN의 컴퓨팅 비용은 상대적으로 낮으며 대역폭 요구 사항은 대부분 동일합니다. 또한 하나 이상의 머신을 coturn 실행 전용으로 지정할 수도 있으며 모든 인스턴스가 이를 통해 릴레이하도록 지정할 수도 있습니다. 이렇게 하려면 대역폭 제약 조건을 이해해야 합니다. Coturn은 이론적으로 수백 또는 수천 개의 연결을 처리할 수 있지만 수십 개의 고품질 10mbps 스트림을 전송하면 각 인스턴스에 사용 가능한 업로드 대역폭이 빠르게 최대화됩니다. 

대규모 배포의 경우 전문적인 TURN 서비스를 고려할 수 있습니다. 시그널링 서버가 공급자의 IP 주소 하나를 통해 릴레이하도록 지정할 수 있으며 모든 추가 확장성과 재라우팅 인프라가 자동으로 처리됩니다. 개인적인 경험이나 선호 사항 없이 이러한 종류의 서비스를 제공하는 회사의 몇 가지 예는 다음과 같습니다.

픽셀 스트리밍 배포에서 자주 누락되는 단계인 TURN 서버 설정은 지역 네트워크 외부에서 애플리케이션을 공유할 때 필수적입니다.
대규모 배포의 경우 전문 TURN 서비스를 고려할 수 있으며, 예로 XIRSYS와 Twilio가 있습니다.

여전히 문제가 있습니까?

Turn server for Exnernal Connection window 앱이 실행 중이고 TURN 서버가 릴레이 중이지만 귀하 또는 다른 사람이 스트림에 액세스할 수 없는 경우 연결을 차단할 수 있는 다른 IT 문제가 많이 있습니다. 안타깝게도 이러한 문제를 디버깅하는 것은 이 문서의 범위를 벗어나므로 시스템 관리자에게 문의하여 잠재적인 네트워크 제한 사항을 조사해야 합니다. 고려해야 할 일부 주제는 다음을 포함하지만 이에 국한되지는 않습니다.

추가 팁
기본 픽셀 스트리밍 웹 페이지의 설정 메뉴에서 TURN을 강제로 사용할 수 있으며, 대규모 배포의 경우 전문 TURN 서비스를 고려할 수 있습니다.

문제 해결
Turn server for Exnernal Connection window 여전히 문제가 발생한다면, 외부 IP 주소의 자원 액세스 허용, 비HTTPS 웹 페이지의 사용 허용, 기본 방화벽 설정, Deep Packet Inspection (DPI) 등과 같은 다른 IT 문제가 연결을 차단할 수 있으므로 시스템 관리자에게 문의해야 할 수 있습니다. 이 문서는 Unreal Engine의 픽셀 스트리밍 기능을 사용하려는 개발자나 IT 전문가를 대상으로 하며, TURN 서버의 중요성과 설정 방법에 대해 설명하고 있습니다.

  • 외부 IP 주소의 리소스 액세스 허용 목록
  • HTTPS가 아닌 웹페이지 사용 허용
  • PC, VM, 네트워크 보안 그룹, 회사 네트워크의 기본 방화벽 설정입니다. (기본값은 80, 443, 8888, 19303 포트입니다)
  • DPI(심층 패킷 검사) 또는 기타 IT 규칙으로 인해 WebRTC 연결이 완전히 차단될 수 있습니다.

Turn server for Exnernal Connection window에 대해 알아 보았습니다.

댓글 남기기