рабочий стол простой просмотрщик - PullRequest
1 голос
/ 24 февраля 2012

Чтобы разработать приложение удаленного рабочего стола 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();
        }
    }

Это мой код вОтправка изображений на стороне сервера (ПК).

  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 в +/- реальном времени.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2012

Полагаю, вам не хватает пропускной способности.

Отправка полных несжатых изображений - ужасная идея, если вы спросите меня, в отношении пропускной способности.Одно изображение RGB32, 800x480, имеет размер приблизительно 1,15 мегабайта, поэтому для поддержания, скажем, 15 кадров в секунду, вам понадобится соединение 138 Мбит / с .на стороне сервера - отправлять только измененные прямоугольники, а затем отправлять их сжатыми.Один протокол, который уже делает это, - протокол RFB , наиболее широко используемый в VNC.

0 голосов
/ 24 февраля 2012

Вам нужно найти узкое место и ускорить его.Возможно, сеть работает недостаточно быстро.Ответом может быть сжатие.

Возможно, машина WP7 недостаточно быстра для показа изображений.Отправка частичных изображений на экране или более низкого разрешения может быть решением.

Возможно, Windows-машина просто недостаточно быстро захватывает изображения.Случайный выбор кода может быть решением.Использование частичных обновлений также может помочь.

Я бы выбрал решение, в котором при каждом обновлении я отправлял только один угол (верхний левый, верхний правый, нижний левый, нижний правый), поэтому весь стек приходилось отправлять / получатьболее мелкие капли данных.

Имейте в виду, что симулятор может добавить / удалить некоторые накладные расходы и показать нереалистичную производительность.Так что не оптимизируйте код для симулятора (слишком много)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...