This article describes a "trick" on how to capture video screen shots, irrespective of the source (file, Webcast stream, TV-input).
My task is to capture a screen shot of a video being played. It is easy to capture a screen shot of a window. However with a video being played (e.g. with Media Player), you will capture the window border and a blank video surface. I am sure there is a way to do it with DirectX and DirectShow methods, however I could not find an article on it. If anyone knows the method or a link to an article on this topic, please let me know. HyperSnap-DX from Hyperionics seems to be the only one with the "proper" way of capturing a video screen shot.
Using the code
The demo application is started,
CHogVideo will attempt open and pause the video hog.dat. This is to hog the video resources (*the trick*). You can then open your Media Player (or other video players) to play the video you wish to capture. Once the video is playing, start the capture under "Options".
There are no codes specific to this article. However here are a few links to related articles:
- Playing a Video with DirectShow:
- Capturing a Window Screen Shot:
Points of Interest
Why it works?
My guess is that the hogging video, being the first video being played, gets priority to the hardware. Subsequent videos played have to use software rendering, which enables Windows GDI to capture a copy of the frame being played.
Do I need the CHogVideo class?
CHogVideo is just for demonstration. You could have just started playing a video file and paused it (say with Media Player). Open a second Media Player to play the intended video screen to capture.
When it will work?
The trick will work for if the video resource is hogged first. It will work for video players that utilize DirectX approach for playing the video (this includes Windows Media Player) regardless of the source (from file, Webcast stream, TV-input).
What about Full Screen mode?
Yes, it will also capture videos in full screen mode.
- February 16, 2004 - First version.