diff --git a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
index 1616cbf539..eb133b7d6c 100644
--- a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
@@ -123,7 +123,17 @@ namespace MediaBrowser.Api.Playback.Hls
var audioBitrate = GetAudioBitrateParam(state) ?? 0;
var videoBitrate = GetVideoBitrateParam(state) ?? 0;
- var playlistText = GetMasterPlaylistFileText(playlist, videoBitrate + audioBitrate);
+ var appendBaselineStream = false;
+ var baselineStreamBitrate = 64000;
+
+ var hlsVideoRequest = state.VideoRequest as GetHlsVideoStream;
+ if (hlsVideoRequest != null)
+ {
+ appendBaselineStream = hlsVideoRequest.AppendBaselineStream;
+ baselineStreamBitrate = hlsVideoRequest.BaselineStreamAudioBitRate ?? baselineStreamBitrate;
+ }
+
+ var playlistText = GetMasterPlaylistFileText(playlist, videoBitrate + audioBitrate, appendBaselineStream, baselineStreamBitrate);
try
{
@@ -135,7 +145,7 @@ namespace MediaBrowser.Api.Playback.Hls
}
}
- private string GetMasterPlaylistFileText(string firstPlaylist, int bitrate)
+ private string GetMasterPlaylistFileText(string firstPlaylist, int bitrate, bool includeBaselineStream, int baselineStreamBitrate)
{
var builder = new StringBuilder();
@@ -150,9 +160,12 @@ namespace MediaBrowser.Api.Playback.Hls
builder.AppendLine(playlistUrl);
// Low bitrate stream
- builder.AppendLine("#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=64000");
- playlistUrl = "hls/" + Path.GetFileName(firstPlaylist).Replace(".m3u8", "-low/stream.m3u8");
- builder.AppendLine(playlistUrl);
+ if (includeBaselineStream)
+ {
+ builder.AppendLine("#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=" + baselineStreamBitrate.ToString(UsCulture));
+ playlistUrl = "hls/" + Path.GetFileName(firstPlaylist).Replace(".m3u8", "-low/stream.m3u8");
+ builder.AppendLine(playlistUrl);
+ }
return builder.ToString();
}
@@ -246,15 +259,22 @@ namespace MediaBrowser.Api.Playback.Hls
outputPath
).Trim();
- if (state.Item is Video)
+ var hlsVideoRequest = state.VideoRequest as GetHlsVideoStream;
+
+ if (hlsVideoRequest != null)
{
- var lowBitratePath = Path.Combine(Path.GetDirectoryName(outputPath), Path.GetFileNameWithoutExtension(outputPath) + "-low.m3u8");
+ if (hlsVideoRequest.AppendBaselineStream && state.Item is Video)
+ {
+ var lowBitratePath = Path.Combine(Path.GetDirectoryName(outputPath), Path.GetFileNameWithoutExtension(outputPath) + "-low.m3u8");
- var lowBitrateParams = string.Format(" -threads 0 -vn -codec:a:0 libmp3lame -ac 2 -ab 32000 -hls_time 10 -start_number 0 -hls_list_size 1440 \"{0}\"",
- lowBitratePath,
- state.AudioStream.Index);
+ var bitrate = hlsVideoRequest.BaselineStreamAudioBitRate ?? 64000;
- args += " " + lowBitrateParams;
+ var lowBitrateParams = string.Format(" -threads 0 -vn -codec:a:0 libmp3lame -ac 2 -ab {1} -hls_time 10 -start_number 0 -hls_list_size 1440 \"{0}\"",
+ lowBitratePath,
+ bitrate / 2);
+
+ args += " " + lowBitrateParams;
+ }
}
return args;
diff --git a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs
index dfe154c09d..5347272676 100644
--- a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs
@@ -16,7 +16,11 @@ namespace MediaBrowser.Api.Playback.Hls
[Api(Description = "Gets a video stream using HTTP live streaming.")]
public class GetHlsVideoStream : VideoStreamRequest
{
+ [ApiMember(Name = "BaselineStreamAudioBitRate", Description = "Optional. Specify the audio bitrate for the baseline stream.", IsRequired = false, DataType = "int", ParameterType = "query", Verb = "GET")]
+ public int? BaselineStreamAudioBitRate { get; set; }
+ [ApiMember(Name = "AppendBaselineStream", Description = "Optional. Whether or not to include a baseline audio-only stream in the master playlist.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
+ public bool AppendBaselineStream { get; set; }
}
///
diff --git a/MediaBrowser.Model/Dto/StreamOptions.cs b/MediaBrowser.Model/Dto/StreamOptions.cs
index b9f2dbe4a8..cee95639c5 100644
--- a/MediaBrowser.Model/Dto/StreamOptions.cs
+++ b/MediaBrowser.Model/Dto/StreamOptions.cs
@@ -77,6 +77,18 @@
///
/// The level.
public string Level { get; set; }
+
+ ///
+ /// Gets or sets the baseline stream audio bit rate.
+ ///
+ /// The baseline stream audio bit rate.
+ public int? BaselineStreamAudioBitRate { get; set; }
+
+ ///
+ /// Gets or sets a value indicating whether [append baseline stream].
+ ///
+ /// true if [append baseline stream]; otherwise, false.
+ public bool AppendBaselineStream { get; set; }
}
///