예제 #1
8
        static void Main(string[] args)
        {
            string outputFile = "test-output.wmv";
            int width = 320;
            int height = 240;

            // create instance of video writer
            VideoFileWriter writer = new VideoFileWriter();
            // create new video file
            writer.Open("test.avi", width, height, 25, VideoCodec.MPEG4);
            // create a bitmap to save into the video file
            Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            // write 1000 video frames
            for (int i = 0; i < 1000; i++)
            {
                image.SetPixel(i % width, i % height, Color.Red);
                writer.WriteVideoFrame(image);
            }
            writer.Close();

            Console.WriteLine("Finished");
            Console.ReadKey();
        }
예제 #2
0
        //开始录像按钮响应函数
        private void button_start_Click(object sender, EventArgs e)
        {
            int width  = 640; //录制视频的宽度
            int height = 480; //录制视频的高度
            int fps    = 9;

            //创建一个视频文件
            String video_format = this.comboBox_videoecode.Text.Trim(); //获取选中的视频编码

            if (this.videoSource.IsRunning && this.videoSourcePlayer.IsRunning)
            {
                if (-1 != video_format.IndexOf("MPEG"))
                {
                    writer.Open("test.avi", width, height, fps, VideoCodec.MPEG4);
                }
                else if (-1 != video_format.IndexOf("WMV"))
                {
                    writer.Open("test.wmv", width, height, fps, VideoCodec.WMV1);
                }
                else
                {
                    writer.Open("test.mkv", width, height, fps, VideoCodec.Default);
                }
            }
            else
            {
                MessageBox.Show("没有视频源输入,无法录制视频。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            timer_count.Enabled  = true; //是否执行System.Timers.Timer.Elapsed事件;
            this.label5.Visible  = true;
            this.label5.Text     = "REC";
            this.is_record_video = true;
        }
예제 #3
0
        /// <summary>
        /// 开始录像
        /// </summary>
        public void StartRecording()
        {
            if (RecordStatus == VideoRecordStatus.End)
            {
                //打开摄像头
                Dispatcher.CurrentDispatcher.Invoke(() =>
                {
                    OpenCamera();
                });

                _writer = new VideoFileWriter();
                if (Camera == CameraSource.Desktop)
                {
                    //获取当前屏幕尺寸,开始录制
                    var rect = System.Windows.Forms.Screen.AllScreens.First().Bounds;
                    _writer.Open(VideoFilePath, rect.Width, rect.Height);
                }
                else
                {
                    if (Camera == CameraSource.LocalCamera && VideoDevices.Count <= 0)
                    {
                        return;
                    }
                    //等待摄像头准备完毕
                    while (Image == null)
                    {
                        Thread.Sleep(100);
                    }
                    //传入摄像头录制的图片尺寸,开始录制
                    _writer.Open(VideoFilePath, Image.PixelWidth, Image.PixelHeight, 120);
                }
                RecordStatus = VideoRecordStatus.Recording;
            }
        }
        /// <summary>
        ///   Starts recording. Only works if the player has
        ///   already been started and is grabbing frames.
        /// </summary>
        ///
        public void StartRecording()
        {
            if (IsRecording || !IsPlaying)
            {
                return;
            }

            Rectangle area     = CaptureRegion;
            string    fileName = newFileName();

            int height       = area.Height;
            int width        = area.Width;
            int framerate    = 1000 / screenStream.FrameInterval;
            int videoBitRate = 1200 * 1000;
            int audioBitRate = 320 * 1000;

            OutputPath         = Path.Combine(main.CurrentDirectory, fileName);
            RecordingStartTime = DateTime.MinValue;
            videoWriter        = new VideoFileWriter();

            // Create audio devices which have been checked
            var audioDevices = new List <AudioCaptureDevice>();

            foreach (var audioViewModel in AudioCaptureDevices)
            {
                if (!audioViewModel.Checked)
                {
                    continue;
                }

                var device = new AudioCaptureDevice(audioViewModel.DeviceInfo);
                device.AudioSourceError += device_AudioSourceError;
                device.Format            = SampleFormat.Format16Bit;
                device.SampleRate        = Settings.Default.SampleRate;
                device.DesiredFrameSize  = 2 * 4098;
                device.Start();

                audioDevices.Add(device);
            }

            if (audioDevices.Count > 0) // Check if we need to record audio
            {
                audioDevice = new AudioSourceMixer(audioDevices);
                audioDevice.AudioSourceError += device_AudioSourceError;
                audioDevice.NewFrame         += audioDevice_NewFrame;
                audioDevice.Start();

                videoWriter.Open(OutputPath, width, height, framerate, VideoCodec.H264, videoBitRate,
                                 AudioCodec.MP3, audioBitRate, audioDevice.SampleRate, audioDevice.Channels);
            }
            else
            {
                videoWriter.Open(OutputPath, width, height, framerate, VideoCodec.H264, videoBitRate);
            }

            HasRecorded = false;
            IsRecording = true;
        }
예제 #5
0
 /// <summary>
 /// 根据索引打开相机
 /// </summary>
 /// <param name="index"></param>
 public void Start(int index = 0)
 {
     Camera = new VideoCaptureDevice(Devices[index].MonikerString); //通过索引找到指定摄像头
     Camera.VideoResolution = Camera.VideoCapabilities[0];          ////配置录像参数(宽,高,帧率,比特率等参数)
     Camera.NewFrame       += Camera_NewFrame;                      //设置回调,aforge会不断从这个回调推出图像数据
     Camera.Start();                                                //打开摄像头
     VideoOutPut.Open("E:/VIDEO.MP4",
                      Camera.VideoResolution.FrameSize.Width,
                      Camera.VideoResolution.FrameSize.Height,
                      Camera.VideoResolution.AverageFrameRate,
                      VideoCodec.MPEG4,
                      Camera.VideoResolution.BitCount); //打开录像文件(如果没有则创建,如果有也会清空)
 }
        public void SetUpRecordingEngine(double width, double height, string cameraName)
        {
            var dialog = new SaveFileDialog();

            Width      = width;
            Height     = height;
            CameraName = cameraName;

            var proceededCameraName = cameraName.GetVideoFileName();

            dialog.FileName     = AppDomain.CurrentDomain.BaseDirectory + "SurvellianceMaterials\\" + $"{proceededCameraName}" + ".avi";
            FilePath            = dialog.FileName;
            dialog.AddExtension = true;
            _writer.Open(dialog.FileName, (int)Math.Round(Width, 0), (int)Math.Round(Height, 0));
        }
예제 #7
0
        private void buttonCreateVideo_Click(object sender, EventArgs e)
        {
            int width = 858;
            int height = 480;

            VideoFileWriter writer = new VideoFileWriter();
            writer.Open("sample-video.avi", width, height, 1, VideoCodec.MPEG4, 2500000);

            Bitmap image = new Bitmap(width, height);

            using (OpenFileDialog dlg = new OpenFileDialog())
            {
                dlg.Title = "Open Image";
                dlg.Filter = "bmp files (*.bmp)|*.bmp";

                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    image = new Bitmap(dlg.FileName);
                }
            }

            for (int i = 0; i < 36000; i++)
            {
                writer.WriteVideoFrame(image);
            }

            writer.Close();
            Application.Exit();
        }
예제 #8
0
        public void Start(Rectangle position)
        {
            _position = position;
            //resolution can't be odd
            _position.Width  = _position.Width % 2 == 0 ? _position.Width : _position.Width - 1;
            _position.Height = _position.Height % 2 == 0 ? _position.Height : _position.Height - 1;

            CreateInputDirectoryIfNotExists();

            try
            {
                _watermarkImage = Image.FromFile(Properties.Settings.Default.WatermarkPath);
            }
            catch (FileNotFoundException e)
            {
            }

            _videoSource           = new ScreenCaptureStream(_position);
            _videoSource.NewFrame += CaptureFrame;
            _videoSource.Start();

            _videoWriter = new VideoFileWriter();

            var inputFilePath = $"{Properties.Settings.Default.SaveToPath}\\{DateTime.Now:yyyy-MM-dd-HH-mm-ss}.{FILE_CONTAINER}";

            _videoWriter.Open(inputFilePath, _position.Width, _position.Height, FRAME_RATE, VideoCodec.H264, BIT_RATE);

            _isRecording    = true;
            _firstFrameTime = null;
        }
예제 #9
0
        private void StartRec(string path)
        {
            if (_isRecording == false)
            {
                this.SetScreenArea();

                this.SetVisible(true);

                this._frameCount = 0;

                this.tb_SaveFolder.Text = path;
                string fullName = string.Format(@"{0}\{1}_{2}.avi", path, Environment.UserName.ToUpper(), DateTime.Now.ToString("d_MMM_yyyy_HH_mm_ssff"));

                // Save File option
                _writer.Open(
                    fullName,
                    this._width,
                    this._height,
                    ( int )nud_FPS.Value,
                    ( VideoCodec )cb_VideoCodec.SelectedValue,
                    ( int )( BitRate )this.cb_BitRate.SelectedValue);

                // Start main work
                this.StartRecord();
            }
        }
예제 #10
0
    /*END OF COPIED CODE BLOCK*/


    private void CreateMovie(DateTime startDate, DateTime endDate)
    {
        int width    = 320;
        int height   = 240;
        var framRate = 200;

        using (var container = new ImageEntitiesContainer())
        {
            //a LINQ-query for getting the desired images
            var query = from d in container.ImageSet
                        where d.Date >= startDate && d.Date <= endDate
                        select d;

            // create instance of video writer
            using (var vFWriter = new VideoFileWriter())
            {
                // create new video file
                vFWriter.Open("nameOfMyVideoFile.avi", width, height, framRate, VideoCodec.Raw);

                var imageEntities = query.ToList();

                //loop throught all images in the collection
                foreach (var imageEntity in imageEntities)
                {
                    //what's the current image data?
                    var imageByteArray = imageEntity.Data;
                    var bmp            = ToBitmap(imageByteArray);
                    var bmpReduced     = ReduceBitmap(bmp, width, height);

                    vFWriter.WriteVideoFrame(bmpReduced);
                }
                vFWriter.Close();
            }
        }
    }
예제 #11
0
파일: RCTVmain.cs 프로젝트: Capstone15/RCTV
 private void recordPic_MouseClick(object sender, MouseEventArgs e)
 {
     if (imgRun)
     {
         if (recordStatus == ON)
         {
             recordStatus    = COMPLETE;
             recordPic.Image = System.Drawing.Image.FromFile("button\\recordon.png");
         }
         else if (recordStatus == OFF)
         {
             recordStatus = ON;
             if (!Directory.Exists(videoPath))
             {
                 Directory.CreateDirectory(videoPath);
             }
             writer = new VideoFileWriter();
             ct     = System.DateTime.Now.ToString("yyyy-MM-dd hh_mm_ss.avi");
             writer.Open(videoPath + "\\" + ct, 320, 240, 10, VideoCodec.MPEG4, 10000000);
             recordPic.Image = System.Drawing.Image.FromFile("button\\recordoff.png");
             UpdateChatMsg("녹화시작\r\n");
         }
     }
     else
     {
         MessageBox.Show("Error");
     }
 }
예제 #12
0
        private void SaveBitmaps(object state)
        {
            //using (var appScope = IsolatedStorageFile.GetUserStoreForApplication())
            //{
            //    using (var stream = new IsolatedStorageFileStream("results.bin", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, appScope))
            //    {
            //        BinaryFormatter bin = new BinaryFormatter();
            //        bin.Serialize(stream, resultList);
            //    }
            //}

            using (var writer = new VideoFileWriter())
            {
                string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                writer.Open(Path.Combine(path, "video.mp4"), 720, 576, 25, VideoCodec.H264);

                while (bitmaps != null)
                {
                    if (bitmaps.Count == 0 && !isRecording)
                    {
                        bitmaps.Clear();
                        bitmaps = null;
                    }
                    else if (bitmaps.Count > 0 && isRecording)
                    {
                        var bitmap = bitmaps.Dequeue();
                        writer.WriteVideoFrame(bitmap);
                        bitmap.Dispose();
                    }
                }

                writer.Close();
            }
        }
예제 #13
0
        public void CreateVideo()
        {
            Bitmap newFrame;

            string[] frames = Frames();
            video = new Video(filename, img);
            int    length    = frames.Length;
            int    width     = video.Width;
            int    height    = video.Height;
            int    framerate = video.FrameRate;
            int    bitrate   = video.BitRate;
            string filepath  = @"D:\Files\Tugas Akhir\TA\Folder Video\stego1.avi";

            int x = 0;

            while (File.Exists(filepath))
            {
                x++;
                filepath = @"D:\Files\Tugas Akhir\TA\Folder Video\stego" + x + ".avi";
            }

            string stegovideo = Path.Combine(filepath);

            writer.Open(stegovideo, width, height, reader.FrameRate, VideoCodec.Raw, bitrate);
            for (int i = 0; i < reader.FrameCount; i++)
            {
                newFrame = (Bitmap)Image.FromFile(frames[i]);
                writer.WriteVideoFrame(newFrame);
                newFrame.Dispose();
            }
        }
예제 #14
0
        public void write_video_test()
        {
            var videoWriter = new VideoFileWriter();

            int width = 800;
            int height = 600;
            int framerate = 24;
            string path = Path.GetFullPath("output.avi");
            int videoBitRate = 1200 * 1000;
            //int audioBitRate = 320 * 1000;

            videoWriter.Open(path, width, height, framerate, VideoCodec.H264, videoBitRate);

            var m2i = new MatrixToImage();
            Bitmap frame;

            for (byte i = 0; i < 255; i++)
            {
                byte[,] matrix = Matrix.Create(height, width, i);
                m2i.Convert(matrix, out frame);
                videoWriter.WriteVideoFrame(frame, TimeSpan.FromSeconds(i));
            }

            videoWriter.Close();

            Assert.IsTrue(File.Exists(path));
        }
예제 #15
0
        public void write_video_test()
        {
            var videoWriter = new VideoFileWriter();

            int    width        = 800;
            int    height       = 600;
            int    framerate    = 24;
            string path         = Path.GetFullPath(Path.Combine(TestContext.CurrentContext.TestDirectory, "output.avi"));
            int    videoBitRate = 1200 * 1000;

            videoWriter.Open(path, width, height, framerate, VideoCodec.H264, videoBitRate);

            Assert.AreEqual(videoBitRate, videoWriter.BitRate);

            var    m2i = new MatrixToImage();
            Bitmap frame;

            for (byte i = 0; i < 255; i++)
            {
                byte[,] matrix = Matrix.Create(height, width, i);
                m2i.Convert(matrix, out frame);
                videoWriter.WriteVideoFrame(frame, TimeSpan.FromSeconds(i));
            }

            videoWriter.Close();

            Assert.IsTrue(File.Exists(path));
        }
예제 #16
0
        public async void WriteVideo(string outputPath, int fps, byte[] fileBytes, byte[] filenameBytes, int boxSize, ProgressBar progressBar, RichTextBox storeInfoTextBox)
        {
            storeInfoTextBox.Text = "Storing file to a video...";
            progressBar.Value     = 1;

            int totalProgressCount = 0;
            var progress           = new Progress <int>(progressIncrement => {
                totalProgressCount   += progressIncrement;
                storeInfoTextBox.Text = totalProgressCount + "/" + fileBytes.Length + " bytes stored.";
                progressBar.Value     = Math.Min(100, (int)(((float)totalProgressCount / (float)fileBytes.Length) * 100.0f));
            });

            VideoFileWriter writer = new VideoFileWriter();

            writer.Open(outputPath, Width, Height, fps, VideoCodec.Default);
            Task drawImagesTask = Task.Factory.StartNew(() => {
                ImageDrawer filenameImageDrawer = new ImageDrawer(writer, filenameBytes);
                filenameImageDrawer.DrawImages(0, filenameBytes.Length, Width, Height, boxSize);

                ImageDrawer fileImageDrawer = new ImageDrawer(writer, fileBytes, progress);
                fileImageDrawer.DrawImages(0, fileBytes.Length, Width, Height, boxSize);
            });
            await drawImagesTask;

            progressBar.Value     = 100;
            storeInfoTextBox.Text = "Video was sucessfully stored!";

            writer.Close();
        }
예제 #17
0
        /// <summary>
        /// Call to make video of world with time
        /// </summary>
#pragma warning disable IDE0051 // Remove unused private members
        static void MakeVideo()
#pragma warning restore IDE0051 // Remove unused private members
        {
            int           frames        = 6000;
            WorldRenderer worldRenderer = new WorldRenderer();

            using (VideoFileWriter vFWriter = new VideoFileWriter())
            {
                const int RENDERSIZE = World.World.WORLD_SIZE * 4;
                int       framRate   = 15;
                // create new video file
                vFWriter.Open("output.mp4", RENDERSIZE, RENDERSIZE, framRate, VideoCodec.MPEG4, 163840000);
                try
                {
                    for (int i = 0; i < frames; i++)
                    {
                        Bitmap imageFrame = worldRenderer.Render(RENDERSIZE, RENDERSIZE, 4, false);
                        Thread thread     = new Thread(() => { vFWriter.WriteVideoFrame(imageFrame); imageFrame.Dispose(); });
                        thread.Start();
                        World.World.Instance.ProgressTime();
                        thread.Join();
                    }
                }
                catch (Exception e)
                {
                    Trace.TraceError(e.ToString());
                    vFWriter.Close();
                }
            }
        }
예제 #18
0
파일: Form1.cs 프로젝트: yamac/GifzoWin
 private void StartCapture()
 {
     if (movieMode)
     {
         if (this.InvokeRequired)
         {
             Invoke(new FormCallback(FormStateCapturing));
         }
         else
         {
             FormStateCapturing();
         }
     }
     filename = DateTime.Now.ToString(setting.toStringFormat) + "." + (mp4Mode ? ".Mp4" : imageFormat.ToString());
     filepath = (mp4Mode && setting.doDeleteMp4File && setting.doUploadMp4FileToConvertToGif) ? Path.Combine(Path.GetTempPath(), filename) : Path.Combine(setting.saveLocalLocation, filename);
     if (mp4Mode)
     {
         videoWriter = new VideoFileWriter();
         videoWriter.Open(filepath, width, height, 1000 / setting.milliseconds, VideoCodec.MPEG4);
     }
     else
     {
         imageMemoryStreams = new List <MemoryStream>();
     }
     mode = Mode.Capturing;
 }
예제 #19
0
파일: Program.cs 프로젝트: Plugway/UVEA
        public static void Generate()
        {
            var reader = new VideoFileReader();

            reader.Open(VideoPath + VideoName);
            var    writer         = new VideoFileWriter();
            var    numberOfFrames = (int)reader.FrameCount;
            Bitmap probeBitmap    = reader.ReadVideoFrame(0);

            if (numberOfFrames > probeBitmap.Width)        //if user want -> fit to original width
            {
                numberOfFrames = probeBitmap.Width;
            }
            writer.Open(VideoPath + "out.mp4", numberOfFrames, probeBitmap.Height, OutputFps, VideoCodec.H265);
            for (var x = 0; x < probeBitmap.Width; x++)
            {
                var convertedBitmap = new Bitmap(numberOfFrames, probeBitmap.Height);
                reader.Open(VideoPath + VideoName);
                for (var f = 0; f < numberOfFrames; f++)
                {
                    var currentBitmap = reader.ReadVideoFrame();
                    for (var y = 0; y < probeBitmap.Height; y++)
                    {
                        convertedBitmap.SetPixel(f, y, currentBitmap.GetPixel(x, y));
                    }
                    currentBitmap.Dispose();
                }
                writer.WriteVideoFrame(convertedBitmap);
                convertedBitmap.Dispose();
            }
            reader.Dispose();
            writer.Close();
        }
예제 #20
0
        static void Main(string[] args)
        {
            string outputFile = "test-output.wmv";
            int    width      = 320;
            int    height     = 240;

            // create instance of video writer
            VideoFileWriter writer = new VideoFileWriter();

            // create new video file
            writer.Open("test.avi", width, height, 25, VideoCodec.MPEG4);
            // create a bitmap to save into the video file
            Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb);

            // write 1000 video frames
            for (int i = 0; i < 1000; i++)
            {
                image.SetPixel(i % width, i % height, Color.Red);
                writer.WriteVideoFrame(image);
            }
            writer.Close();

            Console.WriteLine("Finished");
            Console.ReadKey();
        }
