var MediaPlayer = { testableAudioElement: document.createElement('audio'), testableVideoElement: document.createElement('video'), canPlay: function (item) { if (item.MediaType === "Video") { var media = MediaPlayer.testableVideoElement; if (media.canPlayType) { return media.canPlayType('video/mp4').replace(/no/, '') || media.canPlayType('video/mp2t').replace(/no/, '') || media.canPlayType('video/webm').replace(/no/, '') || media.canPlayType('application/x-mpegURL').replace(/no/, '') || media.canPlayType('video/ogv').replace(/no/, ''); } return false; } if (item.MediaType === "Audio") { var media = MediaPlayer.testableAudioElement; if (media.canPlayType) { return media.canPlayType('audio/mpeg').replace(/no/, '') || media.canPlayType('audio/webm').replace(/no/, '') || media.canPlayType('audio/aac').replace(/no/, '') || media.canPlayType('audio/ogg').replace(/no/, ''); } return false; } return false; }, play: function (items, startPosition) { if (MediaPlayer.isPlaying()) { MediaPlayer.stop(); } var item = items[0]; var mediaElement; if (item.MediaType === "Video") { mediaElement = MediaPlayer.playVideo(items, startPosition); } else if (item.MediaType === "Audio") { mediaElement = MediaPlayer.playAudio(items); } if (!mediaElement) { return; } MediaPlayer.mediaElement = mediaElement; var nowPlayingBar = $('#nowPlayingBar').show(); if (items.length > 1) { $('#previousTrackButton', nowPlayingBar)[0].disabled = false; $('#nextTrackButton', nowPlayingBar)[0].disabled = false; } else { $('#previousTrackButton', nowPlayingBar)[0].disabled = true; $('#nextTrackButton', nowPlayingBar)[0].disabled = true; } //display image and title var imageTags = item.ImageTags || {}; var html = ''; var url = ""; if (item.BackdropImageTags && item.BackdropImageTags.length) { url = ApiClient.getImageUrl(item.Id, { type: "Backdrop", height: 36, tag: item.BackdropImageTags[0] }); } else if (imageTags.Thumb) { url = ApiClient.getImageUrl(item.Id, { type: "Thumb", height: 36, tag: item.ImageTags.Thumb }); } else if (imageTags.Primary) { url = ApiClient.getImageUrl(item.Id, { type: "Primary", height: 36, tag: item.ImageTags.Primary }); } else { url = "css/images/items/detail/video.png"; } var name = item.Name; var series_name = ''; if (item.IndexNumber != null) { name = item.IndexNumber + " - " + name; } if (item.ParentIndexNumber != null) { name = item.ParentIndexNumber + "." + name; } if (item.SeriesName || item.Album || item.ProductionYear) { series_name = item.SeriesName || item.Album || item.ProductionYear; } html += "
"; if (item.Type == "Movie") html += '
' + name + '
' + series_name + '
'; else html += '
' + series_name + '
' + name + '
'; $('#mediaInfo', nowPlayingBar).html(html); }, playAudio: function (items, params) { var item = items[0]; var baseParams = { audioChannels: 2, audioBitrate: 128000 }; $.extend(baseParams, params); var mp3Url = ApiClient.getUrl('Audio/' + item.Id + '/stream.mp3', $.extend({}, baseParams, { audioCodec: 'mp3' })); var aacUrl = ApiClient.getUrl('Audio/' + item.Id + '/stream.aac', $.extend({}, baseParams, { audioCodec: 'aac' })); var webmUrl = ApiClient.getUrl('Audio/' + item.Id + '/stream.webm', $.extend({}, baseParams, { audioCodec: 'Vorbis' })); /* ffmpeg always says the ogg stream is corrupt after conversion var oggUrl = ApiClient.getUrl('Audio/' + item.Id + '/stream.oga', $.extend({}, baseParams, { audioCodec: 'Vorbis' })); */ var html = ''; html += '