Example #1
0
        async partial void OnTakePhoto(UIBarButtonItem sender)
        {
            sender.Enabled = false;

            if (movieWriter == null)
            {
                // get new file path
                var documents   = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                var pathToMovie = Path.Combine(documents, "Movie.m4v");
                if (File.Exists(pathToMovie))
                {
                    File.Delete(pathToMovie);
                }
                movieUrl = new NSUrl(pathToMovie, false);

                // start recording video
                movieWriter = new GPUImageMovieWriter(movieUrl, new CGSize(480, 640));
                movieWriter.EncodingLiveVideo = true;
                sepiaFilter.AddTarget(movieWriter);
                videoCamera.AudioEncodingTarget = movieWriter;
                movieWriter.StartRecording();

                Console.WriteLine("Video recording started.");
            }
            else
            {
                // stop recording video
                sepiaFilter.RemoveTarget(movieWriter);
                videoCamera.AudioEncodingTarget = null;
                await movieWriter.FinishRecordingAsync();

                // save to library
                var library = new ALAssetsLibrary();
                try {
                    var assetURL = await library.WriteVideoToSavedPhotosAlbumAsync(movieUrl);

                    Console.WriteLine("Video saved: " + assetURL);
                } catch (Exception ex) {
                    Console.WriteLine("Video save error: " + ex);
                }

                movieWriter = null;
                movieUrl    = null;

                Console.WriteLine("Video recording completed.");
            }

            sender.Enabled = true;
        }