aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Playback/UniversalAudioService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/Playback/UniversalAudioService.cs')
-rw-r--r--MediaBrowser.Api/Playback/UniversalAudioService.cs62
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)