fix stream copy decisions
This commit is contained in:
parent
4fb8938d09
commit
fe430acfc9
|
@ -312,31 +312,6 @@ namespace MediaBrowser.Api.Playback.Hls
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool CanStreamCopyVideo(VideoStreamRequest request, MediaStream videoStream)
|
|
||||||
{
|
|
||||||
if (videoStream.KeyFrames == null || videoStream.KeyFrames.Count == 0)
|
|
||||||
{
|
|
||||||
Logger.Debug("Cannot stream copy video due to missing keyframe info");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var previousSegment = 0;
|
|
||||||
foreach (var frame in videoStream.KeyFrames)
|
|
||||||
{
|
|
||||||
var length = frame - previousSegment;
|
|
||||||
|
|
||||||
// Don't allow really long segments because this could result in long download times
|
|
||||||
if (length > 10000)
|
|
||||||
{
|
|
||||||
Logger.Debug("Cannot stream copy video due to long segment length of {0}ms", length);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
previousSegment = frame;
|
|
||||||
}
|
|
||||||
|
|
||||||
return base.CanStreamCopyVideo(request, videoStream);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override bool CanStreamCopyAudio(VideoStreamRequest request, MediaStream audioStream, List<string> supportedAudioCodecs)
|
protected override bool CanStreamCopyAudio(VideoStreamRequest request, MediaStream audioStream, List<string> supportedAudioCodecs)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -285,20 +285,23 @@ namespace MediaBrowser.Api.Playback.Hls
|
||||||
private double[] GetSegmentLengths(StreamState state)
|
private double[] GetSegmentLengths(StreamState state)
|
||||||
{
|
{
|
||||||
var result = new List<double>();
|
var result = new List<double>();
|
||||||
var encoder = GetVideoEncoder(state);
|
if (state.VideoRequest != null)
|
||||||
|
|
||||||
if (string.Equals(encoder, "copy", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
{
|
||||||
var videoStream = state.VideoStream;
|
var encoder = GetVideoEncoder(state);
|
||||||
if (videoStream.KeyFrames != null && videoStream.KeyFrames.Count > 0)
|
|
||||||
|
if (string.Equals(encoder, "copy", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
foreach (var frame in videoStream.KeyFrames)
|
var videoStream = state.VideoStream;
|
||||||
|
if (videoStream.KeyFrames != null && videoStream.KeyFrames.Count > 0)
|
||||||
{
|
{
|
||||||
var seconds = TimeSpan.FromMilliseconds(frame).TotalSeconds;
|
foreach (var frame in videoStream.KeyFrames)
|
||||||
seconds -= result.Sum();
|
{
|
||||||
result.Add(seconds);
|
var seconds = TimeSpan.FromMilliseconds(frame).TotalSeconds;
|
||||||
|
seconds -= result.Sum();
|
||||||
|
result.Add(seconds);
|
||||||
|
}
|
||||||
|
return result.ToArray();
|
||||||
}
|
}
|
||||||
return result.ToArray();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -960,5 +963,30 @@ namespace MediaBrowser.Api.Playback.Hls
|
||||||
{
|
{
|
||||||
return isOutputVideo ? ".ts" : ".ts";
|
return isOutputVideo ? ".ts" : ".ts";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override bool CanStreamCopyVideo(VideoStreamRequest request, MediaStream videoStream)
|
||||||
|
{
|
||||||
|
if (videoStream.KeyFrames == null || videoStream.KeyFrames.Count == 0)
|
||||||
|
{
|
||||||
|
Logger.Debug("Cannot stream copy video due to missing keyframe info");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var previousSegment = 0;
|
||||||
|
foreach (var frame in videoStream.KeyFrames)
|
||||||
|
{
|
||||||
|
var length = frame - previousSegment;
|
||||||
|
|
||||||
|
// Don't allow really long segments because this could result in long download times
|
||||||
|
if (length > 10000)
|
||||||
|
{
|
||||||
|
Logger.Debug("Cannot stream copy video due to long segment length of {0}ms", length);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
previousSegment = frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
return base.CanStreamCopyVideo(request, videoStream);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user