Home Upgrade Search Memberlist Extras Hacker Tools Award Goals Help Wiki Contact

.NET 

How does Imminent Monitor provides such high speed for Remote Desktop?

Imminent Monitor has a very high speed for Remote Desktop (30+ FPS).

Does anyone knows what approach it uses to achieve such high speed?
Instead of looking at just one program, try looking at how live streaming works and the tech behind it. If you google live streaming programs, you will find some relevant results.
Imminent Monitor uses the same method as NanoCore as far as I'm aware, it only sends over the information that has changed and not the entire screen.
[Image: vjPWhyy.gif]
Why not just check out the source to Imminent Monitor? Oh... here ya go ;)

Imminent Monitor Source: http://pastebin.com/bsfmNp4c

Enjoy... let me know how you make out ;)
(Apr 1, 2016 11:39 PM)nuk Wrote:  Why not just check out the source to Imminent Monitor? Oh... here ya go ;)

Imminent Monitor Source: http://pastebin.com/bsfmNp4c

Enjoy... let me know how you make out ;)

I'd hope they've made some kind of improvements to it after 3 years though. 😅
(Mar 31, 2016 11:55 AM)jim_377 Wrote:  Imminent Monitor has a very high speed for Remote Desktop (30+ FPS).

Does anyone knows what approach it uses to achieve such high speed?

I don't own Imminent Monitor but this is what they might be doing.
- Custom compression algo for images
- Motion Detection (This way they only send the data which changes) this saves lot's of bandwidth.
(Apr 1, 2016 11:39 PM)nuk Wrote:  Why not just check out the source to Imminent Monitor? Oh... here ya go ;)

Imminent Monitor Source: http://pastebin.com/bsfmNp4c

Enjoy... let me know how you make out ;)

That source code gave me cancer.
(Apr 2, 2016 08:17 AM).Monarch. Wrote:  I don't own Imminent Monitor but this is what they might be doing.
- Custom compression algo for images
- Motion Detection (This way they only send the data which changes) this saves lot's of bandwidth.

Use JPEG compression and write the image to bytes using a stream and send it to the server and let it decompress it to an image.

(Apr 2, 2016 08:28 AM)Ninja Wrote:  That source code gave me cancer.

My computer died of clicking on the source. - Google chrome has stopped working...
(Apr 2, 2016 08:28 AM)Ninja Wrote:  That source code gave me cancer.

I thought I was the only one who thought so🤣

"On Error Resume Next" gave me cancer+ebola+Aids+Lupus

For the @OP, you should take a look for "Desktop Duplication API". This API uses DirectX 11 for very fast imagen stuff, like:

IDXGIOutputDuplication::GetFrameDirtyRects
"returns dirty regions, which are non-overlapping rectangles that indicate the areas of the desktop image that the operating system updated since you processed the previous desktop image."

IDXGIOutputDuplication::GetFrameMoveRects
"returns move regions, which are rectangles of pixels in the desktop image that the operating system moved to another location within the same image. Each move region consists of a destination rectangle and a source point. The source point specifies the location from where the operating system copied the region and the destination rectangle specifies to where the operating system moved that region. Move regions are always non-stretched regions so the source is always the same size as the destination."

You can use SharpDX in order to use this methods in C# or VB.NET
Combining SharpDX with any kind of compression algorthim I made my own "remote screener streamer" (private use, not public) capable to streamings to 1920 x 1080 24bpp @ 0,56 mbps on high spikes (notice mbps are mega bits, not mega Bytes). Performance (static & changing images) ups to 60 FPS in ADSL with 512 Kb upload Channel. (Very low quality ADSL, I know)
(Apr 2, 2016 02:35 PM)Zilog80 Wrote:  I thought I was the only one who thought so🤣

"On Error Resume Next" gave me cancer+ebola+Aids+Lupus

For the @OP, you should take a look for "Desktop Duplication API". This API uses DirectX 11 for very fast imagen stuff, like:

