add ffprobe error handling
This commit is contained in:
parent
5637142100
commit
9f1a8d1dc3
|
@ -238,53 +238,55 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
||||||
|
|
||||||
var result = _jsonSerializer.DeserializeFromStream<InternalMediaInfoResult>(process.StandardOutput.BaseStream);
|
var result = _jsonSerializer.DeserializeFromStream<InternalMediaInfoResult>(process.StandardOutput.BaseStream);
|
||||||
|
|
||||||
if (result != null)
|
if (result.streams == null && result.format == null)
|
||||||
{
|
{
|
||||||
if (result.streams != null)
|
throw new ApplicationException("ffprobe failed - streams and format are both null.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result.streams != null)
|
||||||
|
{
|
||||||
|
// Normalize aspect ratio if invalid
|
||||||
|
foreach (var stream in result.streams)
|
||||||
{
|
{
|
||||||
// Normalize aspect ratio if invalid
|
if (string.Equals(stream.display_aspect_ratio, "0:1", StringComparison.OrdinalIgnoreCase))
|
||||||
foreach (var stream in result.streams)
|
|
||||||
{
|
{
|
||||||
if (string.Equals(stream.display_aspect_ratio, "0:1", StringComparison.OrdinalIgnoreCase))
|
stream.display_aspect_ratio = string.Empty;
|
||||||
{
|
}
|
||||||
stream.display_aspect_ratio = string.Empty;
|
if (string.Equals(stream.sample_aspect_ratio, "0:1", StringComparison.OrdinalIgnoreCase))
|
||||||
}
|
{
|
||||||
if (string.Equals(stream.sample_aspect_ratio, "0:1", StringComparison.OrdinalIgnoreCase))
|
stream.sample_aspect_ratio = string.Empty;
|
||||||
{
|
|
||||||
stream.sample_aspect_ratio = string.Empty;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var mediaInfo = new ProbeResultNormalizer(_logger, FileSystem).GetMediaInfo(result, videoType, isAudio, primaryPath, protocol);
|
var mediaInfo = new ProbeResultNormalizer(_logger, FileSystem).GetMediaInfo(result, videoType, isAudio, primaryPath, protocol);
|
||||||
|
|
||||||
if (extractKeyFrameInterval && mediaInfo.RunTimeTicks.HasValue)
|
if (extractKeyFrameInterval && mediaInfo.RunTimeTicks.HasValue)
|
||||||
|
{
|
||||||
|
if (ConfigurationManager.Configuration.EnableVideoFrameByFrameAnalysis && mediaInfo.Size.HasValue)
|
||||||
{
|
{
|
||||||
if (ConfigurationManager.Configuration.EnableVideoFrameByFrameAnalysis && mediaInfo.Size.HasValue)
|
foreach (var stream in mediaInfo.MediaStreams)
|
||||||
{
|
{
|
||||||
foreach (var stream in mediaInfo.MediaStreams)
|
if (EnableKeyframeExtraction(mediaInfo, stream))
|
||||||
{
|
{
|
||||||
if (EnableKeyframeExtraction(mediaInfo, stream))
|
try
|
||||||
|
{
|
||||||
|
stream.KeyFrames = await GetKeyFrames(inputPath, stream.Index, cancellationToken).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
catch (OperationCanceledException)
|
||||||
{
|
{
|
||||||
try
|
|
||||||
{
|
|
||||||
stream.KeyFrames = await GetKeyFrames(inputPath, stream.Index, cancellationToken).ConfigureAwait(false);
|
|
||||||
}
|
|
||||||
catch (OperationCanceledException)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.ErrorException("Error getting key frame interval", ex);
|
_logger.ErrorException("Error getting key frame interval", ex);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return mediaInfo;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return mediaInfo;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user