LEADTOOLS Support
General
LEADTOOLS SDK Examples
V20 HOW TO: Continuously capture then save last N minutes of video
#1
Posted
:
Monday, November 11, 2019 2:20:19 PM(UTC)
Groups: Manager, Tech Support
Posts: 367
Was thanked: 1 time(s) in 1 post(s)
Attached C# project shows how to continuously capture video using the DVR module of LEADTOOLS Multimedia, then save the user-selected last portion of the video upon stopping.
Here are the main parts of the project:
- Using our Multimedia Capture control with WPF:
This is done using the System.Windows.Forms.Integration.WindowsFormsHost control
- Using a video source:
Any video capture source can be used such as web cams and frame grabbers, but the project specifically looks for the LEAD Screen Capture filter using this code:
Code:// Device name for the LEAD Screen Capture Filter video source
string LEADScreenCapture = @"@device:sw:{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{E2B7DE13-38C5-11D5-91F6-00104BDB8FF9}";
_capturectrl.VideoDevices[LEADScreenCapture].Selected = true;
To use a different video source, select it from the list in CaptureCtrl.VideoDevices.
- Specifying DVR output and using suitable MPEG2 compression:
Setting the output DVR format and setting up the circular buffers that will store the video data. Also, to be able to copy the video data at the end and produce a valid MPG file, suitable compression should be used. The code to do both is this:
Code:
_capturectrl.TargetFormats.DVRTransport.Selected = true;
string recVideoComp = _capturectrl.TargetFormats.DVRTransport.RecommendedVideoCompressor;
_capturectrl.TargetFormat = TargetFormatType.DVRTransport;
if (recVideoComp != string.Empty)
_capturectrl.VideoCompressors[recVideoComp].Selected = true;
if (_capturectrl.VideoCompressors.Mpeg2.Selected == true)
{
LMMPEG2Encoder mpeg2Encoder = _capturectrl.GetSubObject(CaptureObject.VideoCompressor) as LMMPEG2Encoder;
if (mpeg2Encoder != null)
{
mpeg2Encoder.EncodingThreads = eMpeg2EncodingThreads.MPEG2_THREAD_AUTO;
mpeg2Encoder.VideoFormat = eMPEG2VIDEOFORMAT.MPEG2_VF_NTSC;
System.Runtime.InteropServices.Marshal.ReleaseComObject(mpeg2Encoder);
}
}
_capturectrl.TargetFile = @"c:\temp\capture.lbl";
_capturectrl.ReadyCapture(CaptureMode.Video| CaptureMode.InhibitRun);
_dvrSink = _capturectrl.GetSubObject(CaptureObject.Sink) as ILMDVRSink;
if (_dvrSink != null)
{
double dBuffSize = 102400000; // 100 MB
int lFileCount = 8; // 8 buffer files
_dvrSink.StartChangingAttributes();
_dvrSink.FolderCount = 1;
_dvrSink.set_FolderName(0, @"c:\temp");
_dvrSink.SetBufferSize(0, lFileCount, dBuffSize);
_dvrSink.StopChangingAttributes(false);
string bufferFolder = _dvrSink.BaseName;
}
- Determining video time to save based on video data size:
The DVR buffers provide the programmer with amount of data saved in bytes rather than duration of saved video. The project uses a timer to keep track of how much time has passed and obtains the data size using the ILMDVRSink.GetAvailabilityInfo(), then calculates the value:
Code:offsetPerSecond = deltaOffset / deltaTime;
This is later used to calculate number of seconds requested to be saved as:
(offsetPerSecond * seconds)
Note: In order to obtain valid MPEG data, the ILMDVRSink.GetFragmentAlignment() method is used to adjust the requested offsets. This means there could be a small variation between requested number of seconds and actual length of stored video.
- Unlocking the toolkit:
Before deploying your code, you need to obtain a valid unlock key from our licensing team to use with the MultimediaSupport.UnlockModule() method.
See also:
Keywords: Multimedia, Video, Screen Capture, DVR, C#, WPF, VS2017
Edited by moderator Monday, November 18, 2019 3:29:15 PM(UTC)
| Reason: Not specified
Amin Dodin
Senior Support Engineer
LEAD Technologies, Inc.
LEADTOOLS Support
General
LEADTOOLS SDK Examples
V20 HOW TO: Continuously capture then save last N minutes of video
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.