restore ForceLiveStream param

pull/702/head
Luke Pulverenti 8 years ago
parent a38086126f
commit c59b4329f4

@ -2058,6 +2058,7 @@ namespace MediaBrowser.Api.Playback
if (state.VideoRequest != null) if (state.VideoRequest != null)
{ {
state.VideoRequest.CopyTimestamps = transcodingProfile.CopyTimestamps; state.VideoRequest.CopyTimestamps = transcodingProfile.CopyTimestamps;
state.VideoRequest.ForceLiveStream = transcodingProfile.ForceLiveStream;
} }
} }
} }

@ -282,19 +282,12 @@ namespace MediaBrowser.Api.Playback.Hls
{ {
var isLiveStream = (state.RunTimeTicks ?? 0) == 0; var isLiveStream = (state.RunTimeTicks ?? 0) == 0;
return isLiveStream; if (state.VideoRequest.ForceLiveStream)
}
protected override bool CanStreamCopyAudio(StreamState state, List<string> supportedAudioCodecs)
{
var isLiveStream = IsLiveStream(state);
if (!isLiveStream)
{ {
return false; return true;
} }
return base.CanStreamCopyAudio(state, supportedAudioCodecs); return isLiveStream;
} }
} }
} }

@ -500,13 +500,6 @@ namespace MediaBrowser.Api.Playback.Hls
return ResultFactory.GetResult(playlistText, MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary<string, string>()); return ResultFactory.GetResult(playlistText, MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary<string, string>());
} }
private bool IsLiveStream(StreamState state)
{
var isLiveStream = (state.RunTimeTicks ?? 0) == 0;
return isLiveStream;
}
private string GetMasterPlaylistFileText(StreamState state, int totalBitrate) private string GetMasterPlaylistFileText(StreamState state, int totalBitrate)
{ {
var builder = new StringBuilder(); var builder = new StringBuilder();
@ -828,7 +821,7 @@ namespace MediaBrowser.Api.Playback.Hls
args += " -bsf:v h264_mp4toannexb"; args += " -bsf:v h264_mp4toannexb";
} }
args += " -flags -global_header -sc_threshold 0"; args += " -flags -global_header";
} }
else else
{ {
@ -853,7 +846,7 @@ namespace MediaBrowser.Api.Playback.Hls
args += GetGraphicalSubtitleParam(state, codec); args += GetGraphicalSubtitleParam(state, codec);
} }
args += " -flags -global_header -sc_threshold 0"; args += " -flags -global_header";
} }
if (EnableCopyTs(state) && args.IndexOf("-copyts", StringComparison.OrdinalIgnoreCase) == -1) if (EnableCopyTs(state) && args.IndexOf("-copyts", StringComparison.OrdinalIgnoreCase) == -1)
@ -866,6 +859,7 @@ namespace MediaBrowser.Api.Playback.Hls
private bool EnableCopyTs(StreamState state) private bool EnableCopyTs(StreamState state)
{ {
//return state.SubtitleStream != null && state.SubtitleStream.IsTextSubtitleStream && state.VideoRequest.SubtitleMethod == SubtitleDeliveryMethod.Encode;
return true; return true;
} }
@ -888,21 +882,26 @@ namespace MediaBrowser.Api.Playback.Hls
var mapArgs = state.IsOutputVideo ? GetMapArgs(state) : string.Empty; var mapArgs = state.IsOutputVideo ? GetMapArgs(state) : string.Empty;
//var outputTsArg = Path.Combine(Path.GetDirectoryName(outputPath), Path.GetFileNameWithoutExtension(outputPath)) + "%d" + GetSegmentFileExtension(state); var enableGenericSegmenter = false;
//return string.Format("{0} {10} {1} -map_metadata -1 -threads {2} {3} {4} {5} -f segment -max_delay 5000000 -avoid_negative_ts disabled -start_at_zero -segment_time {6} -segment_format mpegts -segment_list_type m3u8 -segment_start_number {7} -segment_list \"{8}\" -y \"{9}\"", if (enableGenericSegmenter)
// inputModifier, {
// GetInputArgument(state), var outputTsArg = Path.Combine(Path.GetDirectoryName(outputPath), Path.GetFileNameWithoutExtension(outputPath)) + "%d" + GetSegmentFileExtension(state);
// threads,
// mapArgs, return string.Format("{0} {10} {1} -map_metadata -1 -threads {2} {3} {4} {5} -f segment -max_delay 5000000 -avoid_negative_ts disabled -start_at_zero -segment_time {6} -segment_format mpegts -segment_list_type m3u8 -segment_start_number {7} -segment_list \"{8}\" -y \"{9}\"",
// GetVideoArguments(state), inputModifier,
// GetAudioArguments(state), GetInputArgument(state),
// state.SegmentLength.ToString(UsCulture), threads,
// startNumberParam, mapArgs,
// outputPath, GetVideoArguments(state),
// outputTsArg, GetAudioArguments(state),
// toTimeParam state.SegmentLength.ToString(UsCulture),
// ).Trim(); startNumberParam,
outputPath,
outputTsArg,
toTimeParam
).Trim();
}
return string.Format("{0}{11} {1} -map_metadata -1 -threads {2} {3} {4}{5} {6} -max_delay 5000000 -avoid_negative_ts disabled -start_at_zero -hls_time {7} -start_number {8} -hls_list_size {9} -y \"{10}\"", return string.Format("{0}{11} {1} -map_metadata -1 -threads {2} {3} {4}{5} {6} -max_delay 5000000 -avoid_negative_ts disabled -start_at_zero -hls_time {7} -start_number {8} -hls_list_size {9} -y \"{10}\"",
inputModifier, inputModifier,

@ -190,6 +190,8 @@ namespace MediaBrowser.Api.Playback
[ApiMember(Name = "CopyTimestamps", Description = "Whether or not to copy timestamps when transcoding with an offset. Defaults to false.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")] [ApiMember(Name = "CopyTimestamps", Description = "Whether or not to copy timestamps when transcoding with an offset. Defaults to false.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
public bool CopyTimestamps { get; set; } public bool CopyTimestamps { get; set; }
public bool ForceLiveStream { get; set; }
public VideoStreamRequest() public VideoStreamRequest()
{ {
EnableAutoStreamCopy = true; EnableAutoStreamCopy = true;

@ -443,6 +443,7 @@ namespace MediaBrowser.Model.Dlna
playlistItem.VideoCodec = transcodingProfile.VideoCodec; playlistItem.VideoCodec = transcodingProfile.VideoCodec;
playlistItem.CopyTimestamps = transcodingProfile.CopyTimestamps; playlistItem.CopyTimestamps = transcodingProfile.CopyTimestamps;
playlistItem.ForceLiveStream = transcodingProfile.ForceLiveStream;
playlistItem.SubProtocol = transcodingProfile.Protocol; playlistItem.SubProtocol = transcodingProfile.Protocol;
playlistItem.AudioStreamIndex = audioStreamIndex; playlistItem.AudioStreamIndex = audioStreamIndex;

@ -31,6 +31,7 @@ namespace MediaBrowser.Model.Dlna
public string VideoProfile { get; set; } public string VideoProfile { get; set; }
public bool CopyTimestamps { get; set; } public bool CopyTimestamps { get; set; }
public bool ForceLiveStream { get; set; }
public string AudioCodec { get; set; } public string AudioCodec { get; set; }
public int? AudioStreamIndex { get; set; } public int? AudioStreamIndex { get; set; }
@ -204,7 +205,7 @@ namespace MediaBrowser.Model.Dlna
list.Add(new NameValuePair("MaxWidth", item.MaxWidth.HasValue ? StringHelper.ToStringCultureInvariant(item.MaxWidth.Value) : string.Empty)); list.Add(new NameValuePair("MaxWidth", item.MaxWidth.HasValue ? StringHelper.ToStringCultureInvariant(item.MaxWidth.Value) : string.Empty));
list.Add(new NameValuePair("MaxHeight", item.MaxHeight.HasValue ? StringHelper.ToStringCultureInvariant(item.MaxHeight.Value) : string.Empty)); list.Add(new NameValuePair("MaxHeight", item.MaxHeight.HasValue ? StringHelper.ToStringCultureInvariant(item.MaxHeight.Value) : string.Empty));
if (StringHelper.EqualsIgnoreCase(item.SubProtocol, "hls")) if (StringHelper.EqualsIgnoreCase(item.SubProtocol, "hls") && !item.ForceLiveStream)
{ {
list.Add(new NameValuePair("StartTimeTicks", string.Empty)); list.Add(new NameValuePair("StartTimeTicks", string.Empty));
} }
@ -234,6 +235,7 @@ namespace MediaBrowser.Model.Dlna
} }
list.Add(new NameValuePair("CopyTimestamps", item.CopyTimestamps.ToString().ToLower())); list.Add(new NameValuePair("CopyTimestamps", item.CopyTimestamps.ToString().ToLower()));
list.Add(new NameValuePair("ForceLiveStream", item.ForceLiveStream.ToString().ToLower()));
list.Add(new NameValuePair("SubtitleMethod", item.SubtitleStreamIndex.HasValue && item.SubtitleDeliveryMethod != SubtitleDeliveryMethod.External ? item.SubtitleDeliveryMethod.ToString() : string.Empty)); list.Add(new NameValuePair("SubtitleMethod", item.SubtitleStreamIndex.HasValue && item.SubtitleDeliveryMethod != SubtitleDeliveryMethod.External ? item.SubtitleDeliveryMethod.ToString() : string.Empty));
return list; return list;

@ -19,7 +19,7 @@ namespace MediaBrowser.Model.Dlna
[XmlAttribute("protocol")] [XmlAttribute("protocol")]
public string Protocol { get; set; } public string Protocol { get; set; }
[XmlAttribute("estimateContentLength")] [XmlAttribute("estimateContentLength")]
public bool EstimateContentLength { get; set; } public bool EstimateContentLength { get; set; }
@ -35,6 +35,9 @@ namespace MediaBrowser.Model.Dlna
[XmlAttribute("context")] [XmlAttribute("context")]
public EncodingContext Context { get; set; } public EncodingContext Context { get; set; }
[XmlAttribute("forceLiveStream")]
public bool ForceLiveStream { get; set; }
public List<string> GetAudioCodecs() public List<string> GetAudioCodecs()
{ {
List<string> list = new List<string>(); List<string> list = new List<string>();

Loading…
Cancel
Save