예제 #21
0
        private void btnGenerate_Click(object sender, EventArgs e)
        {
            g1.Clear(Color.White);
            for (int i = 0; i != width; i++)
            {
                if (g.simpleCanvas[i] == 1)
                {
                    g1.DrawLine(Pens.Black, i, widthUp, i, widthDown);
                }
            }

            progressBar1.Maximum = (int)(frameRate * time);
            progressBar1.Value   = progressBar1.Minimum = 0;//设置范围最小值


            VideoFileWriter writer = new VideoFileWriter();

            writer.Open(savePath, width, height, frameRate, VideoCodec.MPEG4);
            for (int i = 0; i != frameRate * time; i++)
            {
                Application.DoEvents();
                writer.WriteVideoFrame(image1);
                this.progressBar1.Value = i;
            }
            this.progressBar1.Value = (int)(frameRate * time);
            writer.Close();
            MessageBox.Show("Saved!!");
        }
예제 #22
0
        static void Main(string[] args)
        {
            var paths = args[0].Split(';');
            foreach (var path in paths.Where(s => !string.IsNullOrEmpty(s))){

                var files = Directory.GetFiles(path, "*.png");
                var images = GetImages(files.ToArray()).GroupBy(s => Regex.Replace(s, @"([^\d]*)([\d]*)([^\d]*)", "$1$3", RegexOptions.Singleline | RegexOptions.IgnoreCase));
                foreach (var grouping in images){
                    Console.WriteLine("Creating Videos for " + path);
                    var videoFileName = Path.Combine(path + "", grouping.Key + ".avi");
                    if (File.Exists(videoFileName))
                        File.Delete(videoFileName);
                    var videoFileWriter = new VideoFileWriter();
                    const int frameRate = 4;
                    using (var bitmap = new Bitmap(Path.Combine(path, grouping.First()+ImgExtentsion))){
                        videoFileWriter.Open(videoFileName, bitmap.Width, bitmap.Height, frameRate,VideoCodec.MPEG4);
                    }
                    WriteFranes(grouping, path, videoFileWriter, frameRate);
                    videoFileWriter.Close();
                    videoFileWriter.Dispose();
                    Console.WriteLine("Video for " + grouping.Key + " created");
                }
            }
            Console.WriteLine("Press any key to continue...");
            Console.ReadLine();
        }
        public void GuardarVideo(string nombreArchivo)
        {
            if (framesBmp.Count != 0)
            {
                int width  = 640;
                int height = 480;
                //FinGrabacion = DateTime.Now.Ticks;

                int Duracion = (int)(new TimeSpan(FinGrabacion - InicioGrabacion)).TotalSeconds;


                int framRate = this.framesBmp.Count / Duracion;
                Console.WriteLine($"Frames por segundo {framRate}");

                // create instance of video writer
                using (var vFWriter = new VideoFileWriter())
                {
                    // create new video file
                    vFWriter.Open($"C://Users//Public/Videos//{nombreArchivo}.avi", width, height, framRate, VideoCodec.Default);


                    //loop throught all images in the collection
                    foreach (var frame in framesBmp)
                    {
                        //what's the current image data?

                        var bmpReduced = ReduceBitmap(frame, width, height);

                        vFWriter.WriteVideoFrame(bmpReduced);
                    }
                    vFWriter.Close();
                }
                //this.framesBmp = new List<Bitmap>();
            }
        }
예제 #24
0
        private void btnStart_Click(object sender, EventArgs e)
        {
            VideoCaptureDeviceForm videoSettings = new VideoCaptureDeviceForm();
            var result = videoSettings.ShowDialog(this);

            if (result == System.Windows.Forms.DialogResult.Cancel)
            {
                return;
            }

            // create video source
            videoSource = videoSettings.VideoDevice;
            // set NewFrame event handler
            videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
            // start the video source
            videoSource.Start();


            var      fileName = string.Format(@"C:\temp\capv\{0}.flv", Guid.NewGuid().ToString());
            FileInfo fInfo    = new FileInfo(fileName);

            if (!Directory.Exists(fInfo.DirectoryName))
            {
                Directory.CreateDirectory(fInfo.DirectoryName);
            }

            // create new video file
            writer.Open(fileName, 640, 480, 30, VideoCodec.FLV1);

            //start a timer to sync the video timeline
            timer = System.Diagnostics.Stopwatch.StartNew();

            ShowCurrentStatus("running");
        }
예제 #25
0
        private void CaptureDevice_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            Bitmap frame = eventArgs.Frame;

            lock (locker)
            {
                if (writerSet)
                {
                    try
                    {
                        fileWriter.WriteVideoFrame(frame);
                    }
                    catch (Exception e)
                    {
                    }
                    return;
                }

                DateTime dateTime = DateTime.Now;
                int      width    = frame.Width;
                int      height   = frame.Height;
                string   name     = dateTime.ToString("dd/MM/yyyy_hh-mm-ss");
                Directory.CreateDirectory(Directory.GetCurrentDirectory() + "\\Captures");
                fileWriter.Open(Directory.GetCurrentDirectory() + "\\Captures\\" + name + ".avi", width, height);

                writerSet = true;
            }
        }
예제 #26
0
        public static void createHeadHidedMovie(List <MyColorFrame> colorframes, List <MySkeletonFrame> skeletonframes, string path)
        {
            int width    = 640;
            int height   = 480;
            var framRate = 30;

            // create instance of video writer
            using (var vFWriter = new VideoFileWriter())
            {
                // create new video file
                vFWriter.Open(path, width, height, framRate, VideoCodec.MPEG4, 2000000);

                for (int i = 0; i < colorframes.Count; i++)
                {
                    if (skeletonframes.Count > i)
                    {
                        MyOverlayFrame        ovframe         = new MyOverlayFrame(skeletonframes.ElementAt(i), colorframes.ElementAt(i));
                        MemoryStream          frame_memstream = ovframe.getHeadHidedMemoryStream();
                        System.Drawing.Bitmap imageEntity     = (System.Drawing.Bitmap)System.Drawing.Image.FromStream(frame_memstream);
                        vFWriter.WriteVideoFrame(imageEntity);
                    }
                }
                vFWriter.Close();
            }
        }
