diff options
Diffstat (limited to 'MediaBrowser.Api')
| -rw-r--r-- | MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs | 37 | ||||
| -rw-r--r-- | MediaBrowser.Api/PlaylistService.cs | 16 |
2 files changed, 33 insertions, 20 deletions
diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs index 88092901c..134c28524 100644 --- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.IO; +using MediaBrowser.Common.Extensions; +using MediaBrowser.Common.IO; using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Dlna; @@ -385,17 +386,19 @@ namespace MediaBrowser.Api.Playback.Hls if (EnableAdaptiveBitrateStreaming(state)) { - //var requestedVideoBitrate = state.VideoRequest.VideoBitRate.Value; + var requestedVideoBitrate = state.VideoRequest.VideoBitRate.Value; - //// By default, vary by just 200k - //var variation = GetBitrateVariation(totalBitrate); + // By default, vary by just 200k + var variation = GetBitrateVariation(totalBitrate); - //var newBitrate = totalBitrate - variation; - //AppendPlaylist(builder, playlistUrl.Replace(requestedVideoBitrate.ToString(UsCulture), (requestedVideoBitrate - variation).ToString(UsCulture)), newBitrate, subtitleGroup); + var newBitrate = totalBitrate - variation; + var variantUrl = ReplaceBitrate(playlistUrl, requestedVideoBitrate, (requestedVideoBitrate - variation)); + AppendPlaylist(builder, variantUrl, newBitrate, subtitleGroup); - //variation *= 2; - //newBitrate = totalBitrate - variation; - //AppendPlaylist(builder, playlistUrl.Replace(requestedVideoBitrate.ToString(UsCulture), (requestedVideoBitrate - variation).ToString(UsCulture)), newBitrate, subtitleGroup); + variation *= 2; + newBitrate = totalBitrate - variation; + variantUrl = ReplaceBitrate(playlistUrl, requestedVideoBitrate, (requestedVideoBitrate - variation)); + AppendPlaylist(builder, variantUrl, newBitrate, subtitleGroup); } if (!string.IsNullOrWhiteSpace(subtitleGroup)) @@ -406,6 +409,14 @@ namespace MediaBrowser.Api.Playback.Hls return builder.ToString(); } + private string ReplaceBitrate(string url, int oldValue, int newValue) + { + return url.Replace( + "videobitrate=" + oldValue.ToString(UsCulture), + "videobitrate=" + newValue.ToString(UsCulture), + StringComparison.OrdinalIgnoreCase); + } + private void AddSubtitles(StreamState state, IEnumerable<MediaStream> subtitles, StringBuilder builder) { var selectedIndex = state.SubtitleStream == null ? (int?)null : state.SubtitleStream.Index; @@ -470,8 +481,8 @@ namespace MediaBrowser.Api.Playback.Hls private int GetBitrateVariation(int bitrate) { - // By default, vary by just 100k - var variation = 100000; + // By default, vary by just 50k + var variation = 50000; if (bitrate >= 10000000) { @@ -497,6 +508,10 @@ namespace MediaBrowser.Api.Playback.Hls { variation = 200000; } + else if (bitrate >= 400000) + { + variation = 100000; + } return variation; } diff --git a/MediaBrowser.Api/PlaylistService.cs b/MediaBrowser.Api/PlaylistService.cs index c6a4bb20c..5cba348a5 100644 --- a/MediaBrowser.Api/PlaylistService.cs +++ b/MediaBrowser.Api/PlaylistService.cs @@ -7,7 +7,6 @@ using MediaBrowser.Model.Playlists; using MediaBrowser.Model.Querying; using ServiceStack; using System; -using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -24,6 +23,9 @@ namespace MediaBrowser.Api [ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")] public string UserId { get; set; } + + [ApiMember(Name = "MediaType", Description = "The playlist media type", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] + public string MediaType { get; set; } } [Route("/Playlists/{Id}/Items", "POST", Summary = "Adds items to a playlist")] @@ -99,20 +101,16 @@ namespace MediaBrowser.Api public async Task<object> Post(CreatePlaylist request) { - var item = await _playlistManager.CreatePlaylist(new PlaylistCreationOptions + var result = await _playlistManager.CreatePlaylist(new PlaylistCreationRequest { Name = request.Name, ItemIdList = (request.Ids ?? string.Empty).Split(',').Where(i => !string.IsNullOrWhiteSpace(i)).ToList(), - UserId = request.UserId + UserId = request.UserId, + MediaType = request.MediaType }).ConfigureAwait(false); - var dto = _dtoService.GetBaseItemDto(item, new List<ItemFields>()); - - return ToOptimizedResult(new PlaylistCreationResult - { - Id = dto.Id - }); + return ToOptimizedResult(result); } public void Post(AddToPlaylist request) |
