2012-02-24 71 views
1

爲了開發應用程序遠程桌面WP7,我開始使用桌面簡單的查看器,它的工作原理,但沒有顯示我在服務器端做的所有操作的問題,這是YouTube中的視頻可以告訴我我的問題 http://www.youtube.com/watch?v=3q-FumfYsPQ&feature=youtu.be桌面簡單查看器

我使用套接字連接和解碼和編碼我的數據(圖像)。

這是我在WP7客戶端

void Conncet(string IP_Address) 
    { 

     client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
     SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs() 
     { 
      RemoteEndPoint = new IPEndPoint(IPAddress.Parse(IP_Address), 4532) 
     }; 
     socketEventArg.Completed += OnConncetCompleted; 
     client_socket.ConnectAsync(socketEventArg); 
    } 
    void StartReceiving() 
    { 
      byte[] response = new byte[131072]; 
      SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs(); 
      socketEventArg.Completed += OnReceiveCompleted; 
      socketEventArg.SetBuffer(response, 0, response.Length); 
      client_socket.ReceiveAsync(socketEventArg); 
    } 

    private void ViewReceivedImage(byte[] buffer) 
    { 
     try 
     { 
      MemoryStream ms = new MemoryStream(buffer); 
      BitmapImage bi = new BitmapImage(); 
      bi.SetSource(ms); 
      MyImage.Source = bi; 
      ms.Close(); 
     } 
     catch (Exception) { } 
     finally 
     { 
      StartReceiving(); 
     } 
    } 

這是我在服務器端代碼(PC)發送圖像的代碼。

void StartSending() 
    { 
     while (!stop) 

      try 
      { 
       Image oldimage = scr.Get_Resized_Image(wToCompare, hToCompare, scr.GetDesktopBitmapBytes()); 
       //Thread.Sleep(1); 
       Image newimage = scr.Get_Resized_Image(wToCompare, hToCompare, scr.GetDesktopBitmapBytes()); 

       byte[] buffer = scr.GetDesktop_ResizedBytes(wToSend, hToSend); 

       float difference = scr.difference(newimage, oldimage); 


       if (difference >= 1) 
       { 

        SenderSocket.Send(buffer); 
       } 


      } 
      catch (Exception) { } 
    } 

我的問題是如何使發送和接收速度快,顯示在+/-實時WP7的電腦屏幕。

回答

0

你必須找到什麼是瓶頸和加速。這可能是網絡運行速度不夠快。使用壓縮可能是答案。

這可能是因爲WP7機器速度不夠快而無法顯示圖像。發送部分屏幕圖像或較低的分辨率可能是一個解決方案。

這可能是Windows機器根本不能夠快速抓取圖像。爭取一些代碼可能是解決方案。使用部分更新也可能有所幫助。

我會去找一個解決方案,每次更新我只會發送一個角落(左上角,右上角,左下角,右下角),因此整個堆棧必須發送/接收更小的數據塊。

請注意,模擬器可能會添加/刪除一些開銷並顯示不切實際的性能。所以不要優化模擬器的代碼(太多)

+0

我會添加大量'日誌'代碼,以查看哪些步驟緩慢,哪些方面發生緩慢。這可能是目前情況下的瓶頸只是WP7設備不能足夠快地顯示圖像。 – CodingBarfield 2012-02-24 08:42:24

+0

這個問題我怎麼能加快? 我在機器中使用它,其結果是相同的2機器, 我也在不同的網絡中使用它,並讓我看到相同的視圖 – juste3alfaza 2012-02-24 09:24:14

0

我猜你已經沒有帶寬了。

發送完整的未壓縮圖像是一個可怕的想法,如果你問我,帶寬明智。單個RGB32,800x480圖像的大小約爲1.15 megs,因此要維持,比如15 FPS,您需要連接138 Mbit/s

我建議,在服務器端,只發送已更改的矩形,然後將它們發送壓縮。一個已經做到這一點的協議是RFB protocol,在VNC中最常用。

+0

關於只發送在舊圖像和新圖像之間改變的像素的想法是真的很好,但我怎麼只發送那個像素,而且他們在圖像中的位置,這是一個問題。 關於壓縮,我怎麼可以用圖像做到這一點? – juste3alfaza 2012-02-24 12:00:30