2017-12-09 6 views
0

사용자가 webapp에서 자신의 PC를 제어하는 ​​원격 데스크톱 응용 프로그램을 만들려고합니다 (예 : logmein). 데스크탑 부분에서 C#을 사용하고 webapp에서 NodeJS를 사용하여 Socket.IO를 사용하여 통신했습니다.RTP 화면 스트리밍

첫 번째 시도는 스크린 샷 (단 5fps)을 캡쳐 한 다음 이전 스크린 샷과 비교하여 8 비트 이미지 색상의 차이 만 전송하여 800 * 600 해상도의 가상 데스크톱을 만들었습니다. 첫 번째 이미지를 입력 한 다음 화면의 변경 사항에 따라 5KB에서 60KB로 변경합니다.

가상 머신을 제어하는 ​​내 로컬 머신으로 모든 것이 완벽했지만 웹 애플리케이션을 온라인으로 호스팅했을 때 그 결과는 비극적이었고, 지연은 거의 일어나지 않았습니다.

몇 가지 조사가 끝난 후 이런 종류의 앱이 내 방식으로는 불가능했으며 클라이언트 화면에서 실시간 프로토콜을 사용하고 실시간 스트리밍을해야한다는 것을 알게되었습니다.

내 질문은 :

  • 어떤 자유/오픈 소스가되어 사용할 준비 RTP 라이브러리?

  • 열린 앱이없는 클라이언트 측에서 오는 라이브 앱 스트리밍을 데스크 앱에서 webapp로 전송하는 방법은 무엇입니까? 나는 서버에서 실행될 다른 데스크탑 응용 프로그램 (웹 응용 프로그램 호스팅)을 생각한 다음 동일한 내용을 다시 스트리밍 한 다음 webapp에서 RTP 포트를 사용하여 로컬 IP에 액세스하여 내용을 간단하게 표시 할 수 있습니다. 라이브 스트리밍을 클라이언트에서 서버로 전송하는 수수께끼를 해결하지 못합니까?

답변

1

바로 사용할 수있는 모든 자유/오픈 소스 RTP 라이브러리가 있습니까?

  • live555

    - 당신이 상호 운용성 할 것이다, 그래서 나는 ++ 사용 우수하지만, C했습니다.
  • gstreamer - interop을 필요로하는 네이티브.
  • Managed Media Aggregation 사용하지 않았지만 완전히 관리됩니다. 이 열려있는 포트가없는 클라이언트 측에서오고 있기 때문에-I는 것 웹 애플리케이션 에 책상 응용 프로그램에서 라이브 스트리밍을 전송하는 방법

? 나는 서버에서 실행될 다른 데스크톱 응용 프로그램 (웹 응용 프로그램 webapp 호스팅)을 생각한 다음 동일한 콘텐츠를 다시 스트리밍 한 다음 webapp는 로컬 IP 에 RTP를 사용하여 콘텐츠를 간단하게 표시 할 수 있습니다. 포트로 전송하지만 클라이언트에서 서버로 실시간 스트리밍을 전송하는 수수께끼는 해결되지 않습니까?

이것은 까다로울 수 있습니다. 위의 모든 라이브러리는 엄격한 RTSP/RTP 사양을 따르므로 호스트 측에서 수신 대기 포트를 열어야합니다. 이는 의심 할 바없이 nat'd 주소 뒤에 있습니다. 각 끝은 클라이언트이고 웹 서비스에 도달 할 것입니다.RTP (전통적으로 UDP를 통한)가 어려울 수 있도록 프레임 전달을 보장해야합니다 (전달 델타가 전달되기 때문에).

어떤 생각 RTP 단지 압축 된 미디어에 대한 표준화 된 12 바이트의 헤더와 패킷 규칙 하루의 끝에

. 대기 시간에 도움이되지 않습니다. 실질적인 이점은 VLC 클라이언트와 같이 표준을 준수하는 방식으로 엔드 포인트에 연결할 수 있다는 것입니다.

당신은 당신의 소켓을 조정할 수 있습니다.하지만 조금은 도움이 될 것입니다. 그러나 제가 솔직히 말해서 압축과 화면 캡처의 효율성에 중점을 둘 것입니다. 어떤 이미지 압축을 사용하고 있습니까? VNC는 전통적으로 zlib과 jpeg와 같이 손실이 많은 다른 것들을 사용했습니다. 그 프레임이 작을수록 좋습니다.

또 다른 생각은 도움이 될 수 있습니다 - Microsoft는 '더러운 화면 영역'을 가져 오는 API를 가지고 있습니다. Desktop Duplication API이라고하며 매우 빠른 성능을 보입니다. 그러나 Win8 이상입니다.

귀하의 모든 노력에 최선을 다하십시오!

+0

대단히 고맙습니다. 몇 가지 질문이 있습니다. sayd ** 나는 각 끝이 클라이언트이고 웹 서비스에 '올라갈 것'입니다. **, 당신은 클라이언트를 의미합니까? 웹 서비스에 도달하는 스크린 샷을 캡처합니까? 그래서 RTP가 없습니까? 그리고 코멘트의 두 번째 부분을 기반으로, RTP는 정말로 도움이되지 않습니다. 레이턴시에 관해서는 특별한 것이 없습니다. 맞습니까? 그래서 나는 현재의 방법을 고수하고 압축/스크린 샷에 집중할 것인가? (따라야 할) –

+0

현재 DPA는 Win7을 지원하지 않는다고 생각하고 수동으로 캡처하고 있습니다. zlib을 시도하고 압축하는 데 너무 많은 시간이 걸리므로 압축 방법을 사용하지 않고 있습니다. 나는 초고속 인 lz4net을 시도했지만 그 결과는별로 만족스럽지 않았습니다 (60kb 이미지는 50kb가됩니다). 어떻게 생각하십니까? –

+0

내 현재 스크린 샷 실행 시간이 ~ .05s입니다. 편집 : 현재 캡처 한 스크린 샷과 이전 스크린 샷의 차이를 확인하고 차이 비트 맵을 저장하는 전체 프로세스는 ~ .1 초 ~ .13 초까지 소요됩니다. 너무 많이 믿는다. 나는 DDA를 시도해 볼 것이다. –

관련 문제