Embed: fix HLS track selection, tweak some reports, disable reporting for now

This commit is contained in:
Cat 2016-12-21 15:33:37 +01:00 committed by Thulinma
parent a596d90573
commit ee21ac5bfb
3 changed files with 56 additions and 14 deletions

View file

@ -105,16 +105,18 @@ MistPlayer.prototype.setTracks = function(usetracks){
if (this.options.source.type == 'html5/application/vnd.apple.mpegurl') { //for HLS, use a different format for track selection if (this.options.source.type == 'html5/application/vnd.apple.mpegurl') { //for HLS, use a different format for track selection
newurl = this.options.src.split('/'); newurl = this.options.src.split('/');
var m3u8 = newurl.pop(); //take this off now, it will be added back later var m3u8 = newurl.pop(); //take this off now, it will be added back later
var hlstracks = [];
for (var i in usetracks) { for (var i in usetracks) {
//for audio or video tracks, just add the tracknumber between slashes //for audio or video tracks, just add the tracknumber between slashes
switch (i) { switch (i) {
case 'audio': case 'audio':
case 'video': case 'video':
if (usetracks[i] == 0) { continue; } if (usetracks[i] == 0) { continue; }
newurl.push(usetracks[i]); hlstracks.push(usetracks[i]);
break; break;
} }
} }
if (hlstracks.length) { newurl.push(hlstracks.join('_')); }
newurl.push(m3u8); //put back index.m3u8 newurl.push(m3u8); //put back index.m3u8
newurl = newurl.join('/'); newurl = newurl.join('/');
} }
@ -357,7 +359,11 @@ MistPlayer.prototype.buildMistControls = function(){
buttons.className = 'column'; buttons.className = 'column';
controls.appendChild(buttons); controls.appendChild(buttons);
if ((this.setTracks(false)) && ((this.tracks.audio.length) || (this.tracks.video.length) || (this.tracks.subtitle.length)) && (this.options.source.type != 'html5/video/ogg')) { if (
(this.setTracks(false))
&& (this.tracks.video.length + this.tracks.audio.length + this.tracks.subtitle.length > 1)
&& (this.options.source.type != 'html5/video/ogg')
) {
/* /*
- the player supports setting tracks; - the player supports setting tracks;
@ -426,8 +432,23 @@ MistPlayer.prototype.buildMistControls = function(){
for (var i in me.trackselects) { for (var i in me.trackselects) {
usetracks[me.trackselects[i].getAttribute('data-type')] = me.trackselects[i].value usetracks[me.trackselects[i].getAttribute('data-type')] = me.trackselects[i].value
} }
if (this.value == 0) {
//if we are disabling a video or audio track, dont allow us to disable another video or audio track because there will be no data
var optiontags = this.parentNode.parentNode.querySelectorAll('select:not([data-type="subtitle"]) option[value="0"]');
for (var i = 0; i < optiontags.length; i++) {
optiontags[i].setAttribute('disabled','');
}
}
else {
//put back the disabled track options
var optiontags = this.parentNode.parentNode.querySelectorAll('option[value="0"][disabled]');
for (var i = 0; i < optiontags.length; i++) {
optiontags[i].removeAttribute('disabled');
}
}
} }
me.setTracks(usetracks); me.setTracks(usetracks);
} }
if (i == 'subtitle') { if (i == 'subtitle') {
s.value = 0; s.value = 0;
@ -632,6 +653,8 @@ MistPlayer.prototype.nextCombo = function(){
///send information back to mistserver ///send information back to mistserver
///\param msg object containing the information to report ///\param msg object containing the information to report
MistPlayer.prototype.report = function(msg) { MistPlayer.prototype.report = function(msg) {
return false; ///\todo Remove this when the backend reporting function has been coded
///send a http post request ///send a http post request
///\param url (string) url to send to ///\param url (string) url to send to
@ -650,7 +673,6 @@ MistPlayer.prototype.report = function(msg) {
//add some extra information //add some extra information
msg.userinfo = { msg.userinfo = {
userAgent: navigator.userAgent,
page: location.href, page: location.href,
stream: this.streamname, stream: this.streamname,
session: mistplayer_session_id session: mistplayer_session_id
@ -665,6 +687,7 @@ MistPlayer.prototype.report = function(msg) {
}; };
} }
msg.userinfo.resolution = this.options.width+'x'+this.options.height; msg.userinfo.resolution = this.options.width+'x'+this.options.height;
msg.userinfo.time = Math.round(((new Date) - this.options.initTime)/1e3); //seconds since the info js was loaded
} }
try { try {
@ -726,7 +749,8 @@ function mistPlay(streamName,options) {
autoplay: true, autoplay: true,
controls: true, controls: true,
loop: false, loop: false,
poster: null poster: null,
callback: false
}; };
for (var i in global) { for (var i in global) {
options[i] = global[i]; options[i] = global[i];
@ -1095,6 +1119,13 @@ function mistPlay(streamName,options) {
//monitor for errors //monitor for errors
element.checkStalledTimeout = false; element.checkStalledTimeout = false;
element.checkProgressTimeout = false; element.checkProgressTimeout = false;
element.sendPingTimeout = setInterval(function(){
if (player.paused) { return; }
player.report({
type: 'playback',
info: 'ping'
});
},150e3);
element.addEventListener('error',function(e){ element.addEventListener('error',function(e){
player.askNextCombo('The player has thrown an error'); player.askNextCombo('The player has thrown an error');
var r = { var r = {
@ -1154,7 +1185,7 @@ function mistPlay(streamName,options) {
var msg = 'There should be playback but nothing was played'; var msg = 'There should be playback but nothing was played';
var r = { var r = {
type: 'playback', type: 'playback',
warning: msg warn: msg
}; };
player.addlog(msg); player.addlog(msg);
if ('readyState' in player.element) { if ('readyState' in player.element) {
@ -1176,8 +1207,8 @@ function mistPlay(streamName,options) {
var msg = 'It seems playback is lagging (progressed '+Math.round(progress*100)/100+'/10s)' var msg = 'It seems playback is lagging (progressed '+Math.round(progress*100)/100+'/10s)'
player.addlog(msg); player.addlog(msg);
player.report({ player.report({
'type': 'playback', type: 'playback',
'warning': msg warn: msg
}); });
return; return;
} }
@ -1204,7 +1235,7 @@ function mistPlay(streamName,options) {
} }
protoplay.sendEvent('initialized','',options.target); protoplay.sendEvent('initialized','',options.target);
if (options.callback) { options.callback(player); }
} }
else { else {
if (streaminfo.error) { if (streaminfo.error) {

View file

@ -86,22 +86,24 @@
//tryplayers.push('flash_strobe'); //tryplayers.push('flash_strobe');
//tryplayers.push('silverlight'); //tryplayers.push('silverlight');
streams = []; streams = [];
//streams.push('live'); streams.push('live');
//streams.push('golive+emitan'); //streams.push('golive+emitan');
//streams.push('subtel'); //streams.push('subtel');
//streams.push('ogg'); //streams.push('ogg');
//streams.push('vids+mist.mp4'); //streams.push('vids+mist.mp4');
//streams.push('vids+hahalol.mp3'); //streams.push('vids+hahalol.mp3');
//streams.push('lama'); //streams.push('lama');
streams.push('bunny'); //streams.push('bunny');
for (var j in streams) { for (var j in streams) {
for (var i in tryplayers) { for (var i in tryplayers) {
var d = document.createElement('div');
var c = document.createElement('div'); var c = document.createElement('div');
c.className = 'mistvideo'; c.className = 'mistvideo';
c.title = tryplayers[i]; c.title = tryplayers[i];
contele.appendChild(c); d.appendChild(c);
mistPlay(streams[j],{ contele.appendChild(d);
var p = mistPlay(streams[j],{
target: c, target: c,
maxwidth: 800, maxwidth: 800,
forcePlayer: tryplayers[i], forcePlayer: tryplayers[i],
@ -109,11 +111,20 @@
//forceType: 'html5/audio/mp3', //forceType: 'html5/audio/mp3',
//forceType: 'html5/application/vnd.apple.mpegurl', //forceType: 'html5/application/vnd.apple.mpegurl',
//forceType: 'dash/video/mp4', //forceType: 'dash/video/mp4',
forceType: 'html5/video/mp2t',
//forceSource: 3, //forceSource: 3,
loop: true, loop: true,
//controls: 'stock' //controls: 'stock'
callback: function(player) {
var button = document.createElement('button');
button.innerHTML = 'askNextCombo();';
button.onclick = function(){
player.askNextCombo('Button was clicked');
d.removeChild(this);
};
d.append(button);
}
}); });
} }
} }

View file

@ -105,7 +105,7 @@ p.prototype.build = function (options) {
me.addlog('Decoding error: reloading..'); me.addlog('Decoding error: reloading..');
me.report({ me.report({
type: 'playback', type: 'playback',
warning: 'A decoding error was encountered, but handled' warn: 'A decoding error was encountered, but handled'
}); });
} }
},true); },true);