mirror of
https://github.com/langhuihui/monibuca.git
synced 2026-04-23 01:07:03 +08:00
267 lines
6.7 KiB
JavaScript
267 lines
6.7 KiB
JavaScript
/* global $, events, eventLeftMargin, canvasBufferTimeRangeUpdate, canvasBufferWindowUpdate, canvasBitrateEventUpdate,
|
|
canvasVideoEventUpdate, canvasLoadEventUpdate */
|
|
/* eslint no-var: 0 */
|
|
var windowDuration = 20000;
|
|
var windowSliding = true;
|
|
var windowStart = 0;
|
|
var windowEnd = 10000;
|
|
var windowFocus;
|
|
var metricsDisplayed = false;
|
|
var timeRangeMouseDown = false;
|
|
|
|
$('#windowStart').val(windowStart);
|
|
$('#windowEnd').val(windowEnd);
|
|
|
|
function showMetrics() {
|
|
metricsDisplayed = true;
|
|
var width = window.innerWidth - 30;
|
|
$('#bufferWindow_c')[0].width =
|
|
$('#bitrateTimerange_c')[0].width =
|
|
$('#bufferTimerange_c')[0].width =
|
|
$('#videoEvent_c')[0].width =
|
|
$('#metricsButton')[0].width =
|
|
$('#loadEvent_c')[0].width =
|
|
width;
|
|
$('#bufferWindow_c').show();
|
|
$('#bitrateTimerange_c').show();
|
|
$('#bufferTimerange_c').show();
|
|
$('#videoEvent_c').show();
|
|
$('#metricsButton').show();
|
|
$('#loadEvent_c').show();
|
|
}
|
|
|
|
function hideMetrics() {
|
|
metricsDisplayed = false;
|
|
$('#bufferWindow_c').hide();
|
|
$('#bitrateTimerange_c').hide();
|
|
$('#bufferTimerange_c').hide();
|
|
$('#videoEvent_c').hide();
|
|
$('#metricsButton').hide();
|
|
$('#loadEvent_c').hide();
|
|
}
|
|
|
|
function timeRangeSetSliding(duration) {
|
|
windowDuration = duration;
|
|
windowSliding = true;
|
|
refreshCanvas();
|
|
}
|
|
|
|
function timeRangeCanvasonMouseDown(evt) {
|
|
var canvas = evt.currentTarget;
|
|
var bRect = canvas.getBoundingClientRect();
|
|
var mouseX = Math.round(
|
|
(evt.clientX - bRect.left) * (canvas.width / bRect.width)
|
|
);
|
|
windowStart = Math.max(
|
|
0,
|
|
Math.round(
|
|
((mouseX - eventLeftMargin) * getWindowTimeRange().now) /
|
|
(canvas.width - eventLeftMargin)
|
|
)
|
|
);
|
|
windowEnd = windowStart + 500;
|
|
timeRangeMouseDown = true;
|
|
windowSliding = false;
|
|
// console.log('windowStart/windowEnd:' + '/' + windowStart + '/' + windowEnd);
|
|
$('#windowStart').val(windowStart);
|
|
$('#windowEnd').val(windowEnd);
|
|
refreshCanvas();
|
|
}
|
|
|
|
function timeRangeCanvasonMouseMove(evt) {
|
|
if (timeRangeMouseDown) {
|
|
var canvas = evt.currentTarget;
|
|
var bRect = canvas.getBoundingClientRect();
|
|
var mouseX = Math.round(
|
|
(evt.clientX - bRect.left) * (canvas.width / bRect.width)
|
|
);
|
|
var pos = Math.max(
|
|
0,
|
|
Math.round(
|
|
((mouseX - eventLeftMargin) * getWindowTimeRange().now) /
|
|
(canvas.width - eventLeftMargin)
|
|
)
|
|
);
|
|
if (pos < windowStart) {
|
|
windowStart = pos;
|
|
} else {
|
|
windowEnd = pos;
|
|
}
|
|
if (windowStart === windowEnd) {
|
|
// to avoid division by zero ...
|
|
windowEnd += 50;
|
|
}
|
|
// console.log('windowStart/windowEnd:' + '/' + windowStart + '/' + windowEnd);
|
|
$('#windowStart').val(windowStart);
|
|
$('#windowEnd').val(windowEnd);
|
|
refreshCanvas();
|
|
}
|
|
}
|
|
|
|
function timeRangeCanvasonMouseUp(evt) {
|
|
timeRangeMouseDown = false;
|
|
}
|
|
|
|
function timeRangeCanvasonMouseOut(evt) {
|
|
timeRangeMouseDown = false;
|
|
}
|
|
|
|
function windowCanvasonMouseMove(evt) {
|
|
var canvas = evt.currentTarget;
|
|
var bRect = canvas.getBoundingClientRect();
|
|
var mouseX = Math.round(
|
|
(evt.clientX - bRect.left) * (canvas.width / bRect.width)
|
|
);
|
|
var timeRange = getWindowTimeRange();
|
|
windowFocus =
|
|
timeRange.min +
|
|
Math.max(
|
|
0,
|
|
Math.round(
|
|
((mouseX - eventLeftMargin) * (timeRange.max - timeRange.min)) /
|
|
(canvas.width - eventLeftMargin)
|
|
)
|
|
);
|
|
// console.log(windowFocus);
|
|
refreshCanvas();
|
|
}
|
|
|
|
function refreshCanvas() {
|
|
if (metricsDisplayed) {
|
|
try {
|
|
var windowTime = getWindowTimeRange();
|
|
canvasBufferTimeRangeUpdate(
|
|
$('#bufferTimerange_c')[0],
|
|
0,
|
|
windowTime.now,
|
|
windowTime.min,
|
|
windowTime.max,
|
|
events.buffer
|
|
);
|
|
if (windowTime.min !== 0 || windowTime.max !== windowTime.now) {
|
|
$('#bufferWindow_c').show();
|
|
canvasBufferWindowUpdate(
|
|
$('#bufferWindow_c')[0],
|
|
windowTime.min,
|
|
windowTime.max,
|
|
windowTime.focus,
|
|
events.buffer
|
|
);
|
|
} else {
|
|
$('#bufferWindow_c').hide();
|
|
}
|
|
canvasBitrateEventUpdate(
|
|
$('#bitrateTimerange_c')[0],
|
|
0,
|
|
windowTime.now,
|
|
windowTime.min,
|
|
windowTime.max,
|
|
events.level,
|
|
events.bitrate
|
|
);
|
|
canvasVideoEventUpdate(
|
|
$('#videoEvent_c')[0],
|
|
windowTime.min,
|
|
windowTime.max,
|
|
events.video
|
|
);
|
|
canvasLoadEventUpdate(
|
|
$('#loadEvent_c')[0],
|
|
windowTime.min,
|
|
windowTime.max,
|
|
events.load
|
|
);
|
|
} catch (err) {
|
|
console.log('refreshCanvas error:' + err.message);
|
|
}
|
|
}
|
|
}
|
|
|
|
function getWindowTimeRange() {
|
|
var tnow;
|
|
var minTime;
|
|
var maxTime;
|
|
if (events.buffer.length) {
|
|
tnow = events.buffer[events.buffer.length - 1].time;
|
|
} else {
|
|
tnow = 0;
|
|
}
|
|
if (windowSliding) {
|
|
// let's show the requested window
|
|
if (windowDuration) {
|
|
minTime = Math.max(0, tnow - windowDuration);
|
|
maxTime = Math.min(minTime + windowDuration, tnow);
|
|
} else {
|
|
minTime = 0;
|
|
maxTime = tnow;
|
|
}
|
|
} else {
|
|
minTime = windowStart;
|
|
maxTime = windowEnd;
|
|
}
|
|
if (
|
|
windowFocus === undefined ||
|
|
windowFocus < minTime ||
|
|
windowFocus > maxTime
|
|
) {
|
|
windowFocus = minTime;
|
|
}
|
|
return { min: minTime, max: maxTime, now: tnow, focus: windowFocus };
|
|
}
|
|
|
|
function timeRangeZoomIn() {
|
|
if (windowSliding) {
|
|
windowDuration /= 2;
|
|
} else {
|
|
var duration = windowEnd - windowStart;
|
|
windowStart += duration / 4;
|
|
windowEnd -= duration / 4;
|
|
if (windowStart === windowEnd) {
|
|
windowEnd += 50;
|
|
}
|
|
}
|
|
$('#windowStart').val(windowStart);
|
|
$('#windowEnd').val(windowEnd);
|
|
refreshCanvas();
|
|
}
|
|
|
|
function timeRangeZoomOut() {
|
|
if (windowSliding) {
|
|
windowDuration *= 2;
|
|
} else {
|
|
var duration = windowEnd - windowStart;
|
|
windowStart -= duration / 2;
|
|
windowEnd += duration / 2;
|
|
windowStart = Math.max(0, windowStart);
|
|
windowEnd = Math.min(
|
|
events.buffer[events.buffer.length - 1].time,
|
|
windowEnd
|
|
);
|
|
}
|
|
$('#windowStart').val(windowStart);
|
|
$('#windowEnd').val(windowEnd);
|
|
refreshCanvas();
|
|
}
|
|
|
|
function timeRangeSlideLeft() {
|
|
var duration = windowEnd - windowStart;
|
|
windowStart -= duration / 4;
|
|
windowEnd -= duration / 4;
|
|
windowStart = Math.max(0, windowStart);
|
|
windowEnd = Math.min(events.buffer[events.buffer.length - 1].time, windowEnd);
|
|
$('#windowStart').val(windowStart);
|
|
$('#windowEnd').val(windowEnd);
|
|
refreshCanvas();
|
|
}
|
|
|
|
function timeRangeSlideRight() {
|
|
var duration = windowEnd - windowStart;
|
|
windowStart += duration / 4;
|
|
windowEnd += duration / 4;
|
|
windowStart = Math.max(0, windowStart);
|
|
windowEnd = Math.min(events.buffer[events.buffer.length - 1].time, windowEnd);
|
|
$('#windowStart').val(windowStart);
|
|
$('#windowEnd').val(windowEnd);
|
|
refreshCanvas();
|
|
}
|