firefox hls fixes

Conflicts:
	MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/.bower.json
	MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js
This commit is contained in:
Luke Pulverenti 2016-01-14 00:18:46 -05:00
parent 924548c761
commit d96250df7f
8 changed files with 55 additions and 53 deletions

View File

@ -15,12 +15,12 @@
}, },
"devDependencies": {}, "devDependencies": {},
"ignore": [], "ignore": [],
"version": "1.0.14", "version": "1.0.18",
"_release": "1.0.14", "_release": "1.0.18",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "1.0.14", "tag": "1.0.18",
"commit": "a7a8baf260ab509c5f9b1750cbf6fe921883141c" "commit": "a251227c4635bcac732075e494b2d8a4e7956d26"
}, },
"_source": "git://github.com/MediaBrowser/emby-webcomponents.git", "_source": "git://github.com/MediaBrowser/emby-webcomponents.git",
"_target": "~1.0.0", "_target": "~1.0.0",

View File

@ -8,6 +8,7 @@
/(opr)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || /(opr)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(chrome)[ \/]([\w.]+)/.exec(ua) || /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(safari)[ \/]([\w.]+)/.exec(ua) || /(safari)[ \/]([\w.]+)/.exec(ua) ||
/(firefox)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) || /(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[]; [];

View File

@ -29,7 +29,7 @@
list.push('h264'); list.push('h264');
} }
if (document.createElement('audio').canPlayType('audio/aac').replace(/no/, '')) { if (document.createElement('audio').canPlayType('audio/aac').replace(/no/, '') || browser.firefox) {
list.push('aac'); list.push('aac');
} }
@ -103,12 +103,33 @@
profile.DirectPlayProfiles = []; profile.DirectPlayProfiles = [];
var videoAudioCodecs = [];
// Only put mp3 first if mkv support is there
// Otherwise with HLS and mp3 audio we're seeing some browsers
if (canPlayMkv) {
if (canPlayMp3) {
videoAudioCodecs.push('mp3');
}
}
if (canPlayAac) {
videoAudioCodecs.push('aac');
}
if (!canPlayMkv) {
if (canPlayMp3) {
videoAudioCodecs.push('mp3');
}
}
if (canPlayAc3) {
videoAudioCodecs.push('ac3');
}
if (supportedFormats.indexOf('h264') != -1) { if (supportedFormats.indexOf('h264') != -1) {
profile.DirectPlayProfiles.push({ profile.DirectPlayProfiles.push({
Container: 'mp4,m4v', Container: 'mp4,m4v',
Type: 'Video', Type: 'Video',
VideoCodec: 'h264', VideoCodec: 'h264',
AudioCodec: 'aac' + (canPlayMp3 ? ',mp3' : '') + (canPlayAc3 ? ',ac3' : '') AudioCodec: videoAudioCodecs.join(',')
}); });
} }
@ -117,7 +138,7 @@
Container: 'mkv,mov', Container: 'mkv,mov',
Type: 'Video', Type: 'Video',
VideoCodec: 'h264', VideoCodec: 'h264',
AudioCodec: 'aac' + (canPlayMp3 ? ',mp3' : '') + (canPlayAc3 ? ',ac3' : '') AudioCodec: videoAudioCodecs.join(',')
}); });
} }
@ -160,17 +181,6 @@
} }
}); });
var videoAudioCodecs = [];
if (canPlayMp3) {
videoAudioCodecs.push('mp3');
}
if (canPlayAac) {
videoAudioCodecs.push('aac');
}
if (canPlayAc3) {
videoAudioCodecs.push('ac3');
}
// Can't use mkv on mobile because we have to use the native player controls and they won't be able to seek it // Can't use mkv on mobile because we have to use the native player controls and they won't be able to seek it
if (canPlayMkv && !browser.mobile) { if (canPlayMkv && !browser.mobile) {
profile.TranscodingProfiles.push({ profile.TranscodingProfiles.push({
@ -235,7 +245,7 @@
}] }]
}); });
var videoAudioChannels = browser.safari ? '2' : '6'; var videoAudioChannels = '6';
profile.CodecProfiles.push({ profile.CodecProfiles.push({
Type: 'VideoAudio', Type: 'VideoAudio',
@ -268,24 +278,6 @@
] ]
}); });
profile.CodecProfiles.push({
Type: 'VideoAudio',
Codec: 'aac,mp3',
Conditions: [
{
Condition: 'LessThanEqual',
Property: 'AudioChannels',
Value: videoAudioChannels
},
{
Condition: 'Equals',
Property: 'IsSecondaryAudio',
Value: 'false',
IsRequired: 'false'
}
]
});
profile.CodecProfiles.push({ profile.CodecProfiles.push({
Type: 'VideoAudio', Type: 'VideoAudio',
Conditions: [ Conditions: [

View File

@ -29,14 +29,14 @@
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
}, },
"ignore": [], "ignore": [],
"homepage": "https://github.com/PolymerElements/iron-behaviors", "homepage": "https://github.com/polymerelements/iron-behaviors",
"_release": "1.0.12", "_release": "1.0.12",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "v1.0.12", "tag": "v1.0.12",
"commit": "657f526a2382a659cdf4e13be87ecc89261588a3" "commit": "657f526a2382a659cdf4e13be87ecc89261588a3"
}, },
"_source": "git://github.com/PolymerElements/iron-behaviors.git", "_source": "git://github.com/polymerelements/iron-behaviors.git",
"_target": "^1.0.0", "_target": "^1.0.0",
"_originalSource": "PolymerElements/iron-behaviors" "_originalSource": "polymerelements/iron-behaviors"
} }

