aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api')
-rw-r--r--MediaBrowser.Api/GamesService.cs2
-rw-r--r--MediaBrowser.Api/Movies/MoviesService.cs2
-rw-r--r--MediaBrowser.Api/Playback/BaseStreamingService.cs44
-rw-r--r--MediaBrowser.Api/Playback/Hls/BaseHlsService.cs2
-rw-r--r--MediaBrowser.Api/Playback/Progressive/AudioService.cs2
-rw-r--r--MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs10
-rw-r--r--MediaBrowser.Api/Playback/Progressive/VideoService.cs2
-rw-r--r--MediaBrowser.Api/Playback/StreamRequest.cs2
-rw-r--r--MediaBrowser.Api/Playback/StreamState.cs18
9 files changed, 63 insertions, 21 deletions
diff --git a/MediaBrowser.Api/GamesService.cs b/MediaBrowser.Api/GamesService.cs
index eabda673a4..e371791f81 100644
--- a/MediaBrowser.Api/GamesService.cs
+++ b/MediaBrowser.Api/GamesService.cs
@@ -155,7 +155,7 @@ namespace MediaBrowser.Api
var games = items.OfType<Game>().ToList();
- summary.ClientInstalledGameCount = games.Count(i => !i.IsPlaceHolder);
+ summary.ClientInstalledGameCount = games.Count(i => i.IsPlaceHolder);
summary.GameCount = games.Count;
diff --git a/MediaBrowser.Api/Movies/MoviesService.cs b/MediaBrowser.Api/Movies/MoviesService.cs
index 667a86fe6a..3360d97363 100644
--- a/MediaBrowser.Api/Movies/MoviesService.cs
+++ b/MediaBrowser.Api/Movies/MoviesService.cs
@@ -174,7 +174,7 @@ namespace MediaBrowser.Api.Movies
.OrderBy(i => Guid.NewGuid())
.ToList();
- var similarToRecentlyPlayed = GetSimilarTo(user, allMovies, recentlyPlayedMovies.Take(10).OrderBy(i => Guid.NewGuid()), itemLimit, fields, RecommendationType.SimilarToRecentlyPlayed).GetEnumerator();
+ var similarToRecentlyPlayed = GetSimilarTo(user, allMovies, recentlyPlayedMovies.Take(7).OrderBy(i => Guid.NewGuid()), itemLimit, fields, RecommendationType.SimilarToRecentlyPlayed).GetEnumerator();
var similarToLiked = GetSimilarTo(user, allMovies, likedMovies, itemLimit, fields, RecommendationType.SimilarToLikedItem).GetEnumerator();
var hasDirectorFromRecentlyPlayed = GetWithDirector(user, allMovies, recentDirectors, itemLimit, fields, RecommendationType.HasDirectorFromRecentlyPlayed).GetEnumerator();
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index 6743088c6b..04e861d5ba 100644
--- a/MediaBrowser.Api/Playback/BaseStreamingService.cs
+++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs
@@ -279,8 +279,19 @@ namespace MediaBrowser.Api.Playback
/// </summary>
/// <returns>System.Int32.</returns>
/// <exception cref="System.Exception">Unrecognized MediaEncodingQuality value.</exception>
- protected int GetNumberOfThreads(bool isWebm)
+ protected int GetNumberOfThreads(StreamState state, bool isWebm)
{
+ // Use more when this is true. -re will keep cpu usage under control
+ if (state.ReadInputAtNativeFramerate)
+ {
+ if (isWebm)
+ {
+ return Math.Max(Environment.ProcessorCount - 1, 1);
+ }
+
+ return 0;
+ }
+
// Webm: http://www.webmproject.org/docs/encoder-parameters/
// The decoder will usually automatically use an appropriate number of threads according to how many cores are available but it can only use multiple threads
// for the coefficient data if the encoder selected --token-parts > 0 at encode time.
@@ -1192,65 +1203,73 @@ namespace MediaBrowser.Api.Playback
}
else if (i == 1)
{
+ request.Static = string.Equals("true", val, StringComparison.OrdinalIgnoreCase);
+ }
+ else if (i == 2)
+ {
if (videoRequest != null)
{
videoRequest.VideoCodec = (VideoCodecs)Enum.Parse(typeof(VideoCodecs), val, true);
}
}
- else if (i == 2)
+ else if (i == 3)
{
request.AudioCodec = (AudioCodecs)Enum.Parse(typeof(AudioCodecs), val, true);
}
- else if (i == 3)
+ else if (i == 4)
{
if (videoRequest != null)
{
videoRequest.AudioStreamIndex = int.Parse(val, UsCulture);
}
}
- else if (i == 4)
+ else if (i == 5)
{
if (videoRequest != null)
{
videoRequest.SubtitleStreamIndex = int.Parse(val, UsCulture);
}
}
- else if (i == 5)
+ else if (i == 6)
{
if (videoRequest != null)
{
videoRequest.VideoBitRate = int.Parse(val, UsCulture);
}
}
- else if (i == 6)
+ else if (i == 7)
{
request.AudioBitRate = int.Parse(val, UsCulture);
}
- else if (i == 7)
+ else if (i == 8)
{
request.AudioChannels = int.Parse(val, UsCulture);
}
- else if (i == 8)
+ else if (i == 9)
{
if (videoRequest != null)
{
request.StartTimeTicks = long.Parse(val, UsCulture);
}
}
- else if (i == 9)
+ else if (i == 10)
{
if (videoRequest != null)
{
videoRequest.Profile = val;
}
}
- else if (i == 10)
+ else if (i == 11)
{
if (videoRequest != null)
{
videoRequest.Level = val;
}
}
+ else if (i == 12)
+ {
+ request.ForcedMimeType = val;
+ }
}
}
@@ -1334,6 +1353,7 @@ namespace MediaBrowser.Api.Playback
await Task.Delay(1000, cancellationToken).ConfigureAwait(false);
}
+ state.ReadInputAtNativeFramerate = recording.RecordingInfo.Status == RecordingStatus.InProgress;
state.AudioSync = "1000";
state.DeInterlace = true;
}
@@ -1420,8 +1440,8 @@ namespace MediaBrowser.Api.Playback
state.HasMediaStreams = mediaStreams.Count > 0;
- state.SegmentLength = state.ReadInputAtNativeFramerate ? 3 : 10;
- state.HlsListSize = state.ReadInputAtNativeFramerate ? 20 : 1440;
+ state.SegmentLength = state.ReadInputAtNativeFramerate ? 5 : 10;
+ state.HlsListSize = state.ReadInputAtNativeFramerate ? 100 : 1440;
return state;
}
diff --git a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
index 5324d2c805..aec271ff20 100644
--- a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
@@ -278,7 +278,7 @@ namespace MediaBrowser.Api.Playback.Hls
var itsOffset = itsOffsetMs == 0 ? string.Empty : string.Format("-itsoffset {0} ", TimeSpan.FromMilliseconds(itsOffsetMs).TotalSeconds);
- var threads = GetNumberOfThreads(false);
+ var threads = GetNumberOfThreads(state, false);
var inputModifier = GetInputModifier(state);
diff --git a/MediaBrowser.Api/Playback/Progressive/AudioService.cs b/MediaBrowser.Api/Playback/Progressive/AudioService.cs
index 909dd0f40f..4d8d3a5816 100644
--- a/MediaBrowser.Api/Playback/Progressive/AudioService.cs
+++ b/MediaBrowser.Api/Playback/Progressive/AudioService.cs
@@ -102,7 +102,7 @@ namespace MediaBrowser.Api.Playback.Progressive
const string vn = " -vn";
- var threads = GetNumberOfThreads(false);
+ var threads = GetNumberOfThreads(state, false);
var inputModifier = GetInputModifier(state);
diff --git a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
index 023c597308..8ae61b5219 100644
--- a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
+++ b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
@@ -214,12 +214,16 @@ namespace MediaBrowser.Api.Playback.Progressive
if (request.Static)
{
- return ResultFactory.GetStaticFileResult(Request, state.MediaPath, FileShare.Read, responseHeaders, isHeadRequest);
+ var contentType = state.GetMimeType(state.MediaPath);
+
+ return ResultFactory.GetStaticFileResult(Request, state.MediaPath, contentType, FileShare.Read, responseHeaders, isHeadRequest);
}
if (outputPathExists && !ApiEntryPoint.Instance.HasActiveTranscodingJob(outputPath, TranscodingJobType.Progressive))
{
- return ResultFactory.GetStaticFileResult(Request, outputPath, FileShare.Read, responseHeaders, isHeadRequest);
+ var contentType = state.GetMimeType(outputPath);
+
+ return ResultFactory.GetStaticFileResult(Request, outputPath, contentType, FileShare.Read, responseHeaders, isHeadRequest);
}
return GetStreamResult(state, responseHeaders, isHeadRequest).Result;
@@ -287,7 +291,7 @@ namespace MediaBrowser.Api.Playback.Progressive
responseHeaders["Accept-Ranges"] = "none";
- var contentType = MimeTypes.GetMimeType(outputPath);
+ var contentType = state.GetMimeType(outputPath);
// Headers only
if (isHeadRequest)
diff --git a/MediaBrowser.Api/Playback/Progressive/VideoService.cs b/MediaBrowser.Api/Playback/Progressive/VideoService.cs
index 6deea4ffc6..43dc6f0d49 100644
--- a/MediaBrowser.Api/Playback/Progressive/VideoService.cs
+++ b/MediaBrowser.Api/Playback/Progressive/VideoService.cs
@@ -102,7 +102,7 @@ namespace MediaBrowser.Api.Playback.Progressive
format = " -f mp4 -movflags frag_keyframe+empty_moov";
}
- var threads = GetNumberOfThreads(string.Equals(videoCodec, "libvpx", StringComparison.OrdinalIgnoreCase));
+ var threads = GetNumberOfThreads(state, string.Equals(videoCodec, "libvpx", StringComparison.OrdinalIgnoreCase));
var inputModifier = GetInputModifier(state);
diff --git a/MediaBrowser.Api/Playback/StreamRequest.cs b/MediaBrowser.Api/Playback/StreamRequest.cs
index a73a8f0d90..6b0375e2d2 100644
--- a/MediaBrowser.Api/Playback/StreamRequest.cs
+++ b/MediaBrowser.Api/Playback/StreamRequest.cs
@@ -66,6 +66,8 @@ namespace MediaBrowser.Api.Playback
public bool ThrowDebugError { get; set; }
public string Params { get; set; }
+
+ public string ForcedMimeType { get; set; }
}
public class VideoStreamRequest : StreamRequest
diff --git a/MediaBrowser.Api/Playback/StreamState.cs b/MediaBrowser.Api/Playback/StreamState.cs
index 3874fa6036..961ac0a2a2 100644
--- a/MediaBrowser.Api/Playback/StreamState.cs
+++ b/MediaBrowser.Api/Playback/StreamState.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Model.Entities;
+using MediaBrowser.Common.Net;
+using MediaBrowser.Model.Entities;
using MediaBrowser.Model.IO;
using System.Collections.Generic;
using System.IO;
@@ -72,5 +73,20 @@ namespace MediaBrowser.Api.Playback
public string InputVideoCodec { get; set; }
public string InputAudioCodec { get; set; }
+
+ public string GetMimeType(string outputPath)
+ {
+ if (!string.IsNullOrWhiteSpace(Request.ForcedMimeType))
+ {
+ if (VideoRequest == null)
+ {
+ return "audio/" + Request.ForcedMimeType;
+ }
+
+ return "video/" + Request.ForcedMimeType;
+ }
+
+ return MimeTypes.GetMimeType(outputPath);
+ }
}
}