diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-01-24 13:09:50 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-01-24 13:09:50 -0500 |
| commit | 3cc608d781b72b9e9c2dd91f90d90a5cf6f0a57a (patch) | |
| tree | 0da58114f04b53bdcfd51b52169908e35a5549d1 /MediaBrowser.Api/Playback | |
| parent | e92688fbec10fe54cf0425bb9262578e5bed1e12 (diff) | |
update next/previous buttons
Diffstat (limited to 'MediaBrowser.Api/Playback')
| -rw-r--r-- | MediaBrowser.Api/Playback/BaseStreamingService.cs | 34 | ||||
| -rw-r--r-- | MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs | 10 | ||||
| -rw-r--r-- | MediaBrowser.Api/Playback/Hls/VideoHlsService.cs | 10 | ||||
| -rw-r--r-- | MediaBrowser.Api/Playback/Progressive/VideoService.cs | 16 | ||||
| -rw-r--r-- | MediaBrowser.Api/Playback/StreamState.cs | 3 |
5 files changed, 54 insertions, 19 deletions
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 394ca69d5a..76cce0d66d 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -307,7 +307,7 @@ namespace MediaBrowser.Api.Playback if (videoCodec.Equals("libvpx", StringComparison.OrdinalIgnoreCase)) { // http://www.webmproject.org/docs/encoder-parameters/ - return "-speed 16 -quality good -profile:v 0 -slices 8"; + return "-speed 16 -quality good -profile:v 0 -slices 8 -crf 18"; } // asf/wmv @@ -321,11 +321,11 @@ namespace MediaBrowser.Api.Playback switch (GetQualitySetting()) { case EncodingQuality.HighSpeed: - return "-preset ultrafast"; + return "-preset ultrafast -crf 18"; case EncodingQuality.HighQuality: - return "-preset superfast"; + return "-preset superfast -crf 18"; case EncodingQuality.MaxQuality: - return "-preset superfast"; + return "-preset superfast -crf 18"; default: throw new Exception("Unrecognized MediaEncodingQuality value."); } @@ -381,7 +381,7 @@ namespace MediaBrowser.Api.Playback audioSampleRate, volParam, pts, - state.AudioSync.ToString(UsCulture)); + state.AudioSync); } /// <summary> @@ -994,6 +994,26 @@ namespace MediaBrowser.Api.Playback } } + protected double? GetFramerateParam(StreamState state) + { + if (state.VideoRequest != null && state.VideoRequest.Framerate.HasValue) + { + return state.VideoRequest.Framerate.Value; + } + + if (state.VideoStream != null) + { + var contentRate = state.VideoStream.AverageFrameRate ?? state.VideoStream.RealFrameRate; + + if (contentRate.HasValue && contentRate.Value > 23.976) + { + return 23.976; + } + } + + return null; + } + /// <summary> /// Gets the state. /// </summary> @@ -1068,7 +1088,7 @@ namespace MediaBrowser.Api.Playback //state.RunTimeTicks = recording.RunTimeTicks; state.ReadInputAtNativeFramerate = recording.RecordingInfo.Status == RecordingStatus.InProgress; state.SendInputOverStandardInput = recording.RecordingInfo.Status == RecordingStatus.InProgress; - state.AudioSync = 1000; + state.AudioSync = "1000"; state.DeInterlace = true; } else if (item is LiveTvChannel) @@ -1096,7 +1116,7 @@ namespace MediaBrowser.Api.Playback state.SendInputOverStandardInput = true; state.ReadInputAtNativeFramerate = true; - state.AudioSync = 1000; + state.AudioSync = "1000"; state.DeInterlace = true; } else diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs index f064a13c6b..388339f171 100644 --- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs @@ -317,12 +317,16 @@ namespace MediaBrowser.Api.Playback.Hls } } - if (state.VideoRequest.Framerate.HasValue) + var framerate = GetFramerateParam(state); + if (framerate.HasValue) { - args += string.Format(" -r {0}", state.VideoRequest.Framerate.Value); + args += string.Format(" -r {0}", framerate.Value.ToString(UsCulture)); } - args += " -vsync vfr"; + if (!string.IsNullOrEmpty(state.VideoSync)) + { + args += " -vsync " + state.VideoSync; + } if (!string.IsNullOrEmpty(state.VideoRequest.Profile)) { diff --git a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs index 7e7e8ba5bd..9d9c62a28e 100644 --- a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs @@ -194,12 +194,16 @@ namespace MediaBrowser.Api.Playback.Hls } } - if (state.VideoRequest.Framerate.HasValue) + var framerate = GetFramerateParam(state); + if (framerate.HasValue) { - args += string.Format(" -r {0}", state.VideoRequest.Framerate.Value); + args += string.Format(" -r {0}", framerate.Value.ToString(UsCulture)); } - args += " -vsync vfr"; + if (!string.IsNullOrEmpty(state.VideoSync)) + { + args += " -vsync " + state.VideoSync; + } if (!string.IsNullOrEmpty(state.VideoRequest.Profile)) { diff --git a/MediaBrowser.Api/Playback/Progressive/VideoService.cs b/MediaBrowser.Api/Playback/Progressive/VideoService.cs index 826b034408..b16761595c 100644 --- a/MediaBrowser.Api/Playback/Progressive/VideoService.cs +++ b/MediaBrowser.Api/Playback/Progressive/VideoService.cs @@ -156,9 +156,10 @@ namespace MediaBrowser.Api.Playback.Progressive } } - if (request.Framerate.HasValue) + var framerate = GetFramerateParam(state); + if (framerate.HasValue) { - args += string.Format(" -r {0}", request.Framerate.Value); + args += string.Format(" -r {0}", framerate.Value.ToString(UsCulture)); } var qualityParam = GetVideoQualityParam(state, codec); @@ -169,11 +170,13 @@ namespace MediaBrowser.Api.Playback.Progressive { if (string.Equals(codec, "libvpx", StringComparison.OrdinalIgnoreCase)) { - qualityParam += string.Format(" -minrate:v ({0}*.90) -maxrate:v ({0}*1.10) -bufsize:v {0} -b:v {0}", bitrate.Value.ToString(UsCulture)); + qualityParam += string.Format(" -b:v {0}", bitrate.Value.ToString(UsCulture)); } else { - qualityParam += string.Format(" -b:v {0}", bitrate.Value.ToString(UsCulture)); + qualityParam += string.Format(" -maxrate {0} -bufsize {1}", + bitrate.Value.ToString(UsCulture), + (bitrate.Value * 2).ToString(UsCulture)); } } @@ -182,7 +185,10 @@ namespace MediaBrowser.Api.Playback.Progressive args += " " + qualityParam.Trim(); } - args += " -vsync vfr"; + if (!string.IsNullOrEmpty(state.VideoSync)) + { + args += " -vsync " + state.VideoSync; + } if (!string.IsNullOrEmpty(state.VideoRequest.Profile)) { diff --git a/MediaBrowser.Api/Playback/StreamState.cs b/MediaBrowser.Api/Playback/StreamState.cs index 84cc8ecd36..55d7b22e2c 100644 --- a/MediaBrowser.Api/Playback/StreamState.cs +++ b/MediaBrowser.Api/Playback/StreamState.cs @@ -59,7 +59,8 @@ namespace MediaBrowser.Api.Playback public long? RunTimeTicks; - public int AudioSync = 1; + public string AudioSync = "1"; + public string VideoSync = "vfr"; public bool DeInterlace { get; set; } |