예제 #27
0
        private async void CreateDesktopRecordThread()
        {
            var targetDirectory = Path.Combine(Environment.CurrentDirectory, VideoAppAdapterHandler.OriginName);

            if (!Directory.Exists(targetDirectory))
            {
                Directory.CreateDirectory(targetDirectory);
            }

            var fileName = Path.Combine(targetDirectory, $"摄像头查看_{VideoAppAdapterHandler.OriginName}_{DateTime.Now.ToString("yyyy-MM-dd hhmmss")}.avi");

            var videoWriter = new VideoFileWriter();

            videoWriter.Open(fileName, _videoFrameWidth, _videoFrameHeight, 10, VideoCodec.H264);

            do
            {
                if (!_videoFrame.IsNull())
                {
                    lock (this)
                        videoWriter.WriteVideoFrame(_videoFrame);
                    GC.Collect();
                }
                await Task.Delay(100); //帧率控制,每秒10帧,防止写入过快
            } while (!_stop);
            videoWriter.Close();
        }
예제 #28
0
        private void buttonRecordingCamOne_Click(object sender, EventArgs e)
        {
            if (cameraOne.IsRunning)
            {
                try
                {
                    var dialog = new SaveFileDialog();
                    dialog.FileName = "Video1";
                    dialog.DefaultExt = ".avi";
                    dialog.AddExtension = true;
                    var dialogresult = dialog.ShowDialog();
                    if (dialogresult != DialogResult.OK)
                    {
                        return;
                    }
                    firstFrameTime = null;
                    isRecording1 = true;
                    writer = new VideoFileWriter();
                    writer.Open(dialog.FileName, pbCam1.Image.Width, pbCam1.Image.Height, 30, VideoCodec.MPEG4);
                    buttonRecordingCamOne.Enabled = false;
                    buttonEndRecordingCamOne.Enabled = true;
                }
                catch
                {

                }
            }
        }
        static void Main(string[] args)
        {
            var options = new PicToAsciiOptions()
            {
                FixedDimension    = PicToAsciiOptions.Fix.Vertical,
                FixedSize         = 54,
                SymbolAspectRatio = 7f / 12f,
                AsciiTable        = PicToAsciiOptions.ASCIITABLE_SYMBOLIC_LIGHT
            };

            pic2ascii = new PicToAscii(options);

            font = new Font("Lucida Console", 12, FontStyle.Regular, GraphicsUnit.Pixel);

            writer = new VideoFileWriter( );
            writer.Open($"{MOV_PATH}~test.avi", width, height, 30, VideoCodec.MPEG4, 6000000);

            VideoFileSource videoSource = new VideoFileSource(MOVIESAMPLE_PATH);

            videoSource.NewFrame        += VideoSource_NewFrame;
            videoSource.PlayingFinished += VideoSource_PlayingFinished;
            videoSource.Start();

            Console.ReadLine();
            if (videoSource.IsRunning)
            {
                videoSource.SignalToStop();
                Console.ReadLine();
            }
        }
예제 #30
0
        public void captureStart(String filePath)
        {
            isRecording      = true;
            this.filePath    = filePath;
            vf               = new VideoFileWriter();
            startCaptureTime = DateTime.Now;
            filename         = filePath + "/" + DateTime.Now.ToString("yyyy-MM-dd-") + DateTime.Now.Hour.ToString() + "H" + DateTime.Now.Minute.ToString() + "M" + DateTime.Now.Second.ToString() + "S_video.mp4";

            int screenWidth  = (int)System.Windows.SystemParameters.PrimaryScreenWidth * 2;
            int screenHeight = (int)System.Windows.SystemParameters.PrimaryScreenHeight * 2;

            bmpScreenShot = new Bitmap(screenWidth, screenHeight);

            //vf.Width = screenWidth;
            //vf.Height = screenHeight;
            //vf.FrameSize = 25;
            //vf.VideoCodec = VideoCodec.Default;
            //vf.BitRate = 1000000;
            //vf.Open(filename);

            vf.Open(filename, screenWidth, screenHeight, 25, VideoCodec.Default, 500000);


            myCaptureThread = new Thread(new ThreadStart(captureFunction));
            myCaptureThread.Start();
        }
