From 214859aa0baba2863ee3ebc41b26c0aca536b5d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=20=D0=91=D0=B0=D0=B3?= =?UTF-8?q?=D1=80=D1=8F=D0=BD=D1=86=D0=B5=D0=B2?= Date: Tue, 28 Apr 2020 22:39:26 +0300 Subject: [PATCH] Updated FFProbe Former-commit-id: 11edbbea2bd3a9b6822d877c41f875c9c1e1b409 --- FFMpegCore/FFMPEG/FFProbe.cs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/FFMpegCore/FFMPEG/FFProbe.cs b/FFMpegCore/FFMPEG/FFProbe.cs index 53ee313..a9033c4 100644 --- a/FFMpegCore/FFMPEG/FFProbe.cs +++ b/FFMpegCore/FFMPEG/FFProbe.cs @@ -7,6 +7,7 @@ using Instances; using FFMpegCore.FFMPEG.Argument; using FFMpegCore.FFMPEG.Pipes; +using System.IO; namespace FFMpegCore.FFMPEG { @@ -81,18 +82,23 @@ public VideoInfo ParseVideoInfo(System.IO.Stream stream) var instance = new Instance(_ffprobePath, BuildFFProbeArguments(pipeArgument.PipePath)) { DataBufferCapacity = _outputCapacity }; pipeArgument.OpenPipe(); + var task = instance.FinishedRunning(); try { - var task = instance.FinishedRunning(); - pipeArgument.FlushPipe(); + pipeArgument.ProcessDataAsync().ConfigureAwait(false).GetAwaiter().GetResult(); pipeArgument.ClosePipe(); - task.Wait(); + } + catch(IOException) + { } finally { pipeArgument.ClosePipe(); } + var exitCode = task.ConfigureAwait(false).GetAwaiter().GetResult(); + if (exitCode != 0) + throw new FFMpegException(FFMpegExceptionType.Process, "FFProbe process returned exit status " + exitCode); var output = string.Join("", instance.OutputData); return ParseVideoInfoInternal(info, output); } @@ -111,17 +117,20 @@ public async Task ParseVideoInfoAsync(System.IO.Stream stream) var instance = new Instance(_ffprobePath, BuildFFProbeArguments(pipeArgument.PipePath)) { DataBufferCapacity = _outputCapacity }; pipeArgument.OpenPipe(); + var task = instance.FinishedRunning(); try { - var task = instance.FinishedRunning(); - await pipeArgument.FlushPipeAsync(); + await pipeArgument.ProcessDataAsync(); pipeArgument.ClosePipe(); - await task; + } + catch (IOException) + { } finally { pipeArgument.ClosePipe(); } + var exitCode = await task; var output = string.Join("", instance.OutputData); return ParseVideoInfoInternal(info, output);