diff options
Diffstat (limited to 'MediaBrowser.Api/Playback/BaseStreamingService.cs')
| -rw-r--r-- | MediaBrowser.Api/Playback/BaseStreamingService.cs | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 36207c8b4..d98e2f3a1 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -287,12 +287,18 @@ namespace MediaBrowser.Api.Playback return threads; } - protected string H264Encoder + protected string GetH264Encoder(StreamState state) { - get + if (string.Equals(ApiEntryPoint.Instance.GetEncodingOptions().HardwareVideoDecoder, "qsv", StringComparison.OrdinalIgnoreCase)) { - return "libx264"; + // It's currently failing on live tv + if (state.RunTimeTicks.HasValue) + { + return "h264_qsv"; + } } + + return "libx264"; } /// <summary> @@ -313,7 +319,7 @@ namespace MediaBrowser.Api.Playback { param = "-preset superfast"; - param += " -crf 23"; + param += " -crf 23 -rc-lookahead 0 -muxdelay 0 -refs 1"; } else if (string.Equals(videoCodec, "libx265", StringComparison.OrdinalIgnoreCase)) @@ -326,7 +332,7 @@ namespace MediaBrowser.Api.Playback // h264 (h264_qsv) else if (string.Equals(videoCodec, "h264_qsv", StringComparison.OrdinalIgnoreCase)) { - param = "-preset 7"; + param = "-preset 7 -look_ahead 0"; } @@ -400,8 +406,10 @@ namespace MediaBrowser.Api.Playback if (!string.IsNullOrEmpty(state.VideoRequest.Level)) { + var h264Encoder = GetH264Encoder(state); + // h264_qsv and libnvenc expect levels to be expressed as a decimal. libx264 supports decimal and non-decimal format - if (String.Equals(H264Encoder, "h264_qsv", StringComparison.OrdinalIgnoreCase) || String.Equals(H264Encoder, "libnvenc", StringComparison.OrdinalIgnoreCase)) + if (String.Equals(h264Encoder, "h264_qsv", StringComparison.OrdinalIgnoreCase) || String.Equals(h264Encoder, "libnvenc", StringComparison.OrdinalIgnoreCase)) { switch (state.VideoRequest.Level) { @@ -561,7 +569,10 @@ namespace MediaBrowser.Api.Playback if (string.Equals(outputVideoCodec, "h264_qsv", StringComparison.OrdinalIgnoreCase)) { - filters[filters.Count - 1] += ":flags=fast_bilinear"; + if (filters.Count > 1) + { + //filters[filters.Count - 1] += ":flags=fast_bilinear"; + } } var output = string.Empty; @@ -782,7 +793,7 @@ namespace MediaBrowser.Api.Playback { if (string.Equals(codec, "h264", StringComparison.OrdinalIgnoreCase)) { - return H264Encoder; + return GetH264Encoder(state); } if (string.Equals(codec, "vpx", StringComparison.OrdinalIgnoreCase)) { @@ -1416,49 +1427,45 @@ namespace MediaBrowser.Api.Playback } else if (i == 16) { - request.ClientTime = val; - } - else if (i == 17) - { if (videoRequest != null) { videoRequest.MaxRefFrames = int.Parse(val, UsCulture); } } - else if (i == 18) + else if (i == 17) { if (videoRequest != null) { videoRequest.MaxVideoBitDepth = int.Parse(val, UsCulture); } } - else if (i == 19) + else if (i == 18) { if (videoRequest != null) { videoRequest.Profile = val; } } - else if (i == 20) + else if (i == 19) { if (videoRequest != null) { videoRequest.Cabac = string.Equals("true", val, StringComparison.OrdinalIgnoreCase); } } - else if (i == 21) + else if (i == 20) { request.PlaySessionId = val; } - else if (i == 22) + else if (i == 21) { // api_key } - else if (i == 23) + else if (i == 22) { request.LiveStreamId = val; } - else if (i == 24) + else if (i == 23) { // Duplicating ItemId because of MediaMonkey } @@ -1662,7 +1669,6 @@ namespace MediaBrowser.Api.Playback state.InputContainer = mediaSource.Container; state.InputFileSize = mediaSource.Size; state.InputBitrate = mediaSource.Bitrate; - state.ReadInputAtNativeFramerate = mediaSource.ReadAtNativeFramerate; state.RunTimeTicks = mediaSource.RunTimeTicks; state.RemoteHttpHeaders = mediaSource.RequiredHttpHeaders; |