IDXGIOutputDuplication::GetFrameDirtyRects
"returns dirty regions, which are non-overlapping rectangles that indicate the areas of the desktop image that the operating system updated since you processed the previous desktop image."

IDXGIOutputDuplication::GetFrameMoveRects
"returns move regions, which are rectangles of pixels in the desktop image that the operating system moved to another location within the same image. Each move region consists of a destination rectangle and a source point. The source point specifies the location from where the operating system copied the region and the destination rectangle specifies to where the operating system moved that region. Move regions are always non-stretched regions so the source is always the same size as the destination."

You can use SharpDX in order to use this methods in C# or VB.NET
Combining SharpDX with any kind of compression algorthim I made my own "remote screener streamer" (private use, not public) capable to streamings to 1920 x 1080 24bpp @ 0,56 mbps on high spikes (notice mbps are mega bits, not mega Bytes). Performance (static & changing images) ups to 60 FPS in ADSL with 512 Kb upload Channel. (Very low quality ADSL, I know)

Unfortunately the Desktop Duplication API only works for Windows 8 and later 😟.
(Apr 2, 2016 07:05 PM)jim_377 Wrote:  Unfortunately the Desktop Duplication API only works for Windows 8 and later 😟.

Not really with this Windows 7 Update:

msdn.microsoft.com/en-us/library/windows/desktop/jj863687(v=vs.85).aspx

This Update provides Win7 ti use DXGI 1.2 API.
Thanks nuk for the source code.
(Apr 3, 2016 03:10 AM)Zilog80 Wrote:  Not really with this Windows 7 Update:

msdn.microsoft.com/en-us/library/windows/desktop/jj863687(v=vs.85).aspx

This Update provides Win7 ti use DXGI 1.2 API.


Great news. Thanks man for pointing that out.

Is there any drawbacks to the Desktop Duplication API, I read something about that some windows can choose not be captured by this API:

blogs.msdn.microsoft.com/dsui_team/2013/03/25/ways-to-capture-the-screen/

Is this true or I misunderstood what I've read ❓?
it only sends the parts of the screen that have changed, and it uses hardware acceleration for the compression (I think)
My gott, the Phallic Mother!

Probably the only postmodern neo-marxist who exists.
(Apr 3, 2016 09:17 AM)jim_377 Wrote:  Great news. Thanks man for pointing that out.

Is there any drawbacks to the Desktop Duplication API, I read something about that some windows can choose not be captured by this API:

blogs.msdn.microsoft.com/dsui_team/2013/03/25/ways-to-capture-the-screen/

Is this true or I misunderstood what I've read ❓?

As you can read on your provided link, there is a drawback related with Fullscreen apps.

Fullscreen DirectX (and OpenGL) applications can not be captured without source code control. If the SwapChain hasn’t been created with the right flags, there is (at least without any system-hacking-skills) no way to duplicate the screen. You can find more information about that on the SwapChain Flags MSDN page:

msdn.microsoft.com/de-de/library/windows/desktop/bb173076(v=vs.85).aspx

As you can see it you will either have to use IDXGIFactory2::CreateSwapChainForHwnd, IDXGIFactory2::CreateSwapChainForCoreWindow or IDXGIFactory2::CreateSwapChainForComposition without the DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY to allow other applications to access the SwapChain’s backbuffer.

Anyway, even this drawback, Desktop Duplication API (GXDI 1.2) smash classic & old school BitBlt GDI+ capture screen.


Possibly Related Threads...
Thread / Author Replies Views Last Post
by daarioJun 9, 2024 04:14 PM 10 301 Jun 9, 2024 04:14 PM
Last Post: Tyr
[C] by Gianby10Mar 18, 2023 11:32 PM 2 237 Mar 18, 2023 11:32 PM
Last Post: mouseworm
[.NET] by wingersOct 5, 2019 05:53 AM 5 374 Oct 5, 2019 05:53 AM
Last Post: wingers