From d02c0ba3f44269fa2ed4a86c2d472155bc4fdf09 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 3 Mar 2014 23:58:19 -0500 Subject: [PATCH] added hls changes for live tv --- MediaBrowser.Api/Playback/BaseStreamingService.cs | 5 ++++- MediaBrowser.Api/Playback/Hls/BaseHlsService.cs | 6 ++++-- MediaBrowser.Api/Playback/Hls/VideoHlsService.cs | 4 +++- MediaBrowser.Api/Playback/StreamState.cs | 1 + 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index c6bcbded8c..fea44c9a81 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -265,7 +265,7 @@ namespace MediaBrowser.Api.Playback if (cpuCount >= 4) { - return EncodingQuality.HighQuality; + //return EncodingQuality.HighQuality; } return EncodingQuality.HighSpeed; @@ -1418,6 +1418,9 @@ namespace MediaBrowser.Api.Playback state.HasMediaStreams = mediaStreams.Count > 0; + state.SegmentLength = state.ReadInputAtNativeFramerate ? 3 : 10; + state.HlsListSize = state.ReadInputAtNativeFramerate ? 20 : 1440; + return state; } diff --git a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs index c6055ed51d..5324d2c805 100644 --- a/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/BaseHlsService.cs @@ -285,7 +285,7 @@ namespace MediaBrowser.Api.Playback.Hls // If performSubtitleConversions is true we're actually starting ffmpeg var startNumberParam = performSubtitleConversions ? GetStartNumber(state).ToString(UsCulture) : "0"; - var args = string.Format("{0} {1} -i {2}{3} -map_metadata -1 -threads {4} {5} {6} -sc_threshold 0 {7} -hls_time {8} -start_number {9} -hls_list_size 1440 \"{10}\"", + var args = string.Format("{0} {1} -i {2}{3} -map_metadata -1 -threads {4} {5} {6} -sc_threshold 0 {7} -hls_time {8} -start_number {9} -hls_list_size {10} \"{11}\"", itsOffset, inputModifier, GetInputArgument(state), @@ -296,6 +296,7 @@ namespace MediaBrowser.Api.Playback.Hls GetAudioArguments(state), state.SegmentLength.ToString(UsCulture), startNumberParam, + state.HlsListSize.ToString(UsCulture), outputPath ).Trim(); @@ -307,11 +308,12 @@ namespace MediaBrowser.Api.Playback.Hls var bitrate = hlsVideoRequest.BaselineStreamAudioBitRate ?? 64000; - var lowBitrateParams = string.Format(" -threads {0} -vn -codec:a:0 libmp3lame -ac 2 -ab {1} -hls_time {2} -start_number {3} -hls_list_size 1440 \"{4}\"", + var lowBitrateParams = string.Format(" -threads {0} -vn -codec:a:0 libmp3lame -ac 2 -ab {1} -hls_time {2} -start_number {3} -hls_list_size {4} \"{5}\"", threads, bitrate / 2, state.SegmentLength.ToString(UsCulture), startNumberParam, + state.HlsListSize.ToString(UsCulture), lowBitratePath); args += " " + lowBitrateParams; diff --git a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs index ca598c2751..a2080995d0 100644 --- a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs @@ -163,7 +163,9 @@ namespace MediaBrowser.Api.Playback.Hls return IsH264(state.VideoStream) ? "-codec:v:0 copy -bsf h264_mp4toannexb" : "-codec:v:0 copy"; } - const string keyFrameArg = " -force_key_frames expr:if(isnan(prev_forced_t),gte(t,.1),gte(t,prev_forced_t+5))"; + var keyFrameArg = state.ReadInputAtNativeFramerate ? + " -force_key_frames expr:if(isnan(prev_forced_t),gte(t,.1),gte(t,prev_forced_t+1))" : + " -force_key_frames expr:if(isnan(prev_forced_t),gte(t,.1),gte(t,prev_forced_t+5))"; var hasGraphicalSubs = state.SubtitleStream != null && !state.SubtitleStream.IsExternal && (state.SubtitleStream.Codec.IndexOf("pgs", StringComparison.OrdinalIgnoreCase) != -1 || diff --git a/MediaBrowser.Api/Playback/StreamState.cs b/MediaBrowser.Api/Playback/StreamState.cs index 55d7b22e2c..3874fa6036 100644 --- a/MediaBrowser.Api/Playback/StreamState.cs +++ b/MediaBrowser.Api/Playback/StreamState.cs @@ -56,6 +56,7 @@ namespace MediaBrowser.Api.Playback public string LiveTvStreamId { get; set; } public int SegmentLength = 10; + public int HlsListSize; public long? RunTimeTicks;