diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-08-27 11:58:07 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-08-27 11:58:07 -0400 |
| commit | 4ca526979ddb665ce905cd5943738a2c5657ab31 (patch) | |
| tree | 9df3e2a5fc1dc11531b7798b988028ccf4dbd65f /MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs | |
| parent | 0e1b983ffc7bc07dec40551e6cfdfa9212a9a0df (diff) | |
3.0.5713.4
Diffstat (limited to 'MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs')
| -rw-r--r-- | MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs index 1005decb1..d30b105a5 100644 --- a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs @@ -248,8 +248,7 @@ namespace MediaBrowser.MediaEncoding.Encoder { try { - //stream.KeyFrames = await GetKeyFrames(inputPath, stream.Index, cancellationToken) - // .ConfigureAwait(false); + //stream.KeyFrames = await GetKeyFrames(inputPath, stream.Index, cancellationToken).ConfigureAwait(false); } catch (OperationCanceledException) { @@ -283,7 +282,7 @@ namespace MediaBrowser.MediaEncoding.Encoder private async Task<List<int>> GetKeyFrames(string inputPath, int videoStreamIndex, CancellationToken cancellationToken) { - const string args = "-i {0} -select_streams v:{1} -show_frames -show_entries frame=pkt_dts,key_frame -print_format compact"; + const string args = "-i {0} -select_streams v:{1} -show_packets -print_format compact -show_entries packet=flags -show_entries packet=pts_time"; var process = new Process { @@ -318,7 +317,7 @@ namespace MediaBrowser.MediaEncoding.Encoder { process.BeginErrorReadLine(); - await StartReadingOutput(process.StandardOutput.BaseStream, lines, 120000, cancellationToken).ConfigureAwait(false); + await StartReadingOutput(process.StandardOutput.BaseStream, lines, cancellationToken).ConfigureAwait(false); } catch (OperationCanceledException) { @@ -336,7 +335,7 @@ namespace MediaBrowser.MediaEncoding.Encoder } } - private async Task StartReadingOutput(Stream source, List<int> lines, int timeoutMs, CancellationToken cancellationToken) + private async Task StartReadingOutput(Stream source, List<int> lines, CancellationToken cancellationToken) { try { @@ -354,14 +353,15 @@ namespace MediaBrowser.MediaEncoding.Encoder .Where(i => i.Length == 2) .ToDictionary(i => i[0], i => i[1]); - string pktDts; - int frameMs; - if (values.TryGetValue("pkt_dts", out pktDts) && int.TryParse(pktDts, NumberStyles.Any, CultureInfo.InvariantCulture, out frameMs)) + string flags; + if (values.TryGetValue("flags", out flags) && string.Equals(flags, "k", StringComparison.OrdinalIgnoreCase)) { - string keyFrame; - if (values.TryGetValue("key_frame", out keyFrame) && string.Equals(keyFrame, "1", StringComparison.OrdinalIgnoreCase)) + string pts_time; + double frameSeconds; + if (values.TryGetValue("pts_time", out pts_time) && double.TryParse(pts_time, NumberStyles.Any, CultureInfo.InvariantCulture, out frameSeconds)) { - lines.Add(frameMs); + var ms = frameSeconds * 1000; + lines.Add(Convert.ToInt32(ms)); } } } @@ -376,7 +376,6 @@ namespace MediaBrowser.MediaEncoding.Encoder _logger.ErrorException("Error reading ffprobe output", ex); } } - /// <summary> /// The us culture /// </summary> @@ -802,7 +801,7 @@ namespace MediaBrowser.MediaEncoding.Encoder public ProcessWrapper(Process process, MediaEncoder mediaEncoder, ILogger logger) { Process = process; - this._mediaEncoder = mediaEncoder; + _mediaEncoder = mediaEncoder; _logger = logger; Process.Exited += Process_Exited; } @@ -819,7 +818,6 @@ namespace MediaBrowser.MediaEncoding.Encoder } catch (Exception ex) { - _logger.ErrorException("Error determing process exit code", ex); } lock (_mediaEncoder._runningProcesses) |
