aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api')
-rw-r--r--MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs37
-rw-r--r--MediaBrowser.Api/PlaylistService.cs16
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)