Added some ffprobe error handling
This commit is contained in:
parent
bbbe6164dc
commit
37dd0c8bdd
|
@ -35,8 +35,11 @@ namespace MediaBrowser.Controller.FFMpeg
|
|||
|
||||
FFProbeResult result = Run(item.Path);
|
||||
|
||||
// Fire and forget
|
||||
CacheResult(result, cachePath);
|
||||
if (result != null)
|
||||
{
|
||||
// Fire and forget
|
||||
CacheResult(result, cachePath);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -26,12 +26,6 @@ namespace MediaBrowser.Controller.Providers
|
|||
|
||||
protected override void Fetch(Audio audio, FFProbeResult data)
|
||||
{
|
||||
if (data == null)
|
||||
{
|
||||
Logger.LogInfo("Null FFProbeResult for {0} {1}", audio.Id, audio.Name);
|
||||
return;
|
||||
}
|
||||
|
||||
MediaStream stream = data.streams.First(s => s.codec_type.Equals("audio", StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
string bitrate = null;
|
||||
|
@ -176,16 +170,25 @@ namespace MediaBrowser.Controller.Providers
|
|||
|
||||
FFProbeResult result = FFProbe.Run(myItem, CacheDirectory);
|
||||
|
||||
if (result.format.tags != null)
|
||||
if (result == null)
|
||||
{
|
||||
Logger.LogInfo("Null FFProbeResult for {0} {1}", item.Id, item.Name);
|
||||
return;
|
||||
}
|
||||
|
||||
if (result.format != null && result.format.tags != null)
|
||||
{
|
||||
result.format.tags = ConvertDictionaryToCaseInSensitive(result.format.tags);
|
||||
}
|
||||
|
||||
foreach (MediaStream stream in result.streams)
|
||||
if (result.streams != null)
|
||||
{
|
||||
if (stream.tags != null)
|
||||
foreach (MediaStream stream in result.streams)
|
||||
{
|
||||
stream.tags = ConvertDictionaryToCaseInSensitive(stream.tags);
|
||||
if (stream.tags != null)
|
||||
{
|
||||
stream.tags = ConvertDictionaryToCaseInSensitive(stream.tags);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -27,40 +27,40 @@ namespace MediaBrowser.Controller.Providers
|
|||
|
||||
protected override void Fetch(Video video, FFProbeResult data)
|
||||
{
|
||||
if (data == null)
|
||||
if (data.format != null)
|
||||
{
|
||||
Logger.LogInfo("Null FFProbeResult for {0} {1}", video.Id, video.Name);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(data.format.duration))
|
||||
{
|
||||
video.RunTimeTicks = TimeSpan.FromSeconds(double.Parse(data.format.duration)).Ticks;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(data.format.bit_rate))
|
||||
{
|
||||
video.BitRate = int.Parse(data.format.bit_rate);
|
||||
}
|
||||
|
||||
// For now, only read info about first video stream
|
||||
// Files with multiple video streams are possible, but extremely rare
|
||||
bool foundVideo = false;
|
||||
|
||||
foreach (MediaStream stream in data.streams)
|
||||
{
|
||||
if (stream.codec_type.Equals("video", StringComparison.OrdinalIgnoreCase))
|
||||
if (!string.IsNullOrEmpty(data.format.duration))
|
||||
{
|
||||
if (!foundVideo)
|
||||
{
|
||||
FetchFromVideoStream(video, stream);
|
||||
}
|
||||
|
||||
foundVideo = true;
|
||||
video.RunTimeTicks = TimeSpan.FromSeconds(double.Parse(data.format.duration)).Ticks;
|
||||
}
|
||||
else if (stream.codec_type.Equals("audio", StringComparison.OrdinalIgnoreCase))
|
||||
|
||||
if (!string.IsNullOrEmpty(data.format.bit_rate))
|
||||
{
|
||||
FetchFromAudioStream(video, stream);
|
||||
video.BitRate = int.Parse(data.format.bit_rate);
|
||||
}
|
||||
}
|
||||
|
||||
if (data.streams != null)
|
||||
{
|
||||
// For now, only read info about first video stream
|
||||
// Files with multiple video streams are possible, but extremely rare
|
||||
bool foundVideo = false;
|
||||
|
||||
foreach (MediaStream stream in data.streams)
|
||||
{
|
||||
if (stream.codec_type.Equals("video", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
if (!foundVideo)
|
||||
{
|
||||
FetchFromVideoStream(video, stream);
|
||||
}
|
||||
|
||||
foundVideo = true;
|
||||
}
|
||||
else if (stream.codec_type.Equals("audio", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
FetchFromAudioStream(video, stream);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -111,6 +111,17 @@ namespace MediaBrowser.Controller.Providers
|
|||
streams.Add(audio);
|
||||
video.AudioStreams = streams;
|
||||
}
|
||||
|
||||
private void FetchFromSubtitleStream(Video video, MediaStream stream)
|
||||
{
|
||||
SubtitleStream subtitle = new SubtitleStream();
|
||||
|
||||
subtitle.Language = GetDictionaryValue(stream.tags, "language");
|
||||
|
||||
List<SubtitleStream> streams = video.Subtitles ?? new List<SubtitleStream>();
|
||||
streams.Add(subtitle);
|
||||
video.Subtitles = streams;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines if there's already enough info in the Video object to allow us to skip running ffprobe
|
||||
|
|
Loading…
Reference in New Issue
Block a user