Russian Qt Forum
Ноябрь 22, 2024, 22:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Перехват видеоПотока с карточки  (Прочитано 10265 раз)
Bepec
Гость
« : Май 04, 2012, 15:44 »

Приветствую всех.

Как и многие программисты, озадачился проблемой "помоги мне, а то у меня что-то не бачит" и "дома лежит файл, надо бы его достать".

Попробовал многие программы удалённого рабочего стола - очень непонравилось - задержка 300-400 мс стабильно.

Потому вопрос: Как можно перехватывать видеопоток напрямую с видеопамяти?

Пока набрёл на варианты аля:
1) Video Merror Driver микрософта - много пишут, примеров мало, в общем стандартный микрософтовский апи.
2) directX - пока мало искал, но вроде тормознутее того же пункта 1.
3) Вроде есть библиотеки, перехватывающие данные напрямую из видеопамяти. Но большинство из них забугорные и платные(точнее почти все).

Предлагайте варианты, делитесь опытом. Цель собственно написать лёгкий, клиент серверный пакетик, который будет использовать минимальный функционал(посмотреть экран в низком качестве, передать маркер(аля курсор)).
Записан
V1KT0P
Гость
« Ответ #1 : Май 04, 2012, 15:50 »

Предлагайте варианты, делитесь опытом. Цель собственно написать лёгкий, клиент серверный пакетик, который будет использовать минимальный функционал(посмотреть экран в низком качестве, передать маркер(аля курсор)).
TightVNC тоже не подходит? Если да, то почему бы не взять и не переписать ту часть что не нравится. Ведь подправить готовое проще, чем писать новое.
Записан
Bepec
Гость
« Ответ #2 : Май 04, 2012, 15:53 »

Собственно его я пробовал минуты 2 назад Подмигивающий Задержка примерно 250-280 мс не устроила, на минимальном качестве отображения Подмигивающий

Слишком много надо править. Десятой доли его функционала мне уже много Подмигивающий

Хотя идея конечно хорошая, но изучить низкий уровень тоже охота. Как то драйвера/видеопамять и прочее.
Записан
alexis031182
Гость
« Ответ #3 : Май 04, 2012, 15:55 »

На Linux XVideo позволяет работать напрямую с видеопамятью.
Записан
V1KT0P
Гость
« Ответ #4 : Май 04, 2012, 16:07 »

Собственно его я пробовал минуты 2 назад Подмигивающий Задержка примерно 250-280 мс не устроила, на минимальном качестве отображения Подмигивающий

Слишком много надо править. Десятой доли его функционала мне уже много Подмигивающий

Хотя идея конечно хорошая, но изучить низкий уровень тоже охота. Как то драйвера/видеопамять и прочее.
Под винду еще глянь CamStudio: http://sourceforge.net/projects/camstudio/. Так как он сделан для записи видео и при этом неплохо успевает не только грабить видео но и кодировать его, то проще всего от-туда выдернуть нужную функцию.
Записан
Bepec
Гость
« Ответ #5 : Май 04, 2012, 17:18 »

Благодарю, гляну... После праздников Подмигивающий C Наступающим всех Подмигивающий

Если будут ещё намётки/направления/взгляды, прошу.

Записан
Bepec
Гость
« Ответ #6 : Май 16, 2012, 14:44 »

Посмотрел - всё в общем то печально. Везде используется простой BitBlt, который собственно пасует перед всеми директиксами и прочим.

Скорость то вполне возможно догнать до 10 фреймов в секунду, но толку то.

Печально. Неужто реально нет дров/библиотек для прямого перехвата видеопотока под виндолз?
Записан
alexis031182
Гость
« Ответ #7 : Май 16, 2012, 14:49 »

А дирексикс SDK разве не предоставляет таких возможностей? Я просто не в курсе и любопытно.
Записан
Bepec
Гость
« Ответ #8 : Май 16, 2012, 14:56 »

