aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api')
-rw-r--r--MediaBrowser.Api/Playback/BaseStreamingService.cs29
-rw-r--r--MediaBrowser.Api/Playback/StreamState.cs5
2 files changed, 25 insertions, 9 deletions
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index ab73aabe43..5203e3ba23 100644
--- a/MediaBrowser.Api/Playback/BaseStreamingService.cs
+++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs
@@ -286,28 +286,41 @@ namespace MediaBrowser.Api.Playback
protected string GetH264Encoder(StreamState state)
{
+ var defaultEncoder = "libx264";
+
// Only use alternative encoders for video files.
// When using concat with folder rips, if the mfx session fails to initialize, ffmpeg will be stuck retrying and will not exit gracefully
// Since transcoding of folder rips is expiremental anyway, it's not worth adding additional variables such as this.
if (state.VideoType == VideoType.VideoFile)
{
- if (string.Equals(ApiEntryPoint.Instance.GetEncodingOptions().HardwareAccelerationType, "qsv", StringComparison.OrdinalIgnoreCase) ||
- string.Equals(ApiEntryPoint.Instance.GetEncodingOptions().HardwareAccelerationType, "h264_qsv", StringComparison.OrdinalIgnoreCase))
+ var hwType = ApiEntryPoint.Instance.GetEncodingOptions().HardwareAccelerationType;
+
+ if (string.Equals(hwType, "qsv", StringComparison.OrdinalIgnoreCase) ||
+ string.Equals(hwType, "h264_qsv", StringComparison.OrdinalIgnoreCase))
{
- return "h264_qsv";
+ return GetAvailableEncoder("h264_qsv", defaultEncoder);
}
- if (string.Equals(ApiEntryPoint.Instance.GetEncodingOptions().HardwareAccelerationType, "nvenc", StringComparison.OrdinalIgnoreCase))
+ if (string.Equals(hwType, "nvenc", StringComparison.OrdinalIgnoreCase))
{
- return "h264_nvenc";
+ return GetAvailableEncoder("h264_nvenc", defaultEncoder);
}
- if (string.Equals(ApiEntryPoint.Instance.GetEncodingOptions().HardwareAccelerationType, "h264_omx", StringComparison.OrdinalIgnoreCase))
+ if (string.Equals(hwType, "h264_omx", StringComparison.OrdinalIgnoreCase))
{
- return "h264_omx";
+ return GetAvailableEncoder("h264_omx", defaultEncoder);
}
}
- return "libx264";
+ return defaultEncoder;
+ }
+
+ private string GetAvailableEncoder(string preferredEncoder, string defaultEncoder)
+ {
+ if (MediaEncoder.SupportsEncoder(preferredEncoder))
+ {
+ return preferredEncoder;
+ }
+ return defaultEncoder;
}
/// <summary>
diff --git a/MediaBrowser.Api/Playback/StreamState.cs b/MediaBrowser.Api/Playback/StreamState.cs
index d97169fa5b..d7d94c69b4 100644
--- a/MediaBrowser.Api/Playback/StreamState.cs
+++ b/MediaBrowser.Api/Playback/StreamState.cs
@@ -80,7 +80,10 @@ namespace MediaBrowser.Api.Playback
{
return 10;
}
- if (userAgent.IndexOf("cfnetwork", StringComparison.OrdinalIgnoreCase) != -1)
+ if (userAgent.IndexOf("cfnetwork", StringComparison.OrdinalIgnoreCase) != -1 ||
+ userAgent.IndexOf("ipad", StringComparison.OrdinalIgnoreCase) != -1 ||
+ userAgent.IndexOf("iphone", StringComparison.OrdinalIgnoreCase) != -1 ||
+ userAgent.IndexOf("ipod", StringComparison.OrdinalIgnoreCase) != -1)
{
return 10;
}