Skip to content

Commit

Permalink
Added some ffprobe error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
LukePulverenti Luke Pulverenti luke pulverenti authored and LukePulverenti Luke Pulverenti luke pulverenti committed Aug 25, 2012
1 parent 9d573a8 commit f9ab808
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 37 deletions.
7 changes: 5 additions & 2 deletions MediaBrowser.Controller/FFMpeg/FFProbe.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,11 @@ public static FFProbeResult Run(BaseItem item, string cacheDirectory)

FFProbeResult result = Run(item.Path);

// Fire and forget
CacheResult(result, cachePath);
if (result != null)
{
// Fire and forget
CacheResult(result, cachePath);
}

return result;
}
Expand Down
23 changes: 13 additions & 10 deletions MediaBrowser.Controller/Providers/AudioInfoProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,6 @@ protected override string CacheDirectory

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;
Expand Down Expand Up @@ -176,16 +170,25 @@ await Task.Run(() =>

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);
}
}
}

Expand Down
61 changes: 36 additions & 25 deletions MediaBrowser.Controller/Providers/VideoInfoProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,40 +27,40 @@ protected override string CacheDirectory

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.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);
}
}

if (!string.IsNullOrEmpty(data.format.bit_rate))
if (data.streams != null)
{
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;
// 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))
foreach (MediaStream stream in data.streams)
{
if (!foundVideo)
if (stream.codec_type.Equals("video", StringComparison.OrdinalIgnoreCase))
{
FetchFromVideoStream(video, stream);
}
if (!foundVideo)
{
FetchFromVideoStream(video, stream);
}

foundVideo = true;
}
else if (stream.codec_type.Equals("audio", StringComparison.OrdinalIgnoreCase))
{
FetchFromAudioStream(video, stream);
foundVideo = true;
}
else if (stream.codec_type.Equals("audio", StringComparison.OrdinalIgnoreCase))
{
FetchFromAudioStream(video, stream);
}
}
}
}
Expand Down Expand Up @@ -111,6 +111,17 @@ private void FetchFromAudioStream(Video video, MediaStream stream)
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
Expand Down

0 comments on commit f9ab808

Please sign in to comment.