public async Task VideoStreamIsProcessedCorrectly()
        {
            var ffmpegProcess = new FFmpegProcessStub();

            ffmpegProcess.EnqueueOutput("    Stream #0:2: Video: h264 (High), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1k tbn, 47.95 tbc");

            var ffmpeg = new FFmpegTask(ffmpegProcess);

            ffmpeg.Start();

            var          outputs = new List <FFmpegOutput>();
            FFmpegOutput output;

            while ((output = await ffmpeg.GetOutputAsync()) != null)
            {
                outputs.Add(output);
            }

            var stream = outputs.OfType <MediaVideoStream>().FirstOrDefault();

            Assert.Equal(0, stream?.Media);
            Assert.Equal(2, stream?.Number);
            Assert.Equal(7, stream?.Attributes?.Count());
            Assert.Contains("h264 (High)", stream?.Attributes ?? Enumerable.Empty <string>());
            Assert.Contains("yuv420p(tv, bt709)", stream?.Attributes ?? Enumerable.Empty <string>());
            Assert.Contains("1280x720 [SAR 1:1 DAR 16:9]", stream?.Attributes ?? Enumerable.Empty <string>());
            Assert.Contains("25 fps", stream?.Attributes ?? Enumerable.Empty <string>());
            Assert.Contains("25 tbr", stream?.Attributes ?? Enumerable.Empty <string>());
            Assert.Contains("1k tbn", stream?.Attributes ?? Enumerable.Empty <string>());
            Assert.Contains("47.95 tbc", stream?.Attributes ?? Enumerable.Empty <string>());
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> GetMediaInfo(string path)
        {
            FFmpegTask ffmpeg = new FFmpegTask();

            ffmpeg.Start($"-i \"{path}\"");

            List <MediaVideoStream> outputs = new List <MediaVideoStream>();

            while (true)
            {
                var output = await ffmpeg.GetOutputAsync();

                if (output == null)
                {
                    break;
                }

                if (output is MediaVideoStream mediaVideoStream)
                {
                    outputs.Add(mediaVideoStream);
                }
            }

            return(Ok(outputs.ToArray()));
        }
Ejemplo n.º 3
0
        public async void WhenTheTaskIsNotStartedAnExceptionIsThrown()
        {
            var ffmpegProcess = new FFmpegProcessStub();

            var ffmpeg = new FFmpegTask(ffmpegProcess);

            await Assert.ThrowsAsync <FFmpegTaskNotStartedException>(() => ffmpeg.GetOutputAsync());
        }
Ejemplo n.º 4
0
        public void WhenUnderlineProcessFailedToStartAnExceptionIsThrown()
        {
            var ffmpegProcess = new FFmpegProcessStub();

            ffmpegProcess.ThrownExceptionOnStart();

            var ffmpeg = new FFmpegTask(ffmpegProcess);

            Assert.Throws <FFmpegProcessStartFailedException>(() => ffmpeg.Start());
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> Versions()
        {
            FFmpegTask ffmpeg = new FFmpegTask();

            ffmpeg.Start();

            FFmpegVersion version = await ffmpeg.GetOutputAsync() as FFmpegVersion;

            return(Ok(version));
        }
Ejemplo n.º 6
0
 public EngineParameters(
     ConversionOptions conversionOptions,
     MediaFile inputFile,
     MediaFile outputFile,
     FFmpegTask task)
 {
     ConversionOptions = conversionOptions;
     InputFile         = inputFile;
     OutputFile        = outputFile;
     Task = task;
 }
Ejemplo n.º 7
0
        public async void WhenUnderlineProcessThrowAnExceptionTheExceptionIsPropagated()
        {
            var ffmpegProcess = new FFmpegProcessStub();

            ffmpegProcess.ThrownExceptionOnReadLineAsync();

            var ffmpeg = new FFmpegTask(ffmpegProcess);

            ffmpeg.Start();

            await Assert.ThrowsAsync <Exception>(() => ffmpeg.GetOutputAsync());
        }
        public async void VersionLineIsProcessedCorrectlyAlsoInCaseOfMajorAndMinorOnly()
        {
            var ffmpegProcess = new FFmpegProcessStub();

            ffmpegProcess.EnqueueOutput("ffmpeg version 3.4 Copyright(c) 2000-2017 the FFmpeg developers");

            var ffmpeg = new FFmpegTask(ffmpegProcess);

            ffmpeg.Start();

            var          outputs = new List <FFmpegOutput>();
            FFmpegOutput output;

            while ((output = await ffmpeg.GetOutputAsync()) != null)
            {
                outputs.Add(output);
            }

            var version = outputs.OfType <FFmpegVersion>().FirstOrDefault();

            Assert.Equal("3.4", version?.Version);
        }
        public async Task NullOrEmptyInputIsIgnored()
        {
            var ffmpegProcess = new FFmpegProcessStub();

            ffmpegProcess.EnqueueOutput(null);
            ffmpegProcess.EnqueueOutput(string.Empty);
            ffmpegProcess.EnqueueOutput(" ");

            var ffmpeg = new FFmpegTask(ffmpegProcess);

            ffmpeg.Start();

            var          outputs = new List <FFmpegOutput>();
            FFmpegOutput output;

            while ((output = await ffmpeg.GetOutputAsync()) != null)
            {
                outputs.Add(output);
            }

            Assert.Empty(outputs);
        }
        public async Task DurationAndBitRateNotAvaibleIsProcessedCorrectly()
        {
            var ffmpegProcess = new FFmpegProcessStub();

            ffmpegProcess.EnqueueOutput("  Duration: N/A, start: 0.000000, bitrate: N/A kb/s");

            var ffmpeg = new FFmpegTask(ffmpegProcess);

            ffmpeg.Start();

            var          outputs = new List <FFmpegOutput>();
            FFmpegOutput output;

            while ((output = await ffmpeg.GetOutputAsync()) != null)
            {
                outputs.Add(output);
            }

            var duration = outputs.OfType <FFmpegDuration>().FirstOrDefault();

            Assert.Equal(duration?.Duration, TimeSpan.Zero);
            Assert.Equal(0M, duration?.Start);
            Assert.Equal(0, duration?.Bitrate);
        }
        public async Task DurationIsProcessedCorrectly()
        {
            var ffmpegProcess = new FFmpegProcessStub();

            ffmpegProcess.EnqueueOutput("  Duration: 00:41:33.50, start: 0.000000, bitrate: 4800 kb/s");

            var ffmpeg = new FFmpegTask(ffmpegProcess);

            ffmpeg.Start();

            var          outputs = new List <FFmpegOutput>();
            FFmpegOutput output;

            while ((output = await ffmpeg.GetOutputAsync()) != null)
            {
                outputs.Add(output);
            }

            var duration = outputs.OfType <FFmpegDuration>().FirstOrDefault();

            Assert.Equal(duration?.Duration, new TimeSpan(0, 0, 41, 33, 500));
            Assert.Equal(0M, duration?.Start);
            Assert.Equal(4800, duration?.Bitrate);
        }