Beispiel #1
0
 private void FFmpegProcessErrorDataReceived(object sender, ProcessHelper.ErrorDataReceivedEventArgs e)
 {
     if (e.ErrorData != null && !e.ErrorData.StartsWith("frame=", StringComparison.Ordinal))
     {
         Xout.LogInf($"STDERR {DateTime.Now:HH:mm:ss.ffff}: {e.ErrorData}");
     }
 }
Beispiel #2
0
        /// <summary>
        /// Handles the ErrorDataReceived event of the Ffmpeg control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="ProcessHelper.ErrorDataReceivedEventArgs"/> instance containing the event data.</param>
        private void FfmpegErrorDataReceived(object sender, ProcessHelper.ErrorDataReceivedEventArgs e)
        {
            if (string.IsNullOrEmpty(e.ErrorData))
            {
                return;
            }

            this.Dispatcher.Invoke(() =>
            {
                var data        = e.ErrorData;
                var dataTrimmed = data.Trim();

                if (dataTrimmed.StartsWith("Input", StringComparison.CurrentCulture) ||
                    dataTrimmed.StartsWith("Stream", StringComparison.CurrentCulture) ||
                    dataTrimmed.StartsWith("Output", StringComparison.Ordinal) ||
                    dataTrimmed.Contains("Could not run graph") ||
                    dataTrimmed.Contains("I/O error"))
                {
                    var textBlock = new TextBlock()
                    {
                        Text              = $"{DateTime.Now:HH:mm:ss.fff}: {data}",
                        Margin            = new Thickness(4, 0, 4, 0),
                        VerticalAlignment = VerticalAlignment.Center
                    };

                    this.StaticData.Children.Add(textBlock);
                    return;
                }

                if (data.StartsWith("frame", StringComparison.Ordinal))
                {
                    var match = Regex.Match(data, "frame=\\s*(?<frames>[^\\s]+)\\sfps=\\s*(?<fps>[^\\s]+)\\sq=\\s*(?<q1>[^\\s]+)\\s.*\\ssize=\\s*(?<size>[^\\s]+)\\stime=\\s*(?<time>[^\\s]+)\\sbitrate=\\s*(?<bitrate>[^\\s]+)\\s(dup=\\s*(?<dup>[^\\s]+)\\s)*(drop=\\s*(?<drop>[^\\s]+)\\s)*speed=\\s*(?<speed>[^\\s]+)");
                    if (!match.Success)
                    {
                        return;
                    }

                    var frameGroup = match.Groups["frames"];
                    var fpsGroup   = match.Groups[nameof(this.fps)];
                    var q1Group    = match.Groups[nameof(this.q1)];
                    //var q2Group = match.Groups["q2"];
                    var sizeGroup    = match.Groups["size"];
                    var timeGroup    = match.Groups["time"];
                    var bitrateGroup = match.Groups["bitrate"];
                    var speedGroup   = match.Groups["speed"];
                    var dups         = match.Groups["dup"];
                    var drops        = match.Groups["drop"];

                    this.Frames.Text = frameGroup.Value;
                    this.fps.Text    = fpsGroup.Value;
                    this.q1.Text     = q1Group.Value;
                    //this.q2.Text = q2Group.Value;
                    this.Size.Text    = sizeGroup.Value;
                    this.Time.Text    = timeGroup.Value;
                    this.Bitrate.Text = bitrateGroup.Value;
                    this.Speed.Text   = speedGroup.Value;
                    this.Dups.Text    = dups.Value;
                    this.Drops.Text   = drops.Value;
                }
            });
        }