public void Converting_Multiple_Files_Simultaneously()
        {
            var outputFiles = new List <FileInfo>();

            for (var i = 0; i < Environment.ProcessorCount; i++)
            {
                outputFiles.Add(new FileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $@"MediaFiles\output{i}.mp4")));
            }

            var ffmpeg = new Engine.FFmpeg();

            ffmpeg.Complete += (sender, args) => { _output.WriteLine("Complete: [{0} => {1}]", args.Input.FileInfo.Name, args.Output.FileInfo.Name); };
            ffmpeg.Progress += (sender, args) => { _output.WriteLine("Progress: {0}", args); };
            ffmpeg.Error    += (sender, args) => { _output.WriteLine("Error: [{0} => {1}] ExitCode: {2}\n{3}", args.Input.FileInfo.Name, args.Output.FileInfo.Name, args.Exception.ExitCode, args.Exception); };
            ffmpeg.Data     += (sender, args) => { _output.WriteLine("Data: {0} => {1} | {2}", args.Input.FileInfo.Name, args.Output.FileInfo.Name, args.Data); };

            var tasks = new List <Task>();

            foreach (var outputFile in outputFiles)
            {
                tasks.Add(Task.Run(() => ffmpeg.Convert(_fixture.VideoFile, new MediaFile(outputFile))));
            }

            Task.WaitAll(tasks.ToArray());

            foreach (var outputFile in outputFiles)
            {
                Assert.True(File.Exists(outputFile.FullName));
                outputFile.Delete();
                Assert.False(File.Exists(outputFile.FullName));
            }
        }
Beispiel #2
0
        public void FFmpeg_Should_Throw_Exception_On_Invalid_OutputFile()
        {
            var ffmpeg = new Engine.FFmpeg();
            var output = new MediaFile("test.txt");
            var input  = _fixture.VideoFile;

            var e = Assert.Raises <ConversionErrorEventArgs>(
                x => ffmpeg.Error += x,
                x => ffmpeg.Error -= x,
                () => ffmpeg.Convert(input, output));

            Assert.NotNull(e);
            Assert.Equal(e.Sender, ffmpeg);
            Assert.Equal(input, e.Arguments.Input);
            Assert.Equal(output, e.Arguments.Output);
            Assert.Equal(1, e.Arguments.Exception.ExitCode);
        }
Beispiel #3
0
        public void FFmpeg_Invokes_ConversionCompleteEvent()
        {
            var output = new MediaFile(new FileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $@"MediaFiles\conversionTest.mp4")));

            ConversionCompleteEventArgs completeEventArgs = null;

            var ffmpeg = new Engine.FFmpeg();

            ffmpeg.Complete += (sender, args) => {
                completeEventArgs = args;
                _outputHelper.WriteLine("ConversionCompletedEvent: {0}", args);
            };
            ffmpeg.Convert(_fixture.VideoFile, output);

            Assert.True(File.Exists(output.FileInfo.FullName));
            output.FileInfo.Delete();
            Assert.False(File.Exists(output.FileInfo.FullName));

            Assert.NotNull(completeEventArgs);
            Assert.NotNull(completeEventArgs.Output);
            Assert.Equal(output, completeEventArgs.Output);
        }