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>()); }
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())); }
public void WhenUnderlineProcessFailedToStartAnExceptionIsThrown() { var ffmpegProcess = new FFmpegProcessStub(); ffmpegProcess.ThrownExceptionOnStart(); var ffmpeg = new FFmpegTask(ffmpegProcess); Assert.Throws <FFmpegProcessStartFailedException>(() => ffmpeg.Start()); }
public async Task <IActionResult> Versions() { FFmpegTask ffmpeg = new FFmpegTask(); ffmpeg.Start(); FFmpegVersion version = await ffmpeg.GetOutputAsync() as FFmpegVersion; return(Ok(version)); }
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); }