Russian Qt Forum

Разное => Говорилка => Тема начата: Bepec от Май 04, 2012, 15:44



Название: Перехват видеоПотока с карточки
Отправлено: Bepec от Май 04, 2012, 15:44
Приветствую всех.

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

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

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

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

Предлагайте варианты, делитесь опытом. Цель собственно написать лёгкий, клиент серверный пакетик, который будет использовать минимальный функционал(посмотреть экран в низком качестве, передать маркер(аля курсор)).


Название: Re: Перехват видеоПотока с карточки
Отправлено: V1KT0P от Май 04, 2012, 15:50
Предлагайте варианты, делитесь опытом. Цель собственно написать лёгкий, клиент серверный пакетик, который будет использовать минимальный функционал(посмотреть экран в низком качестве, передать маркер(аля курсор)).
TightVNC тоже не подходит? Если да, то почему бы не взять и не переписать ту часть что не нравится. Ведь подправить готовое проще, чем писать новое.


Название: Re: Перехват видеоПотока с карточки
Отправлено: Bepec от Май 04, 2012, 15:53
Собственно его я пробовал минуты 2 назад ;) Задержка примерно 250-280 мс не устроила, на минимальном качестве отображения ;)

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

Хотя идея конечно хорошая, но изучить низкий уровень тоже охота. Как то драйвера/видеопамять и прочее.


Название: Re: Перехват видеоПотока с карточки
Отправлено: alexis031182 от Май 04, 2012, 15:55
На Linux XVideo позволяет работать напрямую с видеопамятью.


Название: Re: Перехват видеоПотока с карточки
Отправлено: V1KT0P от Май 04, 2012, 16:07
Собственно его я пробовал минуты 2 назад ;) Задержка примерно 250-280 мс не устроила, на минимальном качестве отображения ;)

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

Хотя идея конечно хорошая, но изучить низкий уровень тоже охота. Как то драйвера/видеопамять и прочее.
Под винду еще глянь CamStudio: http://sourceforge.net/projects/camstudio/ (http://sourceforge.net/projects/camstudio/). Так как он сделан для записи видео и при этом неплохо успевает не только грабить видео но и кодировать его, то проще всего от-туда выдернуть нужную функцию.


Название: Re: Перехват видеоПотока с карточки
Отправлено: Bepec от Май 04, 2012, 17:18
Благодарю, гляну... После праздников ;) C Наступающим всех ;)

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



Название: Re: Перехват видеоПотока с карточки
Отправлено: Bepec от Май 16, 2012, 14:44
Посмотрел - всё в общем то печально. Везде используется простой BitBlt, который собственно пасует перед всеми директиксами и прочим.

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

Печально. Неужто реально нет дров/библиотек для прямого перехвата видеопотока под виндолз?


Название: Re: Перехват видеоПотока с карточки
Отправлено: alexis031182 от Май 16, 2012, 14:49
А дирексикс SDK разве не предоставляет таких возможностей? Я просто не в курсе и любопытно.


Название: Re: Перехват видеоПотока с карточки
Отправлено: Bepec от Май 16, 2012, 14:56
Да я вот тоже не в курсе. Пытался гуглить - везде отпинывают на BitBlt, типа он хороший.

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

PS Слышат где то, что через драйверы можно, но тут казус - Задал вопрос на одном форуме про "драйвер, с которого можно снимать видеопоток", как меня забанили за обсуждение уязвимостей :D


Название: Re: Перехват видеоПотока с карточки
Отправлено: alexis031182 от Май 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++...


Название: Re: Перехват видеоПотока с карточки
Отправлено: alexis031182 от Май 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);


Название: Re: Перехват видеоПотока с карточки
Отправлено: Bepec от Май 16, 2012, 15:11
C директом дела не имел, смотрю пока как на новые ворота ;)

Вопрос - оно работает? Если работает, то какова частота обновления максимальная?


Название: Re: Перехват видеоПотока с карточки
Отправлено: alexis031182 от Май 16, 2012, 15:18
C директом дела не имел, смотрю пока как на новые ворота ;)
Мне приходилось, но очень давно. Однако впечатления от работы с ним остались тёплые :) очень хорошая документация, множество примеров. Я больше по теме DirectShow, а не Direct3D работал

Вопрос - оно работает? Если работает, то какова частота обновления максимальная?
Нет, нет, это не мой код. Выдрал с какого-то буржуйского сайта (там что-то аналогичное Вашей теме обсуждается), поэтому ничего не могу сказать ни о скорости, ни о том, заведётся ли вообще :) Впрочем, сам думаю, что код рабочий. И точно, что директиксу GDI и в подмётки по скорости не сгодится


Название: Re: Перехват видеоПотока с карточки
Отправлено: alexis031182 от Май 16, 2012, 15:26
Вот ещё тут анонсировали недавно: http://www.mikogo.ru/ Сам не пробовал, но может и подойдёт


Название: Re: Перехват видеоПотока с карточки
Отправлено: V1KT0P от Май 16, 2012, 16:52
Да я вот тоже не в курсе. Пытался гуглить - везде отпинывают на BitBlt, типа он хороший.

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

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


Название: Re: Перехват видеоПотока с карточки
Отправлено: Bepec от Май 16, 2012, 18:09
Вот за статью спасибки ;) А то информации мало, сравнений почти и нет.