aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Playback/BaseStreamingService.cs
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2015-06-15 00:28:29 -0400
committerLuke <luke.pulverenti@gmail.com>2015-06-15 00:28:29 -0400
commit7d9d57a36ecee8e8a74b92544166c8fe70a0f880 (patch)
treea7f8a6bdb038048449d45a1e8926843015886f97 /MediaBrowser.Api/Playback/BaseStreamingService.cs
parent5aafbe3dd694813a4e68f21ee72e59d6c53e776a (diff)
parent55eb54cbc28e40254a50c5a25443e910798243dc (diff)
Merge pull request #1118 from MediaBrowser/dev
3.0.5641.4
Diffstat (limited to 'MediaBrowser.Api/Playback/BaseStreamingService.cs')
-rw-r--r--MediaBrowser.Api/Playback/BaseStreamingService.cs56
1 files changed, 39 insertions, 17 deletions
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index 31679aad3..41d785a34 100644
--- a/MediaBrowser.Api/Playback/BaseStreamingService.cs
+++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs
@@ -8,12 +8,12 @@ using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Dlna;
-using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.MediaInfo;
+using MediaBrowser.Model.Serialization;
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -23,7 +23,6 @@ using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
-using MediaBrowser.Model.Serialization;
namespace MediaBrowser.Api.Playback
{
@@ -690,7 +689,7 @@ namespace MediaBrowser.Api.Playback
// TODO: Perhaps also use original_size=1920x800 ??
return string.Format("subtitles=filename='{0}'{1},setpts=PTS -{2}/TB",
- subtitlePath.Replace("'", "\\'").Replace('\\', '/').Replace(":/", "\\:/"),
+ subtitlePath.Replace('\\', '/').Replace("'", "\\'").Replace(":/", "\\:/"),
charsetParam,
seconds.ToString(UsCulture));
}
@@ -698,7 +697,7 @@ namespace MediaBrowser.Api.Playback
var mediaPath = state.MediaPath ?? string.Empty;
return string.Format("subtitles='{0}:si={1}',setpts=PTS -{2}/TB",
- mediaPath.Replace("'", "\\'").Replace('\\', '/').Replace(":/", "\\:/"),
+ mediaPath.Replace('\\', '/').Replace("'", "\\'").Replace(":/", "\\:/"),
state.InternalSubtitleStreamOffset.ToString(UsCulture),
seconds.ToString(UsCulture));
}
@@ -773,6 +772,11 @@ namespace MediaBrowser.Api.Playback
? null
: audioStream.Channels;
+ if (inputChannels <= 0)
+ {
+ inputChannels = null;
+ }
+
var codec = outputAudioCodec ?? string.Empty;
if (codec.IndexOf("wma", StringComparison.OrdinalIgnoreCase) != -1)
@@ -813,11 +817,11 @@ namespace MediaBrowser.Api.Playback
}
/// <summary>
- /// Gets the name of the output audio codec
+ /// Gets the audio encoder.
/// </summary>
/// <param name="request">The request.</param>
/// <returns>System.String.</returns>
- private string GetAudioCodec(StreamRequest request)
+ protected string GetAudioEncoder(StreamRequest request)
{
var codec = request.AudioCodec;
@@ -846,7 +850,7 @@ namespace MediaBrowser.Api.Playback
/// </summary>
/// <param name="request">The request.</param>
/// <returns>System.String.</returns>
- private string GetVideoCodec(VideoStreamRequest request)
+ protected string GetVideoEncoder(VideoStreamRequest request)
{
var codec = request.VideoCodec;
@@ -1665,13 +1669,13 @@ namespace MediaBrowser.Api.Playback
state.OutputAudioBitrate = GetAudioBitrateParam(state.Request, state.AudioStream);
state.OutputAudioSampleRate = request.AudioSampleRate;
- state.OutputAudioCodec = GetAudioCodec(state.Request);
+ state.OutputAudioCodec = state.Request.AudioCodec;
state.OutputAudioChannels = GetNumAudioChannelsParam(state.Request, state.AudioStream, state.OutputAudioCodec);
if (videoRequest != null)
{
- state.OutputVideoCodec = GetVideoCodec(videoRequest);
+ state.OutputVideoCodec = state.VideoRequest.VideoCodec;
state.OutputVideoBitrate = GetVideoBitrateParamValue(state.VideoRequest, state.VideoStream);
if (state.OutputVideoBitrate.HasValue)
@@ -1768,6 +1772,12 @@ namespace MediaBrowser.Api.Playback
state.InputAudioSync = "1";
}
+ if (string.Equals(mediaSource.Container, "wma", StringComparison.OrdinalIgnoreCase))
+ {
+ // Seeing some stuttering when transcoding wma to audio-only HLS
+ state.InputAudioSync = "1";
+ }
+
var mediaStreams = mediaSource.MediaStreams;
if (videoRequest != null)
@@ -2061,15 +2071,18 @@ namespace MediaBrowser.Api.Playback
state.MimeType = mediaProfile.MimeType;
}
- var transcodingProfile = state.VideoRequest == null ?
- profile.GetAudioTranscodingProfile(state.OutputContainer, audioCodec) :
- profile.GetVideoTranscodingProfile(state.OutputContainer, audioCodec, videoCodec);
-
- if (transcodingProfile != null)
+ if (!state.Request.Static)
{
- state.EstimateContentLength = transcodingProfile.EstimateContentLength;
- state.EnableMpegtsM2TsMode = transcodingProfile.EnableMpegtsM2TsMode;
- state.TranscodeSeekInfo = transcodingProfile.TranscodeSeekInfo;
+ var transcodingProfile = state.VideoRequest == null ?
+ profile.GetAudioTranscodingProfile(state.OutputContainer, audioCodec) :
+ profile.GetVideoTranscodingProfile(state.OutputContainer, audioCodec, videoCodec);
+
+ if (transcodingProfile != null)
+ {
+ state.EstimateContentLength = transcodingProfile.EstimateContentLength;
+ state.EnableMpegtsM2TsMode = transcodingProfile.EnableMpegtsM2TsMode;
+ state.TranscodeSeekInfo = transcodingProfile.TranscodeSeekInfo;
+ }
}
}
@@ -2088,6 +2101,15 @@ namespace MediaBrowser.Api.Playback
responseHeaders["transferMode.dlna.org"] = string.IsNullOrEmpty(transferMode) ? "Streaming" : transferMode;
responseHeaders["realTimeInfo.dlna.org"] = "DLNA.ORG_TLAG=*";
+ if (string.Equals(GetHeader("getMediaInfo.sec"), "1", StringComparison.OrdinalIgnoreCase))
+ {
+ if (state.RunTimeTicks.HasValue)
+ {
+ var ms = TimeSpan.FromTicks(state.RunTimeTicks.Value).TotalMilliseconds;
+ responseHeaders["MediaInfo.sec"] = string.Format("SEC_Duration={0};", Convert.ToInt32(ms).ToString(CultureInfo.InvariantCulture));
+ }
+ }
+
if (state.RunTimeTicks.HasValue && !isStaticallyStreamed && profile != null)
{
AddTimeSeekResponseHeaders(state, responseHeaders);