-
Notifications
You must be signed in to change notification settings - Fork 0
/
VideoRecorder.cs
82 lines (76 loc) · 2.31 KB
/
VideoRecorder.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using Accord.Video.FFMPEG;
using System;
using System.Drawing;
using System.IO;
namespace TQC
{
public class VideoRecorder : TyreQCCheckList
{
private VideoFileWriter _writer;
private DateTime? firstFrameTime = null;
private bool _recording;
public VideoRecorder()
{
}
public bool RecordingStarted()
{
return this._recording;
}
public void StopRecording()
{
lock (this)
{
_writer.Close();
_writer.Dispose();
this._recording = false;
}
}
public void NewRecording(string fileName, int width, int height, double frameRate)
{
try
{
this._writer = new VideoFileWriter();
string path = Directory.GetCurrentDirectory() + @"\Recordings\" ;
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
fileName = path + fileName;
//cannot provide the video type .mp4 that throws some exception in accord.
//cannot specify h264 encoding in accord that already has a recording issue.
this._recording = true;
this._writer.Open(fileName, width, height);
}
catch (Exception ex)
{
throw ex;
}
}
public void RecordVideo(Bitmap frame)
{
lock (this)
{
TimeSpan ts;
try
{
if (this._recording && _writer != null)
{
if (firstFrameTime != null)
{
ts = TimeSpan.FromMilliseconds(DateTime.Now.Subtract(firstFrameTime.Value).TotalMilliseconds);
_writer.WriteVideoFrame(frame,ts);
}
else
{
_writer.WriteVideoFrame(frame);
firstFrameTime = DateTime.Now;
}
}
}
catch (Exception ex)
{
}
}
}
}
}