Да я вот тоже не в курсе. Пытался гуглить - везде отпинывают на BitBlt, типа он хороший.

С вебки - сотни способов. С платой видеозахвата - пара способов. Просто перехватить видеопоток - 0 ссылок блин Подмигивающий

PS Слышат где то, что через драйверы можно, но тут казус - Задал вопрос на одном форуме про "драйвер, с которого можно снимать видеопоток", как меня забанили за обсуждение уязвимостей Веселый
Записан
alexis031182
Гость
« Ответ #9 : Май 16, 2012, 15:07 »

Тоже вот нашёл:
Цитировать
Hei Gurus
How can I access Video Buffer using DirectX . I want read data from Video buffer.

Цитировать
there is no way to access it directly.

IMHO, I'm not directx expert, but i think you should create a surface to access the video framebuffer.

Read the DirectX documentation in the full MSDN or download the DX8.1 or DX9 SDK. It's very good documentation..... you must know a good C/C++...
Записан
alexis031182
Гость
« Ответ #10 : Май 16, 2012, 15:09 »

Тогда если через "поверхность", то может быть вот так:
Код:
LPDIRECT3DSURFACE8 lpBackSurface = NULL;
if (FAILED(m_pDevice->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &lpBackSurface))) {}

D3DLOCKED_RECT LockedRect;
if (FAILED(lpBackSurface->LockRect(&LockedRect, NULL, D3DLOCK_READONLY))) {}

LPBYTE lpSrc = reinterpret_cast<LPBYTE>(LockedRect.pBits);
LPBYTE lpDest = new BYTE[SCREEN_SIZE];

memcpy(lpDest, lpSrc, SCREEN_SIZE);
Записан
Bepec
Гость
« Ответ #11 : Май 16, 2012, 15:11 »

C директом дела не имел, смотрю пока как на новые ворота Подмигивающий

Вопрос - оно работает? Если работает, то какова частота обновления максимальная?
Записан
alexis031182
Гость
« Ответ #12 : Май 16, 2012, 15:18 »

C директом дела не имел, смотрю пока как на новые ворота Подмигивающий
Мне приходилось, но очень давно. Однако впечатления от работы с ним остались тёплые Улыбающийся очень хорошая документация, множество примеров. Я больше по теме DirectShow, а не Direct3D работал

Вопрос - оно работает? Если работает, то какова частота обновления максимальная?
Нет, нет, это не мой код. Выдрал с какого-то буржуйского сайта (там что-то аналогичное Вашей теме обсуждается), поэтому ничего не могу сказать ни о скорости, ни о том, заведётся ли вообще Улыбающийся Впрочем, сам думаю, что код рабочий. И точно, что директиксу GDI и в подмётки по скорости не сгодится
Записан
alexis031182
Гость
« Ответ #13 : Май 16, 2012, 15:26 »

Вот ещё тут анонсировали недавно: http://www.mikogo.ru/ Сам не пробовал, но может и подойдёт
Записан
V1KT0P
Гость
« Ответ #14 : Май 16, 2012, 16:52 »

Да я вот тоже не в курсе. Пытался гуглить - везде отпинывают на BitBlt, типа он хороший.

С вебки - сотни способов. С платой видеозахвата - пара способов. Просто перехватить видеопоток - 0 ссылок блин Подмигивающий

PS Слышат где то, что через драйверы можно, но тут казус - Задал вопрос на одном форуме про "драйвер, с которого можно снимать видеопоток", как меня забанили за обсуждение уязвимостей Веселый
Вот есть какая-то статья про получение снимков(Там три разных варианта с исходниками): http://www.codeproject.com/Articles/5051/Various-methods-for-capturing-the-screen.
Если тебе надо "тырить" шифрованный видеопоток, то смотри в торону перехвата функций DirectX. Ибо в большинстве случаев именно через него проигрывают видео. Можно посмотреть какие функции использует fraps, может это даст подсказку куда копать.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 20.