diff --git a/dashboard-ui/scripts/chromecast.js b/dashboard-ui/scripts/chromecast.js index d2b7f5d159..bca82b8327 100644 --- a/dashboard-ui/scripts/chromecast.js +++ b/dashboard-ui/scripts/chromecast.js @@ -229,16 +229,17 @@ clearInterval(this.timer); }; - function getMaxVideoAudioChannels() { - return 6; - } + function getCodecLimits() { + return { - function getMaxAudioChannels() { - return 2; - } + maxVideoAudioChannels: 6, + maxAudioChannels: 2, + maxVideoLevel: 41, + maxWidth: 1920, + maxHeight: 1080, + maxSampleRate: 44100 - function getMaxVideoLevel() { - return 41; + }; } function canDirectStream(mediaType, mediaSource, maxBitrate) { @@ -248,6 +249,8 @@ return false; } + var codecLimits = getCodecLimits(); + if (mediaType == "Audio") { return ['mp3', 'aac'].indexOf(mediaSource.Container || '') != -1; @@ -268,15 +271,15 @@ return false; } - if (!videoStream.Level || videoStream.Level > getMaxVideoLevel()) { + if (!videoStream.Level || videoStream.Level > codecLimits.maxVideoLevel) { return false; } - if (!videoStream.Width || videoStream.Width > 1920) { + if (!videoStream.Width || videoStream.Width > codecLimits.maxWidth) { return false; } - if (!videoStream.Height || videoStream.Height > 1080) { + if (!videoStream.Height || videoStream.Height > codecLimits.maxHeight) { return false; } @@ -297,12 +300,18 @@ return false; } - var maxChannels = isVideo ? getMaxVideoAudioChannels() : getMaxAudioChannels(); + var codecLimits = getCodecLimits(); + + var maxChannels = isVideo ? codecLimits.maxVideoAudioChannels : codecLimits.maxAudioChannels; if (!audioStream.Channels || audioStream.Channels > maxChannels) { return false; } + if (!audioStream.SampleRate || audioStream.SampleRate > codecLimits.maxSampleRate) { + return false; + } + return true; } @@ -540,11 +549,13 @@ var url; + var codecLimits = getCodecLimits(); + if (item.MediaType == 'Audio') { url = ApiClient.serverAddress() + '/mediabrowser/audio/' + item.Id + '/stream.' + mediaSourceInfo.streamContainer + '?'; url += '&static=' + mediaSourceInfo.isStatic.toString(); - url += '&maxaudiochannels=' + getMaxAudioChannels(); + url += '&maxaudiochannels=' + codecLimits.maxAudioChannels; if (startTimeTicks) { url += '&startTimeTicks=' + startTimeTicks.toString(); @@ -554,7 +565,7 @@ url += '&audiobitrate=' + Math.min(maxBitrate, 320000).toString(); } - url += '&audiosamplerate=44100'; + url += '&audiosamplerate=' + codecLimits.maxSampleRate; url += '&mediasourceid=' + mediaSourceInfo.mediaSource.Id; return url; @@ -564,7 +575,7 @@ url = ApiClient.serverAddress() + '/mediabrowser/videos/' + item.Id + '/stream.' + mediaSourceInfo.streamContainer + '?'; url += 'static=' + mediaSourceInfo.isStatic.toString(); - url += '&maxaudiochannels=' + getMaxVideoAudioChannels(); + url += '&maxaudiochannels=' + codecLimits.maxVideoAudioChannels; if (startTimeTicks) { url += '&startTimeTicks=' + startTimeTicks.toString(); @@ -578,15 +589,15 @@ } url += '&profile=high'; - url += '&level=' + getMaxVideoLevel(); + url += '&level=' + codecLimits.maxVideoLevel; - url += '&maxwidth=1920'; - url += '&maxheight=1080'; + url += '&maxwidth=' + codecLimits.maxWidth; + url += '&maxheight=' + codecLimits.maxHeight; url += '&videoCodec=h264'; url += '&audioCodec=aac'; - url += '&audiosamplerate=44100'; + url += '&audiosamplerate=' + codecLimits.maxSampleRate; url += '&mediasourceid=' + mediaSourceInfo.mediaSource.Id; return url;