diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-06-02 10:47:28 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-06-02 10:47:28 -0400 |
| commit | e031c7bcaaa7e15be839f2329e7e2721966af302 (patch) | |
| tree | 6239b9ebe217eb7759d75d73d96870c4244236dc | |
| parent | 5fc327c2328904ebeba87346ea7199af8d16c3c2 (diff) | |
don't request a higher bitrate than source content
| -rw-r--r-- | MediaBrowser.Api/Playback/Hls/VideoHlsService.cs | 9 | ||||
| -rw-r--r-- | MediaBrowser.Api/Playback/Progressive/VideoService.cs | 16 |
2 files changed, 17 insertions, 8 deletions
diff --git a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs index 827333598..19c7d6e05 100644 --- a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs @@ -158,9 +158,14 @@ namespace MediaBrowser.Api.Playback.Hls if (state.VideoRequest.VideoBitRate.HasValue) { - args += string.Format(" -b:v {0}", state.VideoRequest.VideoBitRate.Value); - } + // Make sure we don't request a bitrate higher than the source + var currentBitrate = state.VideoStream == null ? state.VideoRequest.VideoBitRate.Value : state.VideoStream.BitRate ?? state.VideoRequest.VideoBitRate.Value; + + var bitrate = Math.Min(currentBitrate, state.VideoRequest.VideoBitRate.Value); + args += string.Format(" -b:v {0}", bitrate); + } + // Add resolution params, if specified if (state.VideoRequest.Width.HasValue || state.VideoRequest.Height.HasValue || state.VideoRequest.MaxHeight.HasValue || state.VideoRequest.MaxWidth.HasValue) { diff --git a/MediaBrowser.Api/Playback/Progressive/VideoService.cs b/MediaBrowser.Api/Playback/Progressive/VideoService.cs index 3e92c96ec..80ea77d8e 100644 --- a/MediaBrowser.Api/Playback/Progressive/VideoService.cs +++ b/MediaBrowser.Api/Playback/Progressive/VideoService.cs @@ -160,8 +160,7 @@ namespace MediaBrowser.Api.Playback.Progressive args += string.Format(" -r {0}", request.Framerate.Value); } - // Add the audio bitrate - var qualityParam = GetVideoQualityParam(request, codec); + var qualityParam = GetVideoQualityParam(state, codec); if (!string.IsNullOrEmpty(qualityParam)) { @@ -256,10 +255,10 @@ namespace MediaBrowser.Api.Playback.Progressive /// <summary> /// Gets the video bitrate to specify on the command line /// </summary> - /// <param name="request">The request.</param> + /// <param name="state">The state.</param> /// <param name="videoCodec">The video codec.</param> /// <returns>System.String.</returns> - private string GetVideoQualityParam(VideoStreamRequest request, string videoCodec) + private string GetVideoQualityParam(StreamState state, string videoCodec) { var args = string.Empty; @@ -284,9 +283,14 @@ namespace MediaBrowser.Api.Playback.Progressive args = "-mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -bf 2"; } - if (request.VideoBitRate.HasValue) + if (state.VideoRequest.VideoBitRate.HasValue) { - args += " -b:v " + request.VideoBitRate; + // Make sure we don't request a bitrate higher than the source + var currentBitrate = state.VideoStream == null ? state.VideoRequest.VideoBitRate.Value : state.VideoStream.BitRate ?? state.VideoRequest.VideoBitRate.Value; + + var bitrate = Math.Min(currentBitrate, state.VideoRequest.VideoBitRate.Value); + + args += " -b:v " + bitrate; } return args.Trim(); |