예제 #31
0
        private void CreateMovie(string videoName, string ImageName)
        {
            int width    = 400;
            int height   = 224;
            var framRate = 29;

            try
            {
                // create instance of video writer
                using (var vFWriter = new VideoFileWriter())
                {
                    // create new video file
                    vFWriter.Open(videoName, width, height, framRate, VideoCodec.MPEG4);
                    Bitmap map = new Bitmap(ImageName);
                    //what's the current image data?
                    //                       var bmp = ToBitmap(imageByte);
                    var bmpReduced = ReduceBitmap(map, width, height);

                    vFWriter.WriteVideoFrame(bmpReduced);
                    vFWriter.Close();
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
        private void btnStartVideo_Click(object sender, EventArgs e)
        {
            //创建一个视频文件



            String picName = @GetVideoPath() + "\\" + DateTime.Now.ToString("yyyyMMdd HH-mm-ss");

            picName = picName + ".avi";



            is_record_video = true;
            videoWriter     = new VideoFileWriter();

            if (GlobeVal.cam1.IsRunning)
            {
                videoWriter.Open(picName, GlobeVal.cam1.VideoCapabilities[0].FrameSize.Width, GlobeVal.cam1.VideoCapabilities[0].FrameSize.Height, fps, VideoCodec.MPEG4);
            }
            else
            {
                MessageBox.Show("没有视频源输入,无法录制视频。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            tick_num       = 0;
            timer1.Enabled = true;

            ifCam1 = true;
            btnStartVideo.Enabled = false;



            btnStopVideo.Enabled = true;
            btnTakePic.Enabled   = true;
        }
예제 #33
0
 private void ImageStartRecording_MouseDown(object sender, MouseButtonEventArgs e)
 {
     if (comboBoxFrameRate.Text != "Select frequency")
     {
         string dateStempel = DateTime.Now.ToString("d MMM yyyy, hh.mm.ss");
         videoPath = "C://Users//admin//Videos//Captures//" + dateStempel + ".mp4";
         labelMessageSavingFile.Visibility = Visibility.Visible;
         videoFileWriter = new VideoFileWriter();
         labelMessageSavingFile.Content = "Recording a screen in process";
         timerLabelMessageSavingFile.Start();
         timerLabelMessageSavingFile.Tick += TimerLabelMessageSavingFile_Tick;
         try {
             videoFileWriter.Open(videoPath, width, height, Int16.Parse(comboBoxFrameRate.SelectedItem.ToString()), VideoCodec.H265);
             //RecordAudio();
             timerRecording.Interval = TimeSpan.FromSeconds(1 / Int64.Parse(comboBoxFrameRate.SelectedItem.ToString()));
             timerRecording.Tick    += TimerRecording_Tick;                  //records video with demanded frequency
             timerRecording.Start();
         }
         catch (Exception ex) {
             MessageBox.Show(ex.ToString());
         }
     }
     else
     {
         MessageBox.Show("Choose frame rate number", "Info", MessageBoxButton.OK, MessageBoxImage.Information);
     }
 }
예제 #34
0
        static void Main(string[] args)
        {
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            VideoFileReader reader = new VideoFileReader();

            reader.Open(fileName);
            for (int i = 0; i < reader.FrameCount; i++)
            {
                read.Add(reader.ReadVideoFrame());
                write.Add(NegativGeneralas(read[i]));
            }

            VideoFileWriter writer = new VideoFileWriter();

            writer.Open("eredmeny_" + fileName, reader.Width, reader.Height, reader.FrameRate, VideoCodec.MPEG4, reader.BitRate);
            for (int i = 0; i < write.Count; i++)
            {
                writer.WriteVideoFrame(write[i]);
            }
            reader.Close();
            writer.Close();
            stopwatch.Stop();
            Console.WriteLine(stopwatch.Elapsed);
            Console.ReadLine();
        }
예제 #35
0
 public void StartRecording(String filenameToSave)
 {
     videoWriter = new VideoFileWriter();
     videoWriter.Open(filenameToSave, screenSize.Width, screenSize.Height, 25, VideoCodec.MPEG2);
     frameTimer.Start();
     isRecording = true;
     StartEyeStream();
 }
예제 #36
0
 public WriteVideoFile(string filePath, string codec, int frameRate, int width, int height)
 {
     VideoFile = new VideoFileWriter();
     VideoFile.Open(filePath, width, height, frameRate, VideoCodec.MPEG4);
     Codec = VideoCodec.MPEG4;
     FrameRate = frameRate;
     Width = width;
     Height = height;
 }
예제 #37
0
 public RecordSkeleton()
 {
     videoFolder = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Video");
     if (!Directory.Exists(videoFolder))
     {
         Directory.CreateDirectory(videoFolder);
     }
     Count++;
     writer1 = new VideoFileWriter();
     writer1.Open(System.IO.Path.Combine(videoFolder, Count.ToString() + "_color.avi"), videoWidthColor, videoHeightColor, 25, VideoCodec.MPEG4);
 }
예제 #38
0
        public static void CreateTimeLapse(string outputFilePath, int width, int height, int frameRate, bool orderByFileDate, string[] fileList)
        {
            try
            {
                using (var videoWriter = new VideoFileWriter())
                {
                    videoWriter.Open(outputFilePath, width, height, frameRate, VideoCodec.MPEG4, 1000000);

                    // use for ordering by file date
                    //System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(basePath);
                    //System.IO.FileSystemInfo[] images = di.GetFileSystemInfos();
                    //var orderedImages = images.OrderBy(f => f.CreationTime);

                    //foreach (FileSystemInfo imageFile in images)

                    foreach (string file in fileList)
                    {
                        // Out of Memory errors are common for incomplete or corrupted images.  Skip over them and continue.
                        try
                        {
                            using (Bitmap image = Image.FromFile(file) as Bitmap)
                            {
                                if (image != null)
                                {
                                    Bitmap bm = ResizeImage(image, width, height);
                                    videoWriter.WriteVideoFrame(bm);
                                }
                            }
                        }
                        catch
                        {
                            continue;
                        }
                    }

                    videoWriter.Close();
                }

            }
            catch (Exception)
            {

                throw;
            }

        }
예제 #39
0
        public override void Record(object o)
        {
            var r = (RecData)o;
            String outputFilePath = r.path;

            if (File.Exists(outputFilePath))
            {
                File.Delete(outputFilePath);
            }
            rec = true;
            var vFWriter = new VideoFileWriter();

            vFWriter.Open(outputFilePath, 800, 600, 5, VideoCodec.MPEG4);

            while (rec)
            {
                if (!pause)
                {
                    Stopwatch st = new Stopwatch();
                    st.Start();
                    using (Bitmap bmpScreenCapture = new Bitmap(r.width, r.height))
                    {
                        using (Graphics g = Graphics.FromImage(bmpScreenCapture))
                        {
                            g.CopyFromScreen(r.pos,
                                             new Point(0, 0),
                                             bmpScreenCapture.Size,
                                             CopyPixelOperation.SourceCopy);
                            Rectangle cursorBounds = new Rectangle(new Point(Cursor.Position.X - r.pos.X, Cursor.Position.Y - r.pos.Y), Cursors.Default.Size);
                            Cursors.Default.Draw(g, cursorBounds);
                        }
                        vFWriter.WriteVideoFrame(ReduceBitmap(bmpScreenCapture, 800, 600));
                        st.Stop();
                        var t = st.ElapsedMilliseconds;

                        if (200 - t > 0)
                            Thread.Sleep((int)(200 - t));
                    }

                }

            }

            vFWriter.Close();
        }
예제 #40
0
 public void test()
 {
     int width = 320;
     int height = 240;
     // create instance of video writer
     VideoFileWriter writer = new VideoFileWriter();
     // create new video file
     writer.Open("test.avi", width, height, 25, VideoCodec.MPEG4);
     // create a bitmap to save into the video file
     Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb);
     // write 1000 video frames
     for (int i = 0; i < 1000; i++)
     {
         image.SetPixel(i % width, i % height, Color.Red);
         writer.WriteVideoFrame(image);
     }
     writer.Close();
 }
예제 #41
0
        public VideoRecorder(Queue<Bitmap> frameBuffer, Size resolution)
        {
            this.frameBuffer = frameBuffer;
            this.writer = new VideoFileWriter();

            string filepath = Environment.CurrentDirectory + "\\videos\\";

            if (!Directory.Exists(filepath))
                Directory.CreateDirectory(Path.GetDirectoryName(filepath));

            string name = Guid.NewGuid().ToString() + ".avi";
            string filename = Path.Combine(filepath, name);
            try
            {
                if (!writer.IsOpen)
                    writer.Open(filename, resolution.Width, resolution.Height, 24, VideoCodec.MPEG2, 10000000);
            }
            catch (AccessViolationException)
            {

            }
        }
예제 #42
0
 static void Main(string[] args)
 {
     if (args.Length < 3)
         printHelp();
     else
     {
         var dinfo = new DirectoryInfo(args[0]);
         var files = dinfo.GetFiles(args[1]).OrderBy(p => p.Name).ToArray();
         if (files.Length > 0)
         {
             Bitmap image = (Bitmap)Image.FromFile(files[0].FullName);
             var vFWriter = new VideoFileWriter();
             vFWriter.Open(args[2], image.Width, image.Height, 50, VideoCodec.MPEG4);
             foreach (var file in files)
             {
                 Console.WriteLine(file.FullName);
                 image = (Bitmap)Image.FromFile(file.FullName);
                 vFWriter.WriteVideoFrame(image);
             }
             vFWriter.Close();
         }
     }
 }
예제 #43
0
        private void button3_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfVideoKaydet = new SaveFileDialog();
            if (sfVideoKaydet.ShowDialog() != System.Windows.Forms.DialogResult.OK)
            {
                MessageBox.Show("Kayit Yeri Seçilmedi");
                return;
            }

            int width = 100;
            int height = 100;
            Image ImgOrnek = (Image.FromFile("C:\\Users\\Halil\\Desktop\\newframes\\image0.jpg") as Bitmap).Clone() as Image;
            width = ImgOrnek.Width;
            height = ImgOrnek.Height;
            ImgOrnek.Dispose();
            VideoFileWriter writer = new VideoFileWriter();
            writer.Open(sfVideoKaydet.FileName, width, height, this.Videofps, VideoCodec.MPEG4);
            yol = sfVideoKaydet.FileName;
            Bitmap image = new Bitmap(width, height, PixelFormat.Format24bppRgb);
            DirectoryInfo dir = new DirectoryInfo(fbdFramePath.SelectedPath + "\\");
            int FrameSayisi = dir.GetFiles().Length;
            for (int i = 0; i < FrameSayisi - 3; i++)
            {
                image = (Bitmap)Image.FromFile("C:\\Users\\Halil\\Desktop\\newframes\\image" + i + ".jpg");
                writer.WriteVideoFrame(image);

            }

            writer.Close();
            writer.Dispose();
            MessageBox.Show("Video Olusturuldu");
            btnGonder.Enabled = true;
        }
예제 #44
0
        /// <summary>
        ///   Starts recording. Only works if the player has
        ///   already been started and is grabbing frames.
        /// </summary>
        /// 
        public void StartRecording()
        {
            if (IsRecording || !IsPlaying) return;

            Rectangle area = CaptureRegion;
            string fileName = newFileName();

            int height = area.Height;
            int width = area.Width;
            int framerate = 1000 / screenStream.FrameInterval;
            int videoBitRate = 10 * 1000 * 1000;
            int audioBitRate = 320 * 1000;

            OutputPath = Path.Combine(main.CurrentDirectory, fileName);
            RecordingStartTime = DateTime.MinValue;
            videoWriter = new VideoFileWriter();

            if (CaptureAudioDevice != null)
            {
                audioDevice = new AudioCaptureDevice(CaptureAudioDevice.Guid);
                audioDevice.Format = SampleFormat.Format16Bit;
                audioDevice.SampleRate = Settings.Default.SampleRate;
                audioDevice.DesiredFrameSize = 4096;
                audioDevice.NewFrame += audioDevice_NewFrame;
                audioDevice.Start();

                videoWriter.Open(OutputPath, width, height, framerate, VideoCodec.H264, videoBitRate,
                    AudioCodec.MP3, audioBitRate, audioDevice.SampleRate, 1);
            }
            else
            {
                videoWriter.Open(OutputPath, width, height, framerate, VideoCodec.H264, videoBitRate);
            }

            HasRecorded = false;
            IsRecording = true;
        }
예제 #45
0
        public string RecordingPath = "recording"; // default recording path

        private void DoRecord()
        {
            //// we set our VideoFileWriter as well as the file name, resolution and fps
            VideoFileWriter writer = new VideoFileWriter();
            string filename = String.Format("{0}\\{1}_{2:dd-MM-yyyy_hh-mm-ss}.avi",
                RecordingPath, cameraName, DateTime.Now);
            string logStr = "";
            int afr =0;

            if (cam.VideoResolution.FrameSize.Width * cam.VideoResolution.FrameSize.Height >= 1024 * 768)
            {
                afr = 10; // minimum framerate is 10?
            }
            else afr = cam.VideoResolution.AverageFrameRate;
            writer.Open(filename, cam.VideoResolution.FrameSize.Width,
                cam.VideoResolution.FrameSize.Height,
                afr,
                VideoCodec.MPEG4);  // (int)(cam.VideoResolution.AverageFrameRate / 3)
            logStr = String.Format("DoRecord({0}) with ({1},{2}) x {3}",
                filename, cam.VideoResolution.FrameSize.Width,
                cam.VideoResolution.FrameSize.Height,
                afr);
            Program.mf.log(logStr);

            // as long as we're recording
            // we dequeue the BitMaps waiting in the Queue and write them to the file
            while (IsRecording)
            {
                if (frames.Count > 0)
                {
                    Bitmap bmp = frames.Dequeue();
                    writer.WriteVideoFrame(bmp);
                    bmp.Dispose();
                }
            }
            writer.Close();
        }
예제 #46
0
        private void b_Record_Click(object sender, EventArgs e)
        {
            if (bVideoConnected)
            {
                if (bVideoRecording == false)
                {
                    if (vfwWriter != null) { vfwWriter.Close(); }

                    l_capture_file.Text = "capture" + String.Format("-{0:yymmdd-hhmm}", DateTime.Now);
                    vfwWriter = new VideoFileWriter();
                    //create new video file
                    vfwWriter.Open(gui_settings.sCaptureFolder + "\\capture" + String.Format("-{0:yyMMdd-hhmm}", DateTime.Now) + ".avi", 640, 480, (int)nFrameRate.Value, (VideoCodec)cb_codec.SelectedIndex, (int)(1000000 * nBitRate.Value));
                    b_Record.Text = "Recording";
                    b_Record.BackColor = Color.Red;
                    tsFrameTimeStamp = new TimeSpan(0);
                    tsFrameRate = new TimeSpan(10000000 / (long)nFrameRate.Value);
                    bVideoRecording = true;
                }
                else
                {
                    bVideoRecording = false;
                    System.Threading.Thread.Sleep(50);
                    b_Record.Text = "Start Recording";
                    b_Record.BackColor = Color.Transparent;
                    vfwWriter.Close();
                    l_capture_file.Text = "";
                }
            }
        }
예제 #47
0
파일: CameraWindow.cs 프로젝트: tdhieu/iSpy
        private void Record()
        {
            try
            {
                MainForm.RecordingThreads++;
                AbortedAudio = false;
                LogToPlugin("Recording Started");
                string linktofile = "";
                
                
                string previewImage = "";
                try
                {

                    if (!string.IsNullOrEmpty(Camobject.recorder.trigger))
                    {
                        string[] tid = Camobject.recorder.trigger.Split(',');
                        switch (tid[0])
                        {
                            case "1":
                                VolumeLevel vl = MainForm.InstanceReference.GetVolumeLevel(Convert.ToInt32(tid[1]));
                                if (vl != null && !vl.Recording)
                                    vl.RecordSwitch(true);
                                break;
                            case "2":
                                CameraWindow cw = MainForm.InstanceReference.GetCameraWindow(Convert.ToInt32(tid[1]));
                                if (cw != null && !cw.Recording)
                                    cw.RecordSwitch(true);
                                break;
                        }
                    }

                    try
                    {
                        DateTime date = DateTime.Now.AddHours(Convert.ToDouble(Camobject.settings.timestampoffset));

                        string filename =
                            $"{date.Year}-{Helper.ZeroPad(date.Month)}-{Helper.ZeroPad(date.Day)}_{Helper.ZeroPad(date.Hour)}-{Helper.ZeroPad(date.Minute)}-{Helper.ZeroPad(date.Second)}";


                        var vc = VolumeControl;
                        bool bAudio = vc?.AudioSource != null && vc.Micobject.settings.active;

                        if (bAudio)
                        {
                            vc.StartSaving();
                            vc.ForcedRecording = ForcedRecording;
                        }

                        VideoFileName = Camobject.id + "_" + filename;
                        string folder = Dir.Entry + "video\\" + Camobject.directory + "\\";

                        string videopath = folder + VideoFileName + CodecExtension;
                        bool error = false;
                        double maxAlarm = 0;
                        long lastvideopts = -1, lastaudiopts = -1;
                        DateTime recordingStart = Helper.Now;
                        try
                        {
                            if (!Directory.Exists(folder))
                                Directory.CreateDirectory(folder);

                            try
                            {

                                Program.FfmpegMutex.WaitOne();
                                _writer = new VideoFileWriter();

                                bool bSuccess;
                                if (bAudio)
                                {
                                    bSuccess = _writer.Open(videopath, _videoWidth, _videoHeight, Codec,
                                        CalcBitRate(Camobject.recorder.quality), CodecAudio, CodecFramerate,
                                        vc.Micobject.settings.bits*
                                        vc.Micobject.settings.samples*
                                        vc.Micobject.settings.channels,
                                        vc.Micobject.settings.samples, vc.Micobject.settings.channels);
                                }
                                else
                                {
                                    bSuccess = _writer.Open(videopath, _videoWidth, _videoHeight, Codec,
                                        CalcBitRate(Camobject.recorder.quality), CodecFramerate);
                                }

                                if (!bSuccess)
                                {
                                    throw new Exception("Failed to open up a video writer");
                                }
                                else
                                {
                                    try
                                    {
                                        bool success;
                                        linktofile = HttpUtility.UrlEncode(MainForm.ExternalURL(out success) + "loadclip.mp4?oid=" + Camobject.id + "&ot=2&fn=" + VideoFileName + CodecExtension + "&auth=" + MainForm.Identifier);
                                        if (!success)
                                        {
                                            linktofile = "";
                                            throw new Exception("External IP unavailable");
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        Logger.LogExceptionToFile(ex, "Generating external link to file");
                                    }
                                    DoAlert("recordingstarted", linktofile);
                                }

                            }
                            finally
                            {
                                try
                                {
                                    Program.FfmpegMutex.ReleaseMutex();
                                }
                                catch (ObjectDisposedException)
                                {
                                    //can happen on shutdown
                                }
                            }


                            Helper.FrameAction? peakFrame = null;
                            bool first = true;

                            while (!_stopWrite.WaitOne(5))
                            {
                                Helper.FrameAction fa;
                                if (Buffer.TryDequeue(out fa))
                                {
                                    if (first)
                                    {
                                        recordingStart = fa.TimeStamp;
                                        first = false;
                                    }

                                    WriteFrame(fa, recordingStart, ref lastvideopts, ref maxAlarm, ref peakFrame,
                                        ref lastaudiopts);
                                }
                                if (bAudio)
                                {
                                    if (vc.Buffer.TryDequeue(out fa))
                                    {
                                        if (first)
                                        {
                                            recordingStart = fa.TimeStamp;
                                            first = false;
                                        }

                                        WriteFrame(fa, recordingStart, ref lastvideopts, ref maxAlarm, ref peakFrame,
                                            ref lastaudiopts);
                                    }
                                }
                            }

                            if (!Directory.Exists(folder + @"thumbs\"))
                                Directory.CreateDirectory(folder + @"thumbs\");

                            if (peakFrame != null && peakFrame.Value.Content != null)
                            {
                                try
                                {
                                    using (var ms = new MemoryStream(peakFrame.Value.Content))
                                    {
                                        using (var bmp = (Bitmap) Image.FromStream(ms))
                                        {
                                            bmp.Save(folder + @"thumbs\" + VideoFileName + "_large.jpg",
                                                MainForm.Encoder,
                                                MainForm.EncoderParams);
                                            Image.GetThumbnailImageAbort myCallback = ThumbnailCallback;
                                            using (
                                                var myThumbnail = bmp.GetThumbnailImage(96, 72, myCallback, IntPtr.Zero)
                                                )
                                            {
                                                myThumbnail.Save(folder + @"thumbs\" + VideoFileName + ".jpg",
                                                    MainForm.Encoder,
                                                    MainForm.EncoderParams);
                                            }
                                        }
                                        previewImage = folder + @"thumbs\" + VideoFileName + ".jpg";
                                        ms.Close();
                                    }
                                }
                                catch (Exception ex)
                                {
                                    ErrorHandler?.Invoke(ex.Message + ": " + ex.StackTrace);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            error = true;
                            ErrorHandler?.Invoke(ex.Message + " (" + ex.StackTrace + ")");
                        }
                        finally
                        {
                            if (_writer != null && _writer.IsOpen)
                            {
                                try
                                {
                                    Program.FfmpegMutex.WaitOne();
                                    _writer.Dispose();
                                }
                                catch (Exception ex)
                                {
                                    ErrorHandler?.Invoke(ex.Message);
                                }
                                finally
                                {
                                    try
                                    {
                                        Program.FfmpegMutex.ReleaseMutex();
                                    }
                                    catch (ObjectDisposedException)
                                    {
                                        //can happen on shutdown
                                    }
                                }

                                _writer = null;
                            }
                            if (bAudio)
                                vc.StopSaving();
                        }
                        if (_firstFrame)
                        {
                            error = true;
                        }
                        if (error)
                        {
                            try
                            {
                                if (File.Exists(videopath))
                                    FileOperations.Delete(videopath);
                            }
                            catch
                            {
                                // ignored
                            }
                            MainForm.RecordingThreads--;
                            ClearBuffer();

                            goto end;
                        }


                        string path = Dir.Entry + "video\\" + Camobject.directory + "\\" +
                                      VideoFileName;

                        string[] fnpath = (path + CodecExtension).Split('\\');
                        string fn = fnpath[fnpath.Length - 1];
                        //var fpath = Dir.Entry + "video\\" + Camobject.directory + "\\thumbs\\";
                        var fi = new FileInfo(path + CodecExtension);
                        var dSeconds = Convert.ToInt32((Helper.Now - recordingStart).TotalSeconds);

                        var ff = _filelist.FirstOrDefault(p => p.Filename.EndsWith(fn));
                        bool newfile = false;
                        if (ff == null)
                        {
                            ff = new FilesFile();
                            newfile = true;
                        }

                        ff.CreatedDateTicks = DateTime.Now.Ticks;
                        ff.Filename = fn;
                        ff.MaxAlarm = Math.Min(maxAlarm*100, 100);
                        ff.SizeBytes = fi.Length;
                        ff.DurationSeconds = dSeconds;
                        ff.IsTimelapse = false;
                        ff.IsMergeFile = false;
                        ff.AlertData = Helper.GetMotionDataPoints(_motionData);
                        _motionData.Clear();
                        ff.TriggerLevel = (100 - Camobject.detector.minsensitivity); //adjusted
                        ff.TriggerLevelMax = (100 - Camobject.detector.maxsensitivity);

                        if (newfile)
                        {
                            lock (_lockobject)
                                _filelist.Insert(0, ff);

                            MainForm.MasterFileAdd(new FilePreview(fn, dSeconds, Camobject.name, DateTime.Now.Ticks, 2,
                                Camobject.id, ff.MaxAlarm, false, false));
                            MainForm.NeedsMediaRefresh = Helper.Now;
                            if (Camobject.settings.cloudprovider.recordings)
                            {
                                CloudGateway.Upload(2, Camobject.id, path + CodecExtension);
                            }
                            if (Camobject.recorder.ftpenabled)
                            {
                                FtpRecording(path + CodecExtension);
                            }
                        }
                        AbortedAudio = false;

                    }
                    catch (Exception ex)
                    {
                        ErrorHandler?.Invoke(ex.Message);
                    }

                    if (!string.IsNullOrEmpty(Camobject.recorder.trigger))
                    {
                        string[] tid = Camobject.recorder.trigger.Split(',');
                        switch (tid[0])
                        {
                            case "1":
                                VolumeLevel vl = MainForm.InstanceReference.GetVolumeLevel(Convert.ToInt32(tid[1]));
                                if (vl != null)
                                    vl.ForcedRecording = false;
                                break;
                            case "2":
                                CameraWindow cw = MainForm.InstanceReference.GetCameraWindow(Convert.ToInt32(tid[1]));
                                if (cw != null)
                                {
                                    cw.ForcedRecording = false;
                                    var vc = cw.VolumeControl;
                                    if (vc != null)
                                    {
                                        vc.ForcedRecording = false;
                                    }
                                }
                                break;
                        }
                    }
                }
                finally
                {
                    MainForm.RecordingThreads--;
                }
                Camobject.newrecordingcount++;

                Notification?.Invoke(this, new NotificationType("NewRecording", Camobject.name, previewImage));

                end:

                LogToPlugin("Recording Stopped");
                DoAlert("recordingstopped", linktofile);
            }
            catch (Exception ex)
            {
                Logger.LogExceptionToFile(ex);
            }
        }
예제 #48
0
파일: CameraWindow.cs 프로젝트: tdhieu/iSpy
        private bool OpenTimeLapseWriter()
        {
            DateTime date = DateTime.Now;
            String filename =
                $"TimeLapse_{date.Year}-{Helper.ZeroPad(date.Month)}-{Helper.ZeroPad(date.Day)}_{Helper.ZeroPad(date.Hour)}-{Helper.ZeroPad(date.Minute)}-{Helper.ZeroPad(date.Second)}";
            TimeLapseVideoFileName = Camobject.id + "_" + filename;
            string folder = Dir.Entry + "video\\" + Camobject.directory + "\\";

            if (!Directory.Exists(folder + @"thumbs\"))
                Directory.CreateDirectory(folder + @"thumbs\");

            filename = folder + TimeLapseVideoFileName;


            Bitmap bmpPreview = LastFrame;

            if (bmpPreview != null)
            {

                bmpPreview.Save(folder + @"thumbs/" + TimeLapseVideoFileName + "_large.jpg", MainForm.Encoder,
                    MainForm.EncoderParams);
                Image.GetThumbnailImageAbort myCallback = ThumbnailCallback;
                Image myThumbnail = bmpPreview.GetThumbnailImage(96, 72, myCallback, IntPtr.Zero);

                Graphics g = Graphics.FromImage(myThumbnail);
                var strFormat = new StringFormat
                                {
                                    Alignment = StringAlignment.Center,
                                    LineAlignment = StringAlignment.Far
                                };
                var rect = new RectangleF(0, 0, 96, 72);

                g.DrawString(LocRm.GetString("Timelapse"), MainForm.Drawfont, MainForm.OverlayBrush,
                    rect, strFormat);
                strFormat.Dispose();

                myThumbnail.Save(folder + @"thumbs/" + TimeLapseVideoFileName + ".jpg", MainForm.Encoder,
                    MainForm.EncoderParams);

                g.Dispose();
                myThumbnail.Dispose();
                bmpPreview.Dispose();
            }


            _timeLapseWriter = null;
            bool success = false;

            try
            {
                try
                {
                    Program.FfmpegMutex.WaitOne();
                    _timeLapseWriter = new VideoFileWriter();
                    _timeLapseWriter.Open(filename + CodecExtension, _videoWidth, _videoHeight, Codec,
                                          CalcBitRate(Camobject.recorder.quality), Camobject.recorder.timelapseframerate);

                    success = true;
                    TimelapseStart = Helper.Now;
                }
                catch (Exception ex)
                {
                    ErrorHandler?.Invoke(ex.Message);
                    _timeLapseWriter = null;
                    //Camobject.recorder.timelapse = 0;
                }
                finally
                {
                    try
                    {
                        Program.FfmpegMutex.ReleaseMutex();
                    }
                    catch (ObjectDisposedException)
                    {
                        //can happen on shutdown
                    }
                }
            }
            catch (Exception ex)
            {
                ErrorHandler?.Invoke(ex.Message);
            }
            return success;
        }
예제 #49
0
 public static void NewWriter(string filename, int w, int h)
 {
     writer = new VideoFileWriter();
     // create new AVI file and open it
     writer.Open(filename, w, h,30, VideoCodec.Default , 5500000);
 }
예제 #50
0
        static void Main(string[] args)
        {
            int width = 512;
            int height = width;
            int[] framerates = {60, 120, 180};

            double preamblePostamble = 0.5;    // seconds
            double movieLength = 60.0;    // seconds

            foreach (var framerate in framerates)
            {
                VideoFileWriter writer = new VideoFileWriter();
                VideoCodec codec = VideoCodec.WMV2;

                string fname = "test." + codec.ToString() + "." + framerate.ToString("000") + "Hz." + movieLength.ToString() + "sec." + width.ToString() + "." + height.ToString() + ".avi";
                writer.Open(fname, width, height, framerate, codec);

                RectangleF rectText = new RectangleF(width / 2, 0, width / 2, height);
                RectangleF rectBlock = new RectangleF(0, 0, width / 2, height);

                Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
                SolidBrush brushWhite = new SolidBrush(Color.White);
                SolidBrush brushBlack = new SolidBrush(Color.Black);
                var font = new Font("Tahoma", width <= 64 ? 8 : width <= 128 ? 12 : width <=256 ? 16 : 20);

                // Preamble
                for (int i = 0; i < (int)(framerate * preamblePostamble); i++)
                {
                    using (Graphics g = Graphics.FromImage(bmp))
                    {
                        g.Clear(Color.Black);
                        g.Flush();
                    }
                    writer.WriteVideoFrame(bmp);
                }

                for (int i = 0; i < (int)(framerate * movieLength); i++)
                {
                    bmp.SetPixel(i % width, i % height, Color.Blue);

                    using (Graphics g = Graphics.FromImage(bmp))
                    {
                        g.Clear(Color.Black);
                        g.SmoothingMode = SmoothingMode.AntiAlias;
                        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                        g.PixelOffsetMode = PixelOffsetMode.HighQuality;
                        g.DrawString(i.ToString(), font, Brushes.White, rectText);

                        g.FillRectangle(((i & 1) == 0) ? brushWhite : brushBlack, rectBlock);
                        g.Flush();
                    }
                    writer.WriteVideoFrame(bmp);
                }

                // Postamble
                for (int i = 0; i < (int)(framerate * preamblePostamble); i++)
                {
                    using (Graphics g = Graphics.FromImage(bmp))
                    {
                        g.Clear(Color.Black);
                        g.Flush();
                    }
                    writer.WriteVideoFrame(bmp);
                }

                writer.Close();
            }
        }
예제 #51
0
파일: CameraWindow.cs 프로젝트: vmail/main
        private void Record()
        {
            _stopWrite = false;
            MainForm.RecordingThreads++;
            string previewImage = "";
            DateTime recordingStart = DateTime.MinValue;

            if (!String.IsNullOrEmpty(Camobject.recorder.trigger) && TopLevelControl != null)
            {
                string[] tid = Camobject.recorder.trigger.Split(',');
                switch (tid[0])
                {
                    case "1":
                        VolumeLevel vl = ((MainForm)TopLevelControl).GetVolumeLevel(Convert.ToInt32(tid[1]));
                        if (vl != null)
                            vl.RecordSwitch(true);
                        break;
                    case "2":
                        CameraWindow cw = ((MainForm)TopLevelControl).GetCameraWindow(Convert.ToInt32(tid[1]));
                        if (cw != null)
                            cw.RecordSwitch(true);
                        break;
                }
            }

            try {
                if (_writerBuffer != null)
                    _writerBuffer.Clear();
                _writerBuffer = new QueueWithEvents<FrameAction>();
                _writerBuffer.Changed += WriterBufferChanged;
                DateTime date = DateTime.Now;

                string filename = String.Format("{0}-{1}-{2}_{3}-{4}-{5}",
                                                date.Year, Helper.ZeroPad(date.Month), Helper.ZeroPad(date.Day),
                                                Helper.ZeroPad(date.Hour), Helper.ZeroPad(date.Minute),
                                                Helper.ZeroPad(date.Second));

                var vc = VolumeControl;
                if (vc != null && vc.Micobject.settings.active)
                {
                    vc.ForcedRecording = ForcedRecording;
                    vc.StartSaving();
                }

                VideoFileName = Camobject.id + "_" + filename;
                string folder = MainForm.Conf.MediaDirectory + "video\\" + Camobject.directory + "\\";
                string avifilename = folder + VideoFileName + CodecExtension;
                bool error = false;
                double maxAlarm = 0;

                try
                {

                    int w, h;
                    GetVideoSize(out w, out h);
                    Program.WriterMutex.WaitOne();

                    try
                    {
                        Writer = new VideoFileWriter();
                        if (vc == null || vc.AudioSource==null)
                            Writer.Open(avifilename, w, h, Camobject.recorder.crf, Codec,
                                        CalcBitRate(Camobject.recorder.quality), CodecFramerate);
                        else
                        {

                            Writer.Open(avifilename, w, h, Camobject.recorder.crf, Codec,
                                        CalcBitRate(Camobject.recorder.quality), CodecAudio, CodecFramerate,
                                        vc.AudioSource.RecordingFormat.BitsPerSample * vc.AudioSource.RecordingFormat.SampleRate * vc.AudioSource.RecordingFormat.Channels,
                                        vc.AudioSource.RecordingFormat.SampleRate, vc.AudioSource.RecordingFormat.Channels);
                        }
                    }
                    catch
                    {
                        ForcedRecording = false;
                        if (vc != null)
                        {
                            vc.ForcedRecording = false;
                            vc.StopSaving();
                        }
                        throw;
                    }
                    finally
                    {
                        Program.WriterMutex.ReleaseMutex();
                    }

                    FrameAction? peakFrame = null;

                    foreach(FrameAction fa in _videoBuffer.OrderBy(p=>p.Timestamp))
                    {
                        try
                        {
                            using (var ms = new MemoryStream(fa.Frame))
                            {
                                using (var bmp = (Bitmap)Image.FromStream(ms))
                                {
                                    if (recordingStart == DateTime.MinValue)
                                    {
                                        recordingStart = fa.Timestamp;
                                    }
                                    Writer.WriteVideoFrame(ResizeBitmap(bmp), fa.Timestamp - recordingStart);
                                }

                                if (fa.MotionLevel > maxAlarm || peakFrame == null)
                                {
                                    maxAlarm = fa.MotionLevel;
                                    peakFrame = fa;
                                }
                                _motionData.Append(String.Format(CultureInfo.InvariantCulture,
                                                                "{0:0.000}", Math.Min(fa.MotionLevel*1000, 100)));
                                _motionData.Append(",");
                                ms.Close();
                            }
                        }
                        catch (Exception ex)
                        {
                            Log.Error("",ex);//MainForm.LogExceptionToFile(ex);
                        }

                    }
                    _videoBuffer.Clear();

                    if (vc != null && vc.AudioBuffer != null)
                    {
                        foreach (VolumeLevel.AudioAction aa in vc.AudioBuffer.OrderBy(p=>p.TimeStamp))
                        {
                            unsafe
                            {
                                fixed (byte* p = aa.Decoded)
                                {
                                    if ((aa.TimeStamp - recordingStart).TotalMilliseconds>=0)
                                        Writer.WriteAudio(p, aa.Decoded.Length);
                                }
                            }
                        }
                        vc.AudioBuffer.Clear();
                    }

                    if (recordingStart == DateTime.MinValue)
                        recordingStart = DateTime.Now;

                    while (!_stopWrite)
                    {
                        while (_writerBuffer.Count > 0)
                        {
                            var fa = _writerBuffer.Dequeue();
                            try
                            {
                                using (var ms = new MemoryStream(fa.Frame))
                                {

                                    var bmp = (Bitmap) Image.FromStream(ms);
                                    Writer.WriteVideoFrame(ResizeBitmap(bmp), fa.Timestamp - recordingStart);
                                    bmp.Dispose();
                                    bmp = null;

                                    if (fa.MotionLevel > maxAlarm || peakFrame == null)
                                    {
                                        maxAlarm = fa.MotionLevel;
                                        peakFrame = fa;
                                    }
                                    _motionData.Append(String.Format(CultureInfo.InvariantCulture,
                                                                    "{0:0.000}",
                                                                    Math.Min(fa.MotionLevel*1000, 100)));
                                    _motionData.Append(",");
                                    ms.Close();
                                }
                            }
                            catch (Exception ex)
                            {
                                Log.Error("",ex);//MainForm.LogExceptionToFile(ex);
                            }
                            if (vc != null && vc.WriterBuffer != null)
                            {
                                try
                                {
                                    while (vc.WriterBuffer.Count > 0)
                                    {

                                        var b = vc.WriterBuffer.Dequeue();
                                        unsafe
                                        {
                                            fixed (byte* p = b.Decoded)
                                            {
                                                Writer.WriteAudio(p, b.Decoded.Length);
                                            }
                                        }
                                    }
                                }
                                catch
                                {
                                    //can fail if the control is switched off/removed whilst recording

                                }
                            }

                        }
                        _newRecordingFrame.WaitOne(200);
                    }

                    if (!Directory.Exists(folder + @"thumbs\"))
                        Directory.CreateDirectory(folder + @"thumbs\");

                    if (peakFrame != null)
                    {
                        using (var ms = new MemoryStream(peakFrame.Value.Frame))
                        {
                            using (var bmp = (Bitmap)Image.FromStream(ms))
                            {
                                bmp.Save(folder + @"thumbs\" + VideoFileName + "_large.jpg", MainForm.Encoder,
                                         MainForm.EncoderParams);
                                Image.GetThumbnailImageAbort myCallback = ThumbnailCallback;
                                using (var myThumbnail = bmp.GetThumbnailImage(96, 72, myCallback, IntPtr.Zero))
                                {
                                    myThumbnail.Save(folder + @"thumbs\" + VideoFileName + ".jpg", MainForm.Encoder,
                                                     MainForm.EncoderParams);
                                }
                            }
                            previewImage = folder + @"thumbs\" + VideoFileName + ".jpg";
                            ms.Close();
                        }
                    }
                }
                catch (Exception ex)
                {
                    error = true;
                    Log.Error("Camera " + Camobject.id, ex);
                }
                finally
                {
                    _stopWrite = false;
                    if (Writer != null)
                    {
                        Program.WriterMutex.WaitOne();
                        try
                        {

                            Writer.Close();
                            Writer.Dispose();
                        }
                        catch (Exception ex)
                        {
                            Log.Error("",ex);//MainForm.LogExceptionToFile(ex);
                        }
                        finally
                        {
                            Program.WriterMutex.ReleaseMutex();
                        }

                        Writer = null;
                    }

                    try
                    {
                        _writerBuffer.Clear();
                    }
                    catch
                    {
                    }

                    _writerBuffer = null;
                    _recordingTime = 0;
                    if (vc != null && vc.Micobject.settings.active)
                        VolumeControl.StopSaving();
                }
                if (error)
                {
                    try
                    {
                        FileOperations.Delete(filename + CodecExtension);
                    }
                    catch
                    {
                    }
                    MainForm.RecordingThreads--;
                    return;
                }

                string path = MainForm.Conf.MediaDirectory + "video\\" + Camobject.directory + "\\" +
                              VideoFileName;

                bool yt = Camobject.settings.youtube.autoupload && MainForm.Conf.Subscribed;

                string[] fnpath = (path + CodecExtension).Split('\\');
                string fn = fnpath[fnpath.Length - 1];
                var fpath = MainForm.Conf.MediaDirectory + "video\\" + Camobject.directory + "\\thumbs\\";
                var fi = new FileInfo(path + CodecExtension);
                var dSeconds = Convert.ToInt32((DateTime.Now - recordingStart).TotalSeconds);

                FilesFile ff = FileList.FirstOrDefault(p => p.Filename.EndsWith(fn));
                bool newfile = false;
                if (ff == null)
                {
                    ff = new FilesFile();
                    newfile = true;
                }

                ff.CreatedDateTicks = DateTime.Now.Ticks;
                ff.Filename = fn;
                ff.MaxAlarm = Math.Min(maxAlarm * 1000, 100);
                ff.SizeBytes = fi.Length;
                ff.DurationSeconds = dSeconds;
                ff.IsTimelapse = false;
                ff.AlertData = Helper.GetMotionDataPoints(_motionData);
                _motionData.Clear();
                ff.TriggerLevel = (100-Camobject.detector.minsensitivity); //adjusted

                if (newfile)
                {
                    FileList.Insert(0, ff);

                    if (!MainForm.MasterFileList.Any(p => p.Filename.EndsWith(fn)))
                    {
                        MainForm.MasterFileList.Add(new FilePreview(fn, dSeconds, Camobject.name, DateTime.Now.Ticks, 2,
                                                                    Camobject.id, ff.MaxAlarm));
                        if (TopLevelControl != null)
                        {
                            string thumb = fpath + fn.Replace(CodecExtension, ".jpg");

                            ((MainForm)TopLevelControl).AddPreviewControl(thumb, path + CodecExtension, dSeconds,
                                                                           DateTime.Now, true);
                        }
                    }

                    if (yt)
                    {
                        if (CodecExtension!=".mp4")
                            Log.Info("Skipped youtube upload (only upload mp4 files).");
                        else
                        {
                            try
                            {
                                YouTubeUploader.AddUpload(Camobject.id, fn, Camobject.settings.youtube.@public, "", "");
                            }
                            catch (Exception ex)
                            {
                                Log.Error("",ex);//MainForm.LogExceptionToFile(ex);
                            }
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                Log.Error("",ex);//MainForm.LogExceptionToFile(ex);
            }
            MainForm.RecordingThreads--;
            Camobject.newrecordingcount++;

            if (!String.IsNullOrEmpty(Camobject.recorder.trigger) && TopLevelControl != null)
            {
                string[] tid = Camobject.recorder.trigger.Split(',');
                switch (tid[0])
                {
                    case "1":
                        VolumeLevel vl = ((MainForm)TopLevelControl).GetVolumeLevel(Convert.ToInt32(tid[1]));
                        if (vl != null)
                            vl.RecordSwitch(false);
                        break;
                    case "2":
                        CameraWindow cw = ((MainForm)TopLevelControl).GetCameraWindow(Convert.ToInt32(tid[1]));
                        if (cw != null)
                            cw.RecordSwitch(false);
                        break;
                }
            }

            if (Notification != null)
                Notification(this, new NotificationType("NewRecording", Camobject.name, previewImage));
        }
예제 #52
0
        private void StartInternal( RecordSettings settings ) {
            try {
                _stopwatch = _stopwatch ?? new Stopwatch();
                _stopwatch.Reset();
                _stopwatch.Start();
                StopWaiter.Reset();
                if ( !Directory.Exists( settings.OutputPath ) ) Directory.CreateDirectory( settings.OutputPath );
                while ( Recording ) {
                    var outfile = Path.Combine( settings.OutputPath, DateTime.Now.ToFileTime().ToString() + ".avi" );
                    using (var outstream = new VideoFileWriter()) {
                        var sourceRect = settings.CaptureRectangle;
                        var w = sourceRect.Width;
                        var h = sourceRect.Height;

                        outstream.Open(
                            outfile,
                            w,
                            h,
                            settings.Fps,
                            settings.Codec,
                            settings.Bitrate );

                        var mpf = settings.SplitInterval * 60000 / settings.Interval;
                        using ( var bmp = new Bitmap( w, h ) ) {
                            using ( var gr = Graphics.FromImage( bmp ) ) {
                                for ( var i = 0; (mpf==null||i < mpf) && Recording; i++ ) {
                                    try {
                                        gr.CopyFromScreen( sourceRect.X, sourceRect.Y, 0, 0, sourceRect.Size );
                                        PreprocessFrame( gr, settings );
                                        gr.Flush();
                                        outstream.WriteVideoFrame( bmp );
                                        settings.OnFrameWritten?.Invoke( _stopwatch.Elapsed );
                                    }
                                    catch { }
                                    Thread.Sleep( settings.Interval );
                                }
                            }
                        }
                    }
                }
            }
            catch(Exception ex) {
                //global
            }
            finally {
                _stopwatch?.Stop();
                StopWaiter.Set();
            }
        }
예제 #53
0
        static void Main(string[] args)
        {
            var parserResults = Parser.Default.ParseArguments<Options>(args);

            if (parserResults.Tag == ParserResultType.NotParsed) {
                Console.WriteLine(
                    new HelpText { AddDashesToOption = true }
                        .AddPreOptionsLine("HeatMapVideoBuilder")
                        .AddPreOptionsLine("")
                        .AddOptions(parserResults).ToString());

                return;
            }

            var options = (parserResults as Parsed<Options>).Value;

            bool hasArgumentErrors = false;
            Image backgroundImage = null;
            IList<Image> spriteImages = new List<Image>();
            IList<SizeF> halfSpriteSize = new List<SizeF>();
            Image residualSpriteImage = null;
            Point mapOrigin = Point.Empty;
            Size mapSize = Size.Empty;
            Point dataOrigin = Point.Empty;
            Size dataSize = Size.Empty;
            IList<HeatMapData> heatMapData = new List<HeatMapData>();

            try {
                backgroundImage = Bitmap.FromFile(options.Background);
            } catch (Exception e) {
                Console.Error.WriteLine("Failed to load background image \"{0}\":\n\n{1}\n\n", options.Background, e);
                hasArgumentErrors = true;
            }

            try {
                mapOrigin = string.IsNullOrWhiteSpace(options.MapOrigin) ? Point.Empty : ParsePoint(options.MapOrigin);
            } catch (Exception e) {
                Console.Error.WriteLine("Failed to parse map origin \"{0}\":\n\n{1}\n\n", options.MapOrigin, e);
                hasArgumentErrors = true;
            }

            try {
                mapSize = string.IsNullOrWhiteSpace(options.MapSize) ? new Size(backgroundImage.Size.Width - mapOrigin.X, backgroundImage.Size.Height - mapOrigin.Y) : ParseSize(options.MapSize);
            } catch (Exception e) {
                Console.Error.WriteLine("Failed to parse map size \"{0}\":\n\n{1}\n\n", options.MapSize, e);
                hasArgumentErrors = true;
            }

            try {
                dataOrigin = string.IsNullOrWhiteSpace(options.DataOrigin) ? mapOrigin : ParsePoint(options.DataOrigin);
            } catch (Exception e) {
                Console.Error.WriteLine("Failed to parse data origin \"{0}\":\n\n{1}\n\n", options.DataOrigin, e);
                hasArgumentErrors = true;
            }

            try {
                dataSize = string.IsNullOrWhiteSpace(options.DataSize) ? mapSize : ParseSize(options.DataSize);
            } catch (Exception e) {
                Console.Error.WriteLine("Failed to parse data size \"{0}\":\n\n{1}\n\n", options.DataSize, e);
                hasArgumentErrors = true;
            }

            foreach (var spriteFile in options.SpriteFiles) {
                try {
                    var sprite = Bitmap.FromFile(spriteFile);
                    spriteImages.Add(sprite);
                    halfSpriteSize.Add(new SizeF(sprite.Width / 2.0f, sprite.Height / 2.0f));
                } catch (Exception e) {
                    Console.Error.WriteLine("Failed to load heat map sprite image \"{0}\":\n\n{1}\n\n", spriteFile, e);
                    hasArgumentErrors = true;
                }
            }

            if (string.IsNullOrWhiteSpace(options.ResidualSpriteFile)) {
                residualSpriteImage = spriteImages.First();
            } else {
                try {
                    residualSpriteImage = Bitmap.FromFile(options.ResidualSpriteFile);
                } catch (Exception e) {
                    Console.Error.WriteLine("Failed to load heat map sprite image \"{0}\":\n\n{1}\n\n", options.ResidualSpriteFile, e);
                    hasArgumentErrors = true;
                }
            }

            foreach (var inputFile in options.InputFile) {
                try {
                    var json = File.ReadAllText(inputFile);
                    var currentHeatMapData = JsonConvert.DeserializeObject<HeatMapData>(json);

                    if ((currentHeatMapData.Timestamps == null)) {
                        throw new Exception("Heat map data is missing a times array. This must be an array in a root object and contain time in milliseconds.");
                    }

                    if ((currentHeatMapData.X == null)) {
                        throw new Exception("Heat map data is missing an x coordinate array. This must be an array in a root object.");
                    }

                    if ((currentHeatMapData.Y == null)) {
                        throw new Exception("Heat map data is missing an y coordinate array. This must be an array in a root object.");
                    }

                    if ((currentHeatMapData.Timestamps.Count != currentHeatMapData.X.Count) || (currentHeatMapData.Timestamps.Count != currentHeatMapData.Y.Count)) {
                        throw new Exception("Heat map data arrays are not equal length.");
                    }

                    heatMapData.Add(currentHeatMapData);
                } catch (Exception e) {
                    Console.Error.WriteLine("Failed to load heat map data from \"{0}\":\n\n{1}\n\n", options.InputFile, e);
                    hasArgumentErrors = true;
                }
            }

            if (hasArgumentErrors) {
                return;
            }

            var frameRate = 25;
            var scaledFrameRate = options.TimeScale / frameRate;
            var timeDelta = (int) (1000 * scaledFrameRate);
            var width = backgroundImage.Width;
            var height = backgroundImage.Height;
            var fullRect = new Rectangle(0, 0, width, height);
            var xScaling = mapSize.Width / (float) dataSize.Width;
            var yScaling = mapSize.Height / (float) dataSize.Height;

            var compositeImage = new Bitmap(width, height, PixelFormat.Format32bppArgb);
            var compositeImageGraphics = Graphics.FromImage(compositeImage);
            compositeImageGraphics.CompositingMode = CompositingMode.SourceOver;
            compositeImageGraphics.CompositingQuality = CompositingQuality.HighSpeed;

            var heatMapBuffer = new Bitmap(width, height, PixelFormat.Format32bppArgb);
            var heatMapBufferGraphics = Graphics.FromImage(heatMapBuffer);
            heatMapBufferGraphics.CompositingMode = CompositingMode.SourceOver;
            heatMapBufferGraphics.CompositingQuality = CompositingQuality.HighSpeed;

            var residualBuffer = new Bitmap(width, height, PixelFormat.Format32bppArgb);
            var residualBufferGraphics = Graphics.FromImage(residualBuffer);
            residualBufferGraphics.CompositingMode = CompositingMode.SourceOver;
            residualBufferGraphics.CompositingQuality = CompositingQuality.HighSpeed;

            var tempBuffer = new Bitmap(width, height, PixelFormat.Format32bppArgb);
            var tempBufferGraphics = Graphics.FromImage(tempBuffer);
            tempBufferGraphics.CompositingMode = CompositingMode.SourceOver;
            tempBufferGraphics.CompositingQuality = CompositingQuality.HighSpeed;

            var currentTime = 0;
            var currentIndices = Enumerable.Repeat(0, heatMapData.Count).ToArray();
            var heatMapDataDone = Enumerable.Repeat(false, heatMapData.Count).ToArray();

            var outputDirectory = Path.GetDirectoryName(options.OutputFile);
            if (!Directory.Exists(outputDirectory)) {
                Directory.CreateDirectory(outputDirectory);
            }

            var videoWriter = new VideoFileWriter();

            if (options.BitRate == 0) {
                videoWriter.Open(options.OutputFile, width, height, frameRate, VideoCodec.MPEG4);
            } else {
                videoWriter.Open(options.OutputFile, width, height, frameRate, VideoCodec.MPEG4, options.BitRate);
            }

            compositeImageGraphics.DrawImage(backgroundImage, Point.Empty);
            compositeImageGraphics.Save();
            videoWriter.WriteVideoFrame(compositeImage);

            var alphaFade = frameRate / options.Duration;

            var heatMapFadeMatrix = new ColorMatrix();
            heatMapFadeMatrix.Matrix33 = 0.95f;// alphaFade;

            var heatMapFadeImageAttributes = new ImageAttributes();
            heatMapFadeImageAttributes.SetColorMatrix(heatMapFadeMatrix);

            var residualFadeMatrix = new ColorMatrix();
            residualFadeMatrix.Matrix00 = 0.45f;
            residualFadeMatrix.Matrix01 = 0.45f;
            residualFadeMatrix.Matrix02 = 0.45f;
            residualFadeMatrix.Matrix10 = 0.45f;
            residualFadeMatrix.Matrix11 = 0.45f;
            residualFadeMatrix.Matrix12 = 0.45f;
            residualFadeMatrix.Matrix20 = 0.45f;
            residualFadeMatrix.Matrix21 = 0.45f;
            residualFadeMatrix.Matrix22 = 0.45f;

            var residualFadeImageAttributes = new ImageAttributes();
            residualFadeImageAttributes.SetColorMatrix(residualFadeMatrix);

            var lastTime = 0u;
            var endPadding = 8 * options.Duration * frameRate;

            var font = new Font("Consolas", 10.0f);
            var pens = new[] {
                new Pen(Color.FromArgb(unchecked((int) 0x080000FF))),
                new Pen(Color.FromArgb(unchecked((int) 0x08FF0000)))
             };
            residualBufferGraphics.CompositingMode = CompositingMode.SourceOver;

            while ((heatMapDataDone.Any(isDone => !isDone)) || (currentTime < (lastTime + endPadding))) {
                // Process the accumulation buffer.
                //tempBufferGraphics.FillRectangle(Brushes.White, 0, 0, width, height);
                //tempBufferGraphics.CompositingMode = CompositingMode.SourceCopy;
                //tempBufferGraphics.DrawImage(residualBuffer, fullRect, 0, 0, width, height, GraphicsUnit.Pixel, residualFadeImageAttributes);
                //tempBufferGraphics.Save();

                //residualBufferGraphics.FillRectangle(Brushes.Transparent, 0, 0, width, height);
                //residualBufferGraphics.CompositingMode = CompositingMode.SourceCopy;
                //residualBufferGraphics.DrawImage(tempBuffer, Point.Empty);
                //residualBufferGraphics.CompositingMode = CompositingMode.SourceOver;

                // Process the accumulation buffer.
                tempBufferGraphics.FillRectangle(Brushes.White, 0, 0, width, height);
                tempBufferGraphics.CompositingMode = CompositingMode.SourceCopy;
                tempBufferGraphics.DrawImage(heatMapBuffer, fullRect, 0, 0, width, height, GraphicsUnit.Pixel, heatMapFadeImageAttributes);
                tempBufferGraphics.Save();

                heatMapBufferGraphics.FillRectangle(Brushes.Transparent, 0, 0, width, height);
                heatMapBufferGraphics.CompositingMode = CompositingMode.SourceCopy;
                heatMapBufferGraphics.DrawImage(tempBuffer, Point.Empty);
                heatMapBufferGraphics.CompositingMode = CompositingMode.SourceOver;

                // Write the new heat map data into the heat map buffer.
                for (var i = 0; i < timeDelta; ++i) {
                    ++currentTime;

                    var heatMapIndex = 0;
                    var spriteIndex = 0;

                    foreach (var heatMapDataInstance in heatMapData) {
                        var currentIndex = currentIndices[heatMapIndex];

                        while ((currentIndex < heatMapDataInstance.Timestamps.Count) && (heatMapDataInstance.Timestamps[currentIndex] < currentTime)) {
                            lastTime = heatMapDataInstance.Timestamps[currentIndex];

                            var x = (heatMapDataInstance.X[currentIndex] - dataOrigin.X) * xScaling + mapOrigin.X;
                            var y = (heatMapDataInstance.Y[currentIndex] - dataOrigin.Y) * yScaling + mapOrigin.Y;

                            //residualBufferGraphics.DrawImage(residualSpriteImage, x, y);
                            residualBufferGraphics.DrawRectangle(pens[heatMapIndex], x -1, y -1, 3, 3);

                            x -= halfSpriteSize[spriteIndex].Width;
                            y -= -halfSpriteSize[spriteIndex].Height;
                            heatMapBufferGraphics.DrawImage(spriteImages[spriteIndex], x, y);

                            ++currentIndex;
                        }

                        currentIndices[heatMapIndex] = currentIndex;

                        if (currentIndex >= heatMapDataInstance.Timestamps.Count) {
                            heatMapDataDone[heatMapIndex] = true;
                        }

                        if (spriteIndex < spriteImages.Count - 1) {
                            ++spriteIndex;
                        }

                        ++heatMapIndex;
                    }
                }

                residualBufferGraphics.Save();
                heatMapBufferGraphics.Save();

                compositeImageGraphics.DrawImage(backgroundImage, Point.Empty);
                compositeImageGraphics.DrawImage(residualBuffer, Point.Empty);
                //compositeImageGraphics.DrawImage(heatMapBuffer, Point.Empty);

                var text = new TimeSpan(0, 0, 0, 0, currentTime).ToString(@"h\:mm\:ss");

                for (var i = -1; i <= 1; ++i) {
                    for (var j = -1; j <= 1; ++j) {
                        compositeImageGraphics.DrawString(text, font, Brushes.Black, 2 + i, 2 + j);
                    }
                }

                compositeImageGraphics.DrawString(text, font, Brushes.White, 2, 2);

                compositeImageGraphics.Save();

                videoWriter.WriteVideoFrame(compositeImage);
            }

            videoWriter.Close();
        }
예제 #54
0
파일: Form1.cs 프로젝트: satanan1102/Multi
        private void saveshot()
        {
            string str = Url;
            string[] sAry = str.Split('.');
            Url2 = sAry[0];

            VideoFileReader reader = new VideoFileReader();
            reader.Open(textBox1.Text);
            int co = 0;
            int end = int.Parse(reader.FrameCount.ToString());

            int countFrameCut = 0;
            VideoFileWriter writerShort = new VideoFileWriter();
            name = "..\\..\\..\\VideoName\\" + Url2 + "_" + Convert.ToString(countFrameCut) + ".avi";
            videoname = Url2 + "_" + countFrameCut + ".avi";
            writerShort.Open(name, reader.Width, reader.Height, reader.FrameRate, VideoCodec.MPEG4, 1000000);
            for (int i = 0; i < end; i++)
            {
                Bitmap videoFrame = reader.ReadVideoFrame();
                writerShort.WriteVideoFrame(videoFrame);
                videoFrame.Dispose();
                if (i == Savei[countFrameCut]) {
                    // cut short
                    writerShort.Close();

                    keyFrame();

                    if (countCutFrame != countFrameCut)
                    {
                        name = "..\\..\\..\\VideoName\\" + Url2 + "_" + Convert.ToString(countFrameCut) + ".avi";
                        videoname = Url2 + "_" + countFrameCut + ".avi";
                        writerShort.Open(name, reader.Width, reader.Height, reader.FrameRate, VideoCodec.MPEG4, 1000000);
                    }
                    countFrameCut++;
                }
            }
            writerShort.Close();
            reader.Close();

            /*
            for (int i = 0; i < Savei.Length; i++)
            {

                if (Savei[i] == 0)
                {
                    if (co == 0)
                    {
                        Savei[i] = end;
                        co = 1;
                    }
                    else
                    {

                        break;
                    }
                }

                VideoFileWriter writer = new VideoFileWriter();

                try
                {

                    name = "..\\..\\..\\VideoName\\" + Url2 + "_" + Convert.ToString(i) + ".avi";
                    videoname = Url2 + "_" + i + ".avi";
                    writer.Open(name, reader.Width, reader.Height, reader.FrameRate, VideoCodec.MPEG4, 1000000);

                    for (int j = 0; j < end; j++)
                    {
                        if (Savei[i] == j)
                        {
                            writer.Close();
                            break;
                        }
                        Bitmap videoFrame = reader.ReadVideoFrame();

                        writer.WriteVideoFrame(videoFrame);
                        videoFrame.Dispose();
                    }

                }
                catch (Exception exception)
                {
                    writer.Close();
                }

                if (i == 0)
                {
                    end = end - Savei[i];
                }
                else
                {
                    end = end - Math.Abs(Savei[i] - Savei[i - 1]);
                }

                keyFrame();

                //string constr = ConfigurationManager.ConnectionStrings["Db"].ConnectionString;
                //SqlConnection con = new SqlConnection(constr);
                //con.Open();

                //SqlCommand cmd = new SqlCommand("INSERT into CollectionShot (No,VideoName,PathVideoName,KeyFrame,HistrogrameVecter) " +
                //       " VALUES ( (Select count(*) from CollectionShot ),'" + videoname + "','" + name + "' , '" + keyF + "','" + Vechist + "')", con);
                //cmd.ExecuteNonQuery();
                //con.Close();

            }
            reader.Close();
            */
        }
예제 #55
0
파일: Main.cs 프로젝트: dwotherspoon/TMV
        private void btn_encode_Click(object sender, EventArgs e)
        {
            if (oform != null && File.Exists(oform.FileName)) { //has a filestream been opened?
                hScrollBar1.Enabled = false;
                checkBox1.Enabled = false;
                btn_encode.Enabled = false;
                // create instance of video reader
                VideoFileReader reader = new VideoFileReader();
                VideoFileWriter writer = new VideoFileWriter();
                reader.Open(oform.FileName);
                if (checkBox1.Checked) { //Is the user requesting a AVI?
                    writer.Open(apath + "output.wmv", 320, 200, reader.FrameRate, VideoCodec.WMV2);
                }
                // print some of its attributes
                logbox.Text += "Width: " + reader.Width + "px" + Environment.NewLine;
                logbox.Text += ("Height: " + reader.Height + "px" + Environment.NewLine);
                logbox.Text += ("Fps: " + reader.FrameRate + "fps"+ Environment.NewLine);
                logbox.Text += ("Codec: " + reader.CodecName + Environment.NewLine);
                logbox.Text += ("Frames: " + reader.FrameCount + Environment.NewLine);
                //start encoding classes
                TMVVideo tvid = new TMVVideo();
                TMVEncoder tmv = new TMVEncoder();
                //tmvframe.Threshold = hScrollBar1.Value;
                Bitmap videoFrame = new Bitmap(320,200);
                logbox.Text += "Conversion started @ " + DateTime.Now.ToString();
                string logtxt = logbox.Text;
                logbox.Text += "Current Frame: 0";
                TMVFont renderfont = new TMVFont(apath + "font.bin");
                TMVFrame tframe;
                for (int i = 0; i < reader.FrameCount; i++) {
                    videoFrame = resize_image(reader.ReadVideoFrame());
                    tframe = tmv.encode(videoFrame);
                    tvid.addFrame(tframe);
                    obox.Image = tframe.renderFrame(renderfont);
                    pbar.Value = (int)((i * 100) / (reader.FrameCount-1));
                    logbox.Text = logtxt + Environment.NewLine + "Current Frame: " + i + "/" + (reader.FrameCount-1);
                    if (checkBox1.Checked) { //Is the user requesting a AVI?
                        writer.WriteVideoFrame((Bitmap)obox.Image);
                    }
                    if (closing)
                    {
                        return;
                    }
                    fbox.Image = videoFrame;
                    Application.DoEvents();
                }
                logbox.Text += Environment.NewLine + "All frames converted, attempting to interleave audio.";
                if (File.Exists(apath + "temp.wav")) { //remove any previous streams
                    File.Delete(apath + "temp.wav");
                }
                AviManager aviManager = new AviManager(oform.FileName, true);
                try { //try to read the stream
                    AudioStream waveStream = aviManager.GetWaveStream();
                    logbox.Text += Environment.NewLine + "Audio stream found:";
                    logbox.Text += Environment.NewLine + "Sample Rate: " + waveStream.CountSamplesPerSecond.ToString();
                    logbox.Text += Environment.NewLine + "Bits:" + waveStream.CountBitsPerSample.ToString();
                    logbox.Text += Environment.NewLine + "Number of Channels: " + waveStream.CountChannels.ToString();
                    File.Delete(apath + "temp.wav");
                    waveStream.ExportStream(apath+"temp.wav");
                    waveStream.Close();
                    aviManager.Close();

                    byte[] audio_data = readWav(apath + "temp.wav");

                    if (reader.FrameRate > 99) { //sometimes frame rate is stored fixed point CRUDE
                        tvid.setFPS((decimal)(reader.FrameRate / 10.0));
                        tvid.loadAudio(audio_data);
                        tvid.save();
                    }
                    else {
                        tvid.setFPS(reader.FrameRate);
                        tvid.loadAudio(audio_data);
                        tvid.save();
                    }
                }
                catch { //error somewhere here, continue silent.
                    logbox.Text += Environment.NewLine+"Error, source video does not have WAV audio, video will be silent.";

                    if (reader.FrameRate > 99) { //sometimes frame rate is stored fixed point CRUDE
                        tvid.setFPS((decimal)(reader.FrameRate / 10.0));
                        tvid.loadAudio(new Byte[reader.FrameCount]);
                        tvid.save();
                    }
                    else {
                        tvid.setFPS(reader.FrameRate);
                        tvid.loadAudio(new Byte[reader.FrameCount]);
                        tvid.save();
                    }
                }

                logbox.Text += Environment.NewLine + "Conversion finished @ " + DateTime.Now.ToString();
                writer.Close();
                reader.Close();
                hScrollBar1.Enabled = true;
                checkBox1.Enabled = true;
                btn_encode.Enabled = true;

            }
            else {
                logbox.Text += Environment.NewLine + "Error: Select a file (Using File -> Open) before attempting to encode.";
            }
        }
예제 #56
0
파일: CameraWindow.cs 프로젝트: vmail/main
        private bool OpenTimeLapseWriter()
        {
            DateTime date = DateTime.Now;
            String filename = String.Format("TimeLapse_{0}-{1}-{2}_{3}-{4}-{5}",
                                             date.Year, Helper.ZeroPad(date.Month), Helper.ZeroPad(date.Day),
                                             Helper.ZeroPad(date.Hour), Helper.ZeroPad(date.Minute),
                                             Helper.ZeroPad(date.Second));
            TimeLapseVideoFileName = Camobject.id + "_" + filename;
            string folder = MainForm.Conf.MediaDirectory + "video\\" + Camobject.directory + "\\";

            if (!Directory.Exists(folder + @"thumbs\"))
                Directory.CreateDirectory(folder + @"thumbs\");

            filename = folder+TimeLapseVideoFileName;

            Bitmap bmpPreview = Camera.LastFrame;

            bmpPreview.Save(folder + @"thumbs/" + TimeLapseVideoFileName + "_large.jpg", MainForm.Encoder, MainForm.EncoderParams);
            Image.GetThumbnailImageAbort myCallback = ThumbnailCallback;
            Image myThumbnail = bmpPreview.GetThumbnailImage(96, 72, myCallback, IntPtr.Zero);
            bmpPreview.Dispose();

            Graphics g = Graphics.FromImage(myThumbnail);
            var strFormat = new StringFormat {Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Far};
            var rect = new RectangleF(0, 0, 96, 72);

            g.DrawString(LocRm.GetString("Timelapse"), MainForm.Drawfont, MainForm.OverlayBrush,
                         rect, strFormat);
            strFormat.Dispose();

            myThumbnail.Save(folder + @"thumbs/" + TimeLapseVideoFileName + ".jpg", MainForm.Encoder, MainForm.EncoderParams);

            g.Dispose();
            myThumbnail.Dispose();

            _timeLapseWriter = null;
            bool success = false;

            try
            {

                int w, h;
                GetVideoSize(out w, out h);

                Program.WriterMutex.WaitOne();
                try
                {
                    _timeLapseWriter = new VideoFileWriter();
                    _timeLapseWriter.Open(filename + CodecExtension, w, h, Camobject.recorder.crf, Codec,
                                          CalcBitRate(Camobject.recorder.quality), Camobject.recorder.timelapseframerate);

                    success = true;
                    TimelapseStart = DateTime.Now;
                }
                catch (Exception ex)
                {
                    Log.Error("Camera " + Camobject.id, ex);
                    _timeLapseWriter = null;
                    Camobject.recorder.timelapse = 0;
                }
                finally
                {
                    Program.WriterMutex.ReleaseMutex();
                }
            }
            catch (Exception ex)
            {
                Log.Error("Camera " + Camobject.id, ex);
            }
            return success;
        }
예제 #57
0
        private void startRecordRgb()
        {
            startRecordingRgb = null;
            if (colorFrameDescription != null)
            {
                rgbStreamedFrame = 0;
                rgbWritenFrame = 0;

                Thread thread = new Thread(new ThreadStart(ColorRecordingFunction));
                thread.Start();

                try
                {
                    //rgbWriter = new VideoWriter(tempRgbFileName, -1, FRAME_PER_SECOND, new Size(colorFrameDescription.Width / scaleVideo, colorFrameDescription.Height / scaleVideo), true);
                    //Console.WriteLine("Finish create writer");

                    writer = new VideoFileWriter();
                    writer.Open(tempRgbFileName, colorFrameDescription.Width / scaleVideo, colorFrameDescription.Height / scaleVideo, fps, VideoCodec.MPEG4, quality);
                    //writer.Open(tempRgbFileName, colorFrameDescription.Width / scaleVideo, colorFrameDescription.Height / scaleVideo);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
        }
        private void OpenVideoWriters(string filePathBase, VideoCodec codec, int bitrate)
        {
            lock (lockObj)
            {
                if (Context.IsKinectActive)
                {
                    // color
                    videoWriterKinectColor = new VideoFileWriter();                   
                    int colorWidth = Context.ColorResizedWidth;
                    int colorHeight = Context.ColorResizedHeight;
                    if (Context.ProcessColorMapping) colorHeight *= 2;                                       
                    videoWriterKinectColor.Open(filePathBase + "_Color.avi", colorWidth, colorHeight, 30, codec, bitrate);                        

                    //depth
                    videoWriterKinectDepth = new VideoFileWriter();
                    int depthWidth = Context.DepthWidth;
                    int depthHeight = Context.DepthHeight;
                    if (Context.ProcessDepthMapping) depthHeight *= 2;
                    videoWriterKinectDepth.Open(filePathBase + "_Depth.avi", depthWidth, depthHeight, 30, VideoCodec.Raw, bitrate);                    

                    // body
                    bufferBody = new List<float[]>();
                }
                if (Context.IsPS3EyeActive)
                {
                    int fps = Context.IsKinectActive ? 30 : Context.GUI.PS3EyePanel.FrameRate;                  // fps depends on devices !!
                    videoWriterPS3Eye = new VideoFileWriter();
                    videoWriterPS3Eye.Open(filePathBase + "_PS3Eye.avi", 640, 480 * 2, fps, codec, bitrate);
                }

                currFilePathBase = filePathBase;
            }
        }        
예제 #59
0
 public void OpenVideo()
 {
     Writer = new VideoFileWriter();
     Writer.Open(DateTime.Today.ToShortDateString() + ".avi", 1920, 1080, 1, VideoCodec.MPEG4);
 }
예제 #60
-1
        /// <summary>
        /// Method for rendering  and saving the video to a new file. All settings are set in the ProjectSettings class.
        /// </summary>
        // TODO add sound, use constructor with parameters in a factory patern
        public static void RenderVideo()
        {
            ProjectSettings settings = ProjectSettings.GetSettings();

            // TODO moove to Widget
            if (string.IsNullOrEmpty(settings.GPXPath))
            {
                throw new ArgumentNullException("No track file was selected!");
            }

            new GPXFileLoader().LoadPoints(settings.GPXPath);

            List<Widget> activeWidgets = UpdateActiveWidgets();

            VideoFileWriter writer = new VideoFileWriter();

            // open video file
            reader.Open(settings.VideoInputPath);
            VideoDimensions = new Size(reader.Width, reader.Height);
            float framerate = reader.FrameRate;

            // create new AVI file and open it
            var encoding = (VideoCodec)Enum.Parse(typeof(VideoCodec), settings.Format.ToString());

            if (string.IsNullOrEmpty(settings.VideoOutputPath))
            {
                throw new ArgumentNullException("No output video file was specified!");
            }

            writer.Open(settings.VideoOutputPath, reader.Width, reader.Height, reader.FrameRate, encoding, settings.VideoQuality * 1000000);

            videoEnd = (int)(settings.VideoEnd * reader.FrameRate);
            videoStart = (int)(settings.VideoStart * reader.FrameRate);
            if (videoEnd == 0 || videoEnd > reader.FrameCount)
            {
                videoEnd = reader.FrameCount;
            }

            int speed = settings.VideoSpeed;
            for (long currentFrameNumber = 0; currentFrameNumber < videoEnd - speed; currentFrameNumber++)
            {
                Bitmap videoFrame = GetFrame(reader, speed, ref currentFrameNumber);

                RenderFrame(currentFrameNumber / framerate, videoFrame, activeWidgets);

                writer.WriteVideoFrame(videoFrame);
                videoFrame.Dispose();
                ////string progress = string.Format("{0} {1}", (int)(100 * n / videoEnd), '%');
            }

            reader.Close();
            writer.Close();
        }