diff options
Diffstat (limited to 'MediaBrowser.Api/Playback/UniversalAudioService.cs')
| -rw-r--r-- | MediaBrowser.Api/Playback/UniversalAudioService.cs | 62 |
1 files changed, 54 insertions, 8 deletions
diff --git a/MediaBrowser.Api/Playback/UniversalAudioService.cs b/MediaBrowser.Api/Playback/UniversalAudioService.cs index e50d0f2c5..ae64623df 100644 --- a/MediaBrowser.Api/Playback/UniversalAudioService.cs +++ b/MediaBrowser.Api/Playback/UniversalAudioService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Threading.Tasks; using MediaBrowser.Api.Playback.Hls; @@ -35,8 +36,6 @@ namespace MediaBrowser.Api.Playback [ApiMember(Name = "DeviceId", Description = "The device id of the client requesting. Used to stop encoding processes when needed.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] public string DeviceId { get; set; } - public string Token { get; set; } - public string UserId { get; set; } public string AudioCodec { get; set; } public string Container { get; set; } @@ -47,6 +46,10 @@ namespace MediaBrowser.Api.Playback [ApiMember(Name = "StartTimeTicks", Description = "Optional. Specify a starting offset, in ticks. 1 tick = 10000 ms", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")] public long? StartTimeTicks { get; set; } + + public string TranscodingContainer { get; set; } + public string TranscodingProtocol { get; set; } + public int? MaxAudioSampleRate { get; set; } } [Route("/Audio/{Id}/universal.{Container}", "GET", Summary = "Gets an audio stream")] @@ -125,12 +128,52 @@ namespace MediaBrowser.Api.Playback { Type = DlnaProfileType.Audio, Context = EncodingContext.Streaming, - Container = "ts", - AudioCodec = "aac", - Protocol = "hls" + Container = request.TranscodingContainer, + AudioCodec = request.AudioCodec, + Protocol = request.TranscodingProtocol } }; + var codecProfiles = new List<CodecProfile>(); + var conditions = new List<ProfileCondition>(); + + if (request.MaxAudioSampleRate.HasValue) + { + // codec profile + conditions.Add(new ProfileCondition + { + Condition = ProfileConditionType.LessThanEqual, + IsRequired = false, + Property = ProfileConditionValue.AudioSampleRate, + Value = request.MaxAudioSampleRate.Value.ToString(CultureInfo.InvariantCulture) + }); + } + + if (request.MaxAudioChannels.HasValue) + { + // codec profile + conditions.Add(new ProfileCondition + { + Condition = ProfileConditionType.LessThanEqual, + IsRequired = false, + Property = ProfileConditionValue.AudioChannels, + Value = request.MaxAudioChannels.Value.ToString(CultureInfo.InvariantCulture) + }); + } + + if (conditions.Count > 0) + { + // codec profile + codecProfiles.Add(new CodecProfile + { + Type = CodecType.Audio, + Container = request.Container, + Conditions = conditions.ToArray() + }); + } + + deviceProfile.CodecProfiles = codecProfiles.ToArray(); + return deviceProfile; } @@ -194,7 +237,9 @@ namespace MediaBrowser.Api.Playback MediaSourceId = mediaSource.Id, PlaySessionId = playbackInfoResult.PlaySessionId, StartTimeTicks = request.StartTimeTicks, - Static = isStatic + Static = isStatic, + SegmentContainer = request.TranscodingContainer, + AudioSampleRate = request.MaxAudioSampleRate }; if (isHeadRequest) @@ -226,7 +271,7 @@ namespace MediaBrowser.Api.Playback var newRequest = new GetAudioStream { AudioBitRate = isStatic ? (int?)null : Convert.ToInt32(Math.Min(request.MaxStreamingBitrate ?? 192000, int.MaxValue)), - //AudioCodec = request.AudioCodec, + AudioCodec = request.AudioCodec, Container = isStatic ? null : ("." + mediaSource.TranscodingContainer), DeviceId = request.DeviceId, Id = request.Id, @@ -234,7 +279,8 @@ namespace MediaBrowser.Api.Playback MediaSourceId = mediaSource.Id, PlaySessionId = playbackInfoResult.PlaySessionId, StartTimeTicks = request.StartTimeTicks, - Static = isStatic + Static = isStatic, + AudioSampleRate = request.MaxAudioSampleRate }; if (isHeadRequest) |
