Захват экрана (C#)
От: the_Wizzard Украина  
Дата: 07.06.05 17:01
Оценка:
Вот решил сделать свой ремот контроллер. Возник вопрос: А как RAdmin так быстро экран получает? У меня получается на WinAPI максимум 2-5 FPS 1024*768, и проц 100% загружен. Кто-нибудь умеет быстрее? На форуме ничего не нашел, в Google тоже (Писать дрова не предлагать, знаю что 2.2 только под WinNT юзается дровами)
Signature Deleted, 4 GB limit exceeded
Re: Захват экрана (C#)
От: dibil  
Дата: 08.06.05 04:47
Оценка:
Здравствуйте, the_Wizzard, Вы писали:

_W>Вот решил сделать свой ремот контроллер. Возник вопрос: А как RAdmin так быстро экран получает? У меня получается на WinAPI максимум 2-5 FPS 1024*768, и проц 100% загружен. Кто-нибудь умеет быстрее? На форуме ничего не нашел, в Google тоже (Писать дрова не предлагать, знаю что 2.2 только под WinNT юзается дровами)


Думаю, что
1. Надо программно уменьшать кол-во передаваемых цветов.
2. Передавать черезстрочно — т.е. в один заход полэкрана через строчно, а потом вторые.
3. Ну и естественно надо архивировать данные для передачи
Re: Захват экрана (C#)
От: ihatelogins  
Дата: 08.06.05 15:09
Оценка:
Здравствуйте, the_Wizzard, Вы писали:

_W>Вот решил сделать свой ремот контроллер. Возник вопрос: А как RAdmin так быстро экран получает? У меня получается на WinAPI максимум 2-5 FPS 1024*768, и проц 100% загружен. Кто-нибудь умеет быстрее? На форуме ничего не нашел, в Google тоже (Писать дрова не предлагать, знаю что 2.2 только под WinNT юзается дровами)


Вероятно, Вы используете JPG для передачи экранов. Используйте GIF — он _сильно_ быстрее.
Re: Захват экрана (C#)
От: Аноним  
Дата: 08.06.05 20:52
Оценка:
Здравствуйте, the_Wizzard, Вы писали:

_W>Вот решил сделать свой ремот контроллер. Возник вопрос: А как RAdmin так быстро экран получает? У меня получается на WinAPI максимум 2-5 FPS 1024*768, и проц 100% загружен. Кто-нибудь умеет быстрее? На форуме ничего не нашел, в Google тоже (Писать дрова не предлагать, знаю что 2.2 только под WinNT юзается дровами)


Честно говоря я ни думаю что кто то получает "экран". Скорее всего подменяется HDC который копирует операции на удалённый компьютер. При этом возможные бенефиты те что можно HBITMAP кэшировать. То есть один раз передал HBITMAP вместе с самой картинкой на удаленный комп а затем все операции с этим HBITMAP совершаются удаленно.


Это все моя теория. Но думаю что она более правдоподобна чем посылать скриншоты каждую секунду.

George.
Re[2]: Захват экрана (C#)
От: Аноним  
Дата: 08.06.05 21:07
Оценка:
Здравствуйте, dibil, Вы писали:

_W>>Вот решил сделать свой ремот контроллер. Возник вопрос: А как RAdmin так быстро экран получает?


D>Думаю, что

D>1. Надо программно уменьшать кол-во передаваемых цветов.
D>2. Передавать черезстрочно — т.е. в один заход полэкрана через строчно, а потом вторые.
D>3. Ну и естественно надо архивировать данные для передачи

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

Соответственно, вопрос стоит так: Каким образом быстро определить изменения картинки на экране и выделить эту область для копирования и передачи?
Re[2]: Захват экрана (C#)
От: Аноним  
Дата: 08.06.05 21:12
Оценка:
Здравствуйте, ihatelogins, Вы писали:

I>Вероятно, Вы используете JPG для передачи экранов. Используйте GIF — он _сильно_ быстрее.


Действительно, сейчас для передачи экрана используется JPG. Но:
1) Получение экрана занимает больше времени чем кодирование в JPEG
2) GIF это, конечно, хорошо, но в силу специфики передаваемых данных их нельзя адекватно представить и хорошо сжать, используя 256 цветов (Собственно, это стало причиной отказа от RAdmin'a)
Re[2]: Захват экрана (C#)
От: Аноним  
Дата: 08.06.05 21:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Честно говоря я ни думаю что кто то получает "экран". Скорее всего подменяется HDC который копирует операции на удалённый компьютер. При этом возможные бенефиты те что можно HBITMAP кэшировать. То есть один раз передал HBITMAP вместе с самой картинкой на удаленный комп а затем все операции с этим HBITMAP совершаются удаленно.


А>Это все моя теория. Но думаю что она более правдоподобна чем посылать скриншоты каждую секунду.


Вы знаете, ИМХО вы ближе всех к истине Ну а как поступать, если, например, на удаленной машине Photoshop или еще что в том же духе?
Re: Захват экрана (C#)
От: the_Wizzard Украина  
Дата: 08.06.05 21:31
Оценка:
[Offtopic]
Забыл влогиниться....
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Signature Deleted, 4 GB limit exceeded
Re: Захват экрана (C#)
От: ZayatsZ Россия  
Дата: 09.06.05 06:14
Оценка:
Здравствуйте, the_Wizzard, Вы писали:

_W>Вот решил сделать свой ремот контроллер. Возник вопрос: А как RAdmin так быстро экран получает? У меня получается на WinAPI максимум 2-5 FPS 1024*768, и проц 100% загружен. Кто-нибудь умеет быстрее? На форуме ничего не нашел, в Google тоже (Писать дрова не предлагать, знаю что 2.2 только под WinNT юзается дровами)


http://www.radmin.com/ru/radmin/ability.php

...Radmin Server использует драйвер видео-перехвата, что повышает его производительность в десятки раз. Это позволяет работать на удаленном компьютере с потрясающей скоростью (сотни обновлений экрана в секунду).


может это он GDI перехватывает?
... << RSDN@Home 1.1.4 beta 7 rev. 462>>
Re: Захват экрана (C#)
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 12.06.05 08:02
Оценка:
Здравствуйте, the_Wizzard, Вы писали:

_W>Вот решил сделать свой ремот контроллер. Возник вопрос: А как RAdmin так быстро экран получает? У меня получается на WinAPI максимум 2-5 FPS 1024*768, и проц 100% загружен. Кто-нибудь умеет быстрее? На форуме ничего не нашел, в Google тоже (Писать дрова не предлагать, знаю что 2.2 только под WinNT юзается дровами)


Без Mirror драйвера, ты никак скорость не увеличишь, т.к. слишком уж узок канал на шине в обратном направлении, и корость в десятки раз меньше чем в прямом.
Re[2]: Захват экрана (C#)
От: the_Wizzard Украина  
Дата: 12.06.05 09:35
Оценка:
Здравствуйте, AcidTheProgrammer, Вы писали:

ATP>Без Mirror драйвера, ты никак скорость не увеличишь, т.к. слишком уж узок канал на шине в обратном направлении, и корость в десятки раз меньше чем в прямом.

Это я и сам знаю. Но подозреваю что есть какой-то backbuffer не только в видяхе, но и в RAM. Или я неправ?

http://www.codeproject.com/dialog/screencap.asp
Может это попробовать? Счас попробую на шарпе DirectX-часть реализовать
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Signature Deleted, 4 GB limit exceeded
Re[3]: Захват экрана (C#)
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 13.06.05 07:26
Оценка:
Здравствуйте, the_Wizzard, Вы писали:

_W>Здравствуйте, AcidTheProgrammer, Вы писали:


ATP>>Без Mirror драйвера, ты никак скорость не увеличишь, т.к. слишком уж узок канал на шине в обратном направлении, и корость в десятки раз меньше чем в прямом.

_W>Это я и сам знаю. Но подозреваю что есть какой-то backbuffer не только в видяхе, но и в RAM. Или я неправ?

Только если ты его сам организуешь, и напишешь в виде Mirror драйвера.
Re[4]: Захват экрана (C#)
От: the_Wizzard Украина  
Дата: 13.06.05 21:03
Оценка:
Здравствуйте, AcidTheProgrammer, Вы писали:

_W>>Это я и сам знаю. Но подозреваю что есть какой-то backbuffer не только в видяхе, но и в RAM. Или я неправ?


ATP>Только если ты его сам организуешь, и напишешь в виде Mirror драйвера.


Дрова никогда не писал. И на данный момент не собираюсь. Писал в первом посте ,
что ищу способ быстро получить скрин без дров.... Кстати, еще вроде можно через
DirectShow API... Вот только как?
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Signature Deleted, 4 GB limit exceeded
Re[5]: Захват экрана (C#)
От: j.smith  
Дата: 13.06.05 21:16
Оценка:
the_Wizzard wrote:

> Кстати, еще вроде можно через DirectShow API... Вот только как?


Откуда сведения?
Posted via RSDN NNTP Server 1.9
Re[5]: Захват экрана (C#)
От: AcidTheProgrammer Россия https://hts.tv/
Дата: 15.06.05 12:06
Оценка:
Здравствуйте, the_Wizzard, Вы писали:

_W>Здравствуйте, AcidTheProgrammer, Вы писали:


_W>>>Это я и сам знаю. Но подозреваю что есть какой-то backbuffer не только в видяхе, но и в RAM. Или я неправ?


ATP>>Только если ты его сам организуешь, и напишешь в виде Mirror драйвера.


_W>Дрова никогда не писал. И на данный момент не собираюсь. Писал в первом посте ,

_W>что ищу способ быстро получить скрин без дров.... Кстати, еще вроде можно через
_W>DirectShow API... Вот только как?

Во первых нельзя, т.к DirectShow это вообще прикладной уровень, и он сам пользуеся остальным DirectX.
Во воторых давайте рассуждать:
1. GDI к формируемому буферу кадра в оперативнеой памяти сам доступа не дает, это вам скажет кто угодно, можете весь MSDN перелапатить — это так.
2. Значит нужно взять самому — вопрос как:
а. С экрана — пресылка из видеопамяти в оперативку в общем случае очень тормозная операция, и вы в это с сами убедились
б. Из оперативки, где GDI все это хозяйство формирует, что бы потом выводить на экран — но функции рисования и буффер работают/находятся в режиме ядра, а мы в пользовательском режиме. Следовательно нужно писать драйвер, т.к. только такой код может получить доступ к памяти режима ядра.
с. Воспользоваться готовым — стандартного такого нет, сотри п.1, следовательно сторонним.
Re[6]: Захват экрана (C#)
От: the_Wizzard Украина  
Дата: 16.06.05 18:58
Оценка:
Здравствуйте, j.smith, Вы писали:

JS>the_Wizzard wrote:


>> Кстати, еще вроде можно через DirectShow API... Вот только как?


JS>Откуда сведения?


http://www.codeproject.com/dialog/screencap.asp
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Signature Deleted, 4 GB limit exceeded
Re[7]: Захват экрана (C#)
От: j.smith  
Дата: 16.06.05 19:40
Оценка:
the_Wizzard wrote:
>
> Здравствуйте, j.smith, Вы писали:
>
> JS>the_Wizzard wrote:
>
>> > Кстати, еще вроде можно через DirectShow API... Вот только как?
>
> JS>Откуда сведения?
>
> http://www.codeproject.com/dialog/screencap.asp

Что-то там ни слова о DirectShow нет.

А вот использование WindowsMedia SDK это идея (и только индусу может
прийти в голову пользоваться танками для отстрела тараканов).
WindowsMedia SDK должен уметь делать очень быстрый захват. Надо будет
как-нить RE сделать..
Posted via RSDN NNTP Server 1.9
Re[8]: Захват экрана (C#)
От: the_Wizzard Украина  
Дата: 16.06.05 21:42
Оценка:
Здравствуйте, j.smith, Вы писали:

JS>Что-то там ни слова о DirectShow нет.

Ой... Ну... Тада поясните чайнику отличие между DirectShow и WindowsMedia

JS>А вот использование WindowsMedia SDK это идея (и только индусу может

JS>прийти в голову пользоваться танками для отстрела тараканов).
JS>WindowsMedia SDK должен уметь делать очень быстрый захват. Надо будет
JS>как-нить RE сделать..
Если кто-то натолкнет на доки по теории работы всей этой системы (аля учебники), буду очень признателен
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Signature Deleted, 4 GB limit exceeded
Re[9]: Захват экрана (C#)
От: j.smith  
Дата: 16.06.05 22:34
Оценка:
the_Wizzard wrote:
>
> Здравствуйте, j.smith, Вы писали:
>
> JS>Что-то там ни слова о DirectShow нет.
> Ой... Ну... Тада поясните чайнику отличие между DirectShow и WindowsMedia

А самому почитать доки? Или в чтении тоже чайник?

> JS>А вот использование WindowsMedia SDK это идея (и только индусу может

> JS>прийти в голову пользоваться танками для отстрела тараканов).
> JS>WindowsMedia SDK должен уметь делать очень быстрый захват. Надо будет
> JS>как-нить RE сделать..
> Если кто-то натолкнет на доки по теории работы всей этой системы (аля
> учебники), буду очень признателен

По теории работы какой системы?
Posted via RSDN NNTP Server 1.9
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.