Вот решил сделать свой ремот контроллер. Возник вопрос: А как RAdmin так быстро экран получает? У меня получается на WinAPI максимум 2-5 FPS 1024*768, и проц 100% загружен. Кто-нибудь умеет быстрее? На форуме ничего не нашел, в Google тоже (Писать дрова не предлагать, знаю что 2.2 только под WinNT юзается дровами)
Здравствуйте, the_Wizzard, Вы писали:
_W>Вот решил сделать свой ремот контроллер. Возник вопрос: А как RAdmin так быстро экран получает? У меня получается на WinAPI максимум 2-5 FPS 1024*768, и проц 100% загружен. Кто-нибудь умеет быстрее? На форуме ничего не нашел, в Google тоже (Писать дрова не предлагать, знаю что 2.2 только под WinNT юзается дровами)
Думаю, что
1. Надо программно уменьшать кол-во передаваемых цветов.
2. Передавать черезстрочно — т.е. в один заход полэкрана через строчно, а потом вторые.
3. Ну и естественно надо архивировать данные для передачи
Здравствуйте, 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 или еще что в том же духе?
Здравствуйте, the_Wizzard, Вы писали:
_W>Вот решил сделать свой ремот контроллер. Возник вопрос: А как RAdmin так быстро экран получает? У меня получается на WinAPI максимум 2-5 FPS 1024*768, и проц 100% загружен. Кто-нибудь умеет быстрее? На форуме ничего не нашел, в Google тоже (Писать дрова не предлагать, знаю что 2.2 только под WinNT юзается дровами)
...Radmin Server использует драйвер видео-перехвата, что повышает его производительность в десятки раз. Это позволяет работать на удаленном компьютере с потрясающей скоростью (сотни обновлений экрана в секунду).
Здравствуйте, the_Wizzard, Вы писали:
_W>Вот решил сделать свой ремот контроллер. Возник вопрос: А как RAdmin так быстро экран получает? У меня получается на WinAPI максимум 2-5 FPS 1024*768, и проц 100% загружен. Кто-нибудь умеет быстрее? На форуме ничего не нашел, в Google тоже (Писать дрова не предлагать, знаю что 2.2 только под WinNT юзается дровами)
Без Mirror драйвера, ты никак скорость не увеличишь, т.к. слишком уж узок канал на шине в обратном направлении, и корость в десятки раз меньше чем в прямом.
Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>Без Mirror драйвера, ты никак скорость не увеличишь, т.к. слишком уж узок канал на шине в обратном направлении, и корость в десятки раз меньше чем в прямом.
Это я и сам знаю. Но подозреваю что есть какой-то backbuffer не только в видяхе, но и в RAM. Или я неправ?
Здравствуйте, the_Wizzard, Вы писали:
_W>Здравствуйте, AcidTheProgrammer, Вы писали:
ATP>>Без Mirror драйвера, ты никак скорость не увеличишь, т.к. слишком уж узок канал на шине в обратном направлении, и корость в десятки раз меньше чем в прямом. _W>Это я и сам знаю. Но подозреваю что есть какой-то backbuffer не только в видяхе, но и в RAM. Или я неправ?
Только если ты его сам организуешь, и напишешь в виде Mirror драйвера.
Здравствуйте, AcidTheProgrammer, Вы писали:
_W>>Это я и сам знаю. Но подозреваю что есть какой-то backbuffer не только в видяхе, но и в RAM. Или я неправ?
ATP>Только если ты его сам организуешь, и напишешь в виде Mirror драйвера.
Дрова никогда не писал. И на данный момент не собираюсь. Писал в первом посте ,
что ищу способ быстро получить скрин без дров.... Кстати, еще вроде можно через
DirectShow API... Вот только как?
Здравствуйте, the_Wizzard, Вы писали:
_W>Здравствуйте, AcidTheProgrammer, Вы писали:
_W>>>Это я и сам знаю. Но подозреваю что есть какой-то backbuffer не только в видяхе, но и в RAM. Или я неправ?
ATP>>Только если ты его сам организуешь, и напишешь в виде Mirror драйвера.
_W>Дрова никогда не писал. И на данный момент не собираюсь. Писал в первом посте , _W>что ищу способ быстро получить скрин без дров.... Кстати, еще вроде можно через _W>DirectShow API... Вот только как?
Во первых нельзя, т.к DirectShow это вообще прикладной уровень, и он сам пользуеся остальным DirectX.
Во воторых давайте рассуждать:
1. GDI к формируемому буферу кадра в оперативнеой памяти сам доступа не дает, это вам скажет кто угодно, можете весь MSDN перелапатить — это так.
2. Значит нужно взять самому — вопрос как:
а. С экрана — пресылка из видеопамяти в оперативку в общем случае очень тормозная операция, и вы в это с сами убедились
б. Из оперативки, где GDI все это хозяйство формирует, что бы потом выводить на экран — но функции рисования и буффер работают/находятся в режиме ядра, а мы в пользовательском режиме. Следовательно нужно писать драйвер, т.к. только такой код может получить доступ к памяти режима ядра.
с. Воспользоваться готовым — стандартного такого нет, сотри п.1, следовательно сторонним.
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 сделать..
Здравствуйте, j.smith, Вы писали:
JS>Что-то там ни слова о DirectShow нет.
Ой... Ну... Тада поясните чайнику отличие между DirectShow и WindowsMedia
JS>А вот использование WindowsMedia SDK это идея (и только индусу может JS>прийти в голову пользоваться танками для отстрела тараканов). JS>WindowsMedia SDK должен уметь делать очень быстрый захват. Надо будет JS>как-нить RE сделать..
Если кто-то натолкнет на доки по теории работы всей этой системы (аля учебники), буду очень признателен
the_Wizzard wrote: > > Здравствуйте, j.smith, Вы писали: > > JS>Что-то там ни слова о DirectShow нет. > Ой... Ну... Тада поясните чайнику отличие между DirectShow и WindowsMedia
А самому почитать доки? Или в чтении тоже чайник?
> JS>А вот использование WindowsMedia SDK это идея (и только индусу может > JS>прийти в голову пользоваться танками для отстрела тараканов). > JS>WindowsMedia SDK должен уметь делать очень быстрый захват. Надо будет > JS>как-нить RE сделать.. > Если кто-то натолкнет на доки по теории работы всей этой системы (аля > учебники), буду очень признателен