mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice-html5
synced 2025-12-29 00:15:10 +00:00
Add tools for debugging media source playback events.
This commit is contained in:
parent
a05764c0d6
commit
5f67601534
63
playback.js
63
playback.js
@ -72,6 +72,7 @@ SpicePlaybackConn.prototype.process_channel_message = function(msg)
|
||||
this.media_source.spiceconn = this;
|
||||
|
||||
this.audio = document.createElement("audio");
|
||||
this.audio.spiceconn = this;
|
||||
this.audio.setAttribute('autoplay', true);
|
||||
this.audio.src = window.URL.createObjectURL(this.media_source);
|
||||
document.getElementById(this.parent.screen_id).appendChild(this.audio);
|
||||
@ -240,6 +241,12 @@ function handle_source_open(e)
|
||||
p.log_err('Codec ' + SPICE_PLAYBACK_CODEC + ' not available.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (PLAYBACK_DEBUG > 0)
|
||||
playback_handle_event_debug.call(this, e);
|
||||
|
||||
listen_for_audio_events(p);
|
||||
|
||||
p.source_buffer.spiceconn = p;
|
||||
p.source_buffer.mode = "segments";
|
||||
|
||||
@ -263,9 +270,13 @@ function handle_source_closed(e)
|
||||
p.log_err('Audio source unexpectedly closed.');
|
||||
}
|
||||
|
||||
function handle_append_buffer_done(b)
|
||||
function handle_append_buffer_done(e)
|
||||
{
|
||||
var p = this.spiceconn;
|
||||
|
||||
if (PLAYBACK_DEBUG > 1)
|
||||
playback_handle_event_debug.call(this, e);
|
||||
|
||||
if (p.queue.length > 0)
|
||||
{
|
||||
var mb = p.queue.shift();
|
||||
@ -294,3 +305,53 @@ function playback_append_buffer(p, b)
|
||||
p.log_err("Error invoking appendBuffer: " + e.message);
|
||||
}
|
||||
}
|
||||
|
||||
function playback_handle_event_debug(e)
|
||||
{
|
||||
var p = this.spiceconn;
|
||||
if (p.audio)
|
||||
{
|
||||
if (PLAYBACK_DEBUG > 0 || p.audio.buffered.len > 1)
|
||||
console.log(p.audio.currentTime + ": event " + e.type +
|
||||
dump_media_element(p.audio));
|
||||
}
|
||||
|
||||
if (PLAYBACK_DEBUG > 1 && p.media_source)
|
||||
console.log(" media_source " + dump_media_source(p.media_source));
|
||||
|
||||
if (PLAYBACK_DEBUG > 1 && p.source_buffer)
|
||||
console.log(" source_buffer " + dump_source_buffer(p.source_buffer));
|
||||
|
||||
if (PLAYBACK_DEBUG > 0 || p.queue.length > 1)
|
||||
console.log(' queue len ' + p.queue.length + '; append_okay: ' + p.append_okay);
|
||||
}
|
||||
|
||||
function playback_debug_listen_for_one_event(name)
|
||||
{
|
||||
this.addEventListener(name, playback_handle_event_debug);
|
||||
}
|
||||
|
||||
function listen_for_audio_events(spiceconn)
|
||||
{
|
||||
var audio_0_events = [
|
||||
"abort", "error"
|
||||
];
|
||||
|
||||
var audio_1_events = [
|
||||
"loadstart", "suspend", "emptied", "stalled", "loadedmetadata", "loadeddata", "canplay",
|
||||
"canplaythrough", "playing", "waiting", "seeking", "seeked", "ended", "durationchange",
|
||||
"timeupdate", "play", "pause", "ratechange"
|
||||
];
|
||||
|
||||
var audio_2_events = [
|
||||
"progress",
|
||||
"resize",
|
||||
"volumechange"
|
||||
];
|
||||
|
||||
audio_0_events.forEach(playback_debug_listen_for_one_event, spiceconn.audio);
|
||||
if (PLAYBACK_DEBUG > 0)
|
||||
audio_1_events.forEach(playback_debug_listen_for_one_event, spiceconn.audio);
|
||||
if (PLAYBACK_DEBUG > 1)
|
||||
audio_2_events.forEach(playback_debug_listen_for_one_event, spiceconn.audio);
|
||||
}
|
||||
|
||||
53
utils.js
53
utils.js
@ -264,3 +264,56 @@ function keycode_to_end_scan(code)
|
||||
return 0x80e0 | ((scancode - 0x100) << 8);
|
||||
}
|
||||
}
|
||||
|
||||
function dump_media_element(m)
|
||||
{
|
||||
var ret =
|
||||
"[networkState " + m.networkState +
|
||||
"|readyState " + m.readyState +
|
||||
"|error " + m.error +
|
||||
"|seeking " + m.seeking +
|
||||
"|duration " + m.duration +
|
||||
"|paused " + m.paused +
|
||||
"|ended " + m.error +
|
||||
"|buffered " + dump_timerange(m.buffered) +
|
||||
"]";
|
||||
return ret;
|
||||
}
|
||||
|
||||
function dump_media_source(ms)
|
||||
{
|
||||
var ret =
|
||||
"[duration " + ms.duration +
|
||||
"|readyState " + ms.readyState + "]";
|
||||
return ret;
|
||||
}
|
||||
|
||||
function dump_source_buffer(sb)
|
||||
{
|
||||
var ret =
|
||||
"[appendWindowStart " + sb.appendWindowStart +
|
||||
"|appendWindowEnd " + sb.appendWindowEnd +
|
||||
"|buffered " + dump_timerange(sb.buffered) +
|
||||
"|timeStampOffset " + sb.timeStampOffset +
|
||||
"|updating " + sb.updating +
|
||||
"]";
|
||||
return ret;
|
||||
}
|
||||
|
||||
function dump_timerange(tr)
|
||||
{
|
||||
var ret;
|
||||
|
||||
if (tr)
|
||||
{
|
||||
var i = tr.length;
|
||||
ret = "{len " + i;
|
||||
if (i > 0)
|
||||
ret += "; start " + tr.start(0) + "; end " + tr.end(i - 1);
|
||||
ret += "}";
|
||||
}
|
||||
else
|
||||
ret = "N/A";
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user