2017-12-09 20 views
0

私は、ユーザーがwebappから(logmeinのように)自分のPCを制御するリモートデスクトップアプリケーションを作ろうとしています。 デスクトップ部分ではC#、WebアプリケーションではNodeJS、Socket.IOを使用して通信が行われました。C# - RTPスクリーンストリーミング

最初の試みはスクリーンショット(わずか5fps)をキャプチャしてから前回のスクリーンショットと比較し、8ビットのイメージカラーで差分を送信した結果、800 * 600解像度の仮想デスクトップ - 100kb最初の画像、次に画面上の変化に応じて5kbから60Kbになります。

バーチャルボックスを制御しているローカルマシンではすべてが完璧でしたが、私がオンラインでウェブアプリケーションをホストしたとき、結果は壊滅的でした。

いくつかの調査の結果、この種のアプリは私の方法では実現不可能であり、リアルタイムプロトコルを使用してクライアント画面からライブストリーミングを行わなければならないことが判明しました。

私の質問は以下のとおりです。

  • は、任意のフリー/オープンソースのRTPライブラリは、すぐに使用されることがありますか?

  • どのように私は開いているポートがないクライアント側から来ているので、デスクアプリからwebappにライブストリーミングを転送するのですか?私はサーバー上で動作する別のデスクトップアプリケーションを考えていました(webappをホストしています)。そして、同じコンテンツを再びストリームします。そして、webappは、RTPポートを使ってローカルIPにアクセスするだけでコンテンツを表示できます。ライブストリーミングをクライアントからサーバーに転送するという謎を解決していませんか?

答えて

1

すぐに使用される任意のフリー/オープンソースのRTPライブラリはありますか?

  • live555 - 私はあなたがInteropしなければならないので、使用して優れているが、C++ました。
  • gstreamer - interopを必要とするネイティブもあります。
  • Managed Media Aggregation私は使っていませんが、完全に管理されています。それは開いているポートを持たないクライアント側から来ていますので、-IはなりWebアプリケーション に机のアプリからライブストリーミングを転送する方法

?私は (webappを ウェブアプリケーションをホストしている)サーバー上で実行される別のデスクトップアプリケーションを考えていたのですが、同じコンテンツを再びストリームしてから webappはローカルIP にRTPで簡単にコンテンツを表示できますこれはクライアントからサーバへのライブストリーミングを転送するという謎を解決するものではありませんか?

これは難しいでしょう。上記のすべてのライブラリは厳密なRTSP/RTP仕様に従い、ホスト側でリスニングポートを開く必要がありますが、これは間違いなくNATアドレスの後ろにあることになります。私はそれぞれのクライアントがクライアントであり、ウェブサービスに「アップ」していることに固執します。また、RTP(これは伝統的にUDPを超えています)が困難になるようにフレームの配信を保証する必要があります(増分デルタを配信するため)。

いくつかの考え

一日の終わりにはRTPは、圧縮されたメディアのためだけで標準化された12バイトのヘッダーおよびパケットルールです。レイテンシに役立つことはありません。実際のメリットは、VLCクライアントのように、標準に準拠した方法でエンドポイントに接続できることです。

あなたはソケットを調整することができますが、それは少し助けになりますが、正直言って私が焦点を当てるのは、圧縮と画面キャプチャの効率です。どのような画像圧縮を使用していますか? VNCは伝統的にzlibとjpegのような損失のあるものを使用してきました。これらのフレームを小さくするほど良い結果が得られます。

また、もう1つの考えが役立つかもしれません。Microsoftには、「汚れた画面領域」を取得するためのAPIがあります。それはDesktop Duplication APIと呼ばれ、信じられないほど高速に実行されます。しかし、Win8以上です。

あなたのすべての努力に最高!

+0

ありがとうございます。あなたがsayd **のときに私はいくつかの質問があります。私は、クライアントであり、あなたのウェブサービスに "アップ"しています。**、あなたはクライアントですWebサービスに到達するスクリーンショットをキャプチャしますか?だからRTPはありませんか?コメントの2番目の部分に基づいて、RTPは本当に役立つものではありません。レイテンシーについては特別なことはありません。ですから、私は現在の方法に固執し、圧縮/スクリーンショットに焦点を当てていますか? (後に続く) –

+0

私はzlibを試して圧縮に時間がかかっていたため、DPAがWin7をサポートしていないと思っていたので、手動でスクリーンショットを撮っています。私は超高速だったlz4netを試しましたが、結果はあまり満足できませんでした(60kbイメージは50kbになります)、どう思いますか? –

+0

私の現在のスクリーンショットの実行時間は~05sです。 編集:画面をキャプチャし、現在のスクリーンショットと前のスクリーンショットの違いを確認し、差分ビットマップを保存する全プロセスは〜0.1秒〜.13秒です。 DDAを試してみてください –

関連する問題