View File

@ -52,7 +52,7 @@
"tag": "v1.1.3", "tag": "v1.1.3",
"commit": "f070288446f9e78fbe16b032ddb429a8e8015ee7" "commit": "f070288446f9e78fbe16b032ddb429a8e8015ee7"
}, },
"_source": "git://github.com/PolymerElements/paper-input.git", "_source": "git://github.com/polymerelements/paper-input.git",
"_target": "^1.0.0", "_target": "^1.0.9",
"_originalSource": "PolymerElements/paper-input" "_originalSource": "polymerelements/paper-input"
} }

View File

@ -24,14 +24,14 @@
"web-component-tester": "*" "web-component-tester": "*"
}, },
"private": true, "private": true,
"homepage": "https://github.com/Polymer/polymer", "homepage": "https://github.com/polymer/polymer",
"_release": "1.2.3", "_release": "1.2.3",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "v1.2.3", "tag": "v1.2.3",
"commit": "aa535d1675342007cbf64dc9c66497cf74cbc616" "commit": "aa535d1675342007cbf64dc9c66497cf74cbc616"
}, },
"_source": "git://github.com/Polymer/polymer.git", "_source": "git://github.com/polymer/polymer.git",
"_target": "^1.0.0", "_target": "^1.0.0",
"_originalSource": "Polymer/polymer" "_originalSource": "polymer/polymer"
} }

View File

@ -967,9 +967,12 @@
self.createStreamInfo('Video', item, mediaSource, startPosition).then(function (streamInfo) { self.createStreamInfo('Video', item, mediaSource, startPosition).then(function (streamInfo) {
var isHls = streamInfo.url.toLowerCase().indexOf('.m3u8') != -1;
// Huge hack alert. Safari doesn't seem to like if the segments aren't available right away when playback starts // Huge hack alert. Safari doesn't seem to like if the segments aren't available right away when playback starts
// This will start the transcoding process before actually feeding the video url into the player // This will start the transcoding process before actually feeding the video url into the player
if (browserInfo.safari && !mediaSource.RunTimeTicks) { // Edit: Also seeing stalls from hls.js
if ((browserInfo.safari || browserInfo.msie || browserInfo.firefox) && !mediaSource.RunTimeTicks && isHls) {
Dashboard.showLoadingMsg(); Dashboard.showLoadingMsg();
var hlsPlaylistUrl = streamInfo.url.replace('master.m3u8', 'live.m3u8'); var hlsPlaylistUrl = streamInfo.url.replace('master.m3u8', 'live.m3u8');

View File

@ -77,15 +77,20 @@
profile.DirectPlayProfiles = []; profile.DirectPlayProfiles = [];
var videoAudioCodecs = []; var videoAudioCodecs = [];
// Putting mp3 first is really just a hack to ensure we transcode to 2 channels // Only put mp3 first if mkv support is there
if (canPlayMp3) { // Otherwise with HLS and mp3 audio we're seeing firefox and chrome not play it with HLS
videoAudioCodecs.push('mp3'); if (canPlayMkv) {
if (canPlayMp3) {
videoAudioCodecs.push('mp3');
}
} }
if (canPlayAac) { if (canPlayAac) {
videoAudioCodecs.push('aac'); videoAudioCodecs.push('aac');
} }
if (canPlayAc3) { if (!canPlayMkv) {
videoAudioCodecs.push('ac3'); if (canPlayMp3) {
videoAudioCodecs.push('mp3');
}
} }
if (supportedFormats.indexOf('h264') != -1) { if (supportedFormats.indexOf('h264') != -1) {
@ -1826,7 +1831,8 @@
list.push('h264'); list.push('h264');
} }
if (document.createElement('audio').canPlayType('audio/aac').replace(/no/, '')) { // Firefox always reports that it doesn't support aac, so assume that it does
if (document.createElement('audio').canPlayType('audio/aac').replace(/no/, '') || browserInfo.firefox) {
list.push('aac'); list.push('aac');
} }
if (document.createElement('audio').canPlayType('audio/mp3').replace(/no/, '')) { if (document.createElement('audio').canPlayType('audio/mp3').replace(/no/, '')) {