File: dash-logger.js

package info (click to toggle)
flent 2.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 5,156 kB
  • sloc: python: 11,662; ansic: 626; sh: 257; makefile: 225; javascript: 72; xml: 58
file content (95 lines) | stat: -rw-r--r-- 2,699 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// Include this file along with the dash.js player to enable logging
// The log output will be parsed by Flent
var player;
var tmp_date;
var starttime;
var off = 1;
var stoptime;
var stalling=0;
var first_log = 1;
var log_base;

function time_log(Type,D1,D2,D3) {
	var tmp_d = new Date();
	if (first_log) {
		log_base = tmp_d.getTime();
		first_log = 0;
	}
	var t_stamp = tmp_d.getTime() - log_base;
	// D,time,type,d1,d2,d3
	console.log("D," + t_stamp + "," + Type + "," + D1 + "," + D2 + "," + D3);
}

function showEvent(e) {
	// we can now play, either after initial loading or stalling
	if (e.type == "canPlay") {
		if (off) {
			off = 0;
			tmp_date = new Date();
			var start_elapsed = tmp_date.getTime() - starttime;
			var q_idx = player.getQualityFor('video');
			var q_obj = player.getBitrateInfoListFor('video')[q_idx];
			var bitrate = q_obj.bitrate;

			time_log("ID",start_elapsed,null,null);
			time_log("IR",bitrate,null,null);
		} else {
			if (stalling) {
				tmp_date = new Date();
				var stop_elapsed = tmp_date.getTime() - stoptime;
				time_log("SD",stop_elapsed,null,null);
				stalling=0;
			}
		}

	}
	// we have now run out of buffer space, begin stall period
	if (e.type == "bufferStalled" && e.mediaType == "video") {
		stalling=1;
		stoptime = new Date();
	}
	// we have a quality change!
	if (e.type == "qualityChangeRequested" && e.mediaType == "video") {
		var q_idx = player.getQualityFor('video');
		var q_obj = player.getBitrateInfoListFor('video')[q_idx];
		if (e.reason != undefined)
			time_log("QC",e.oldQuality,e.newQuality,e.reason.name);
		else
			time_log("QC",e.oldQuality,e.newQuality,null);

		time_log("BC",q_obj.bitrate);

	}


	if (e.type == "playbackProgress") {
		time_log("AT", player.getAverageThroughput('video'),null,null);
		time_log("BL", player.getBufferLength('video')*1000,null,null);
	}


	if (e.type == "fragmentLoadingCompleted" && e.request.mediaType == 'video') {
		let now = new Date().getTime();
		time_log("FC",(now-e.request.delayLoadingTime),null,null);
	}
}


function init()
{
	player = dashjs.MediaPlayerFactory.create(document.querySelector(".dashjs-player"));
	player.getDebug().setLogTimestampVisible(true);
	player.getDebug().setLogToBrowserConsole(false);

	// save start time
	tmp_date = new Date();
	starttime = tmp_date.getTime();

	// events to listen for
	player.on(dashjs.MediaPlayer.events["CAN_PLAY"], showEvent);
	player.on(dashjs.MediaPlayer.events["BUFFER_EMPTY"], showEvent);
	player.on(dashjs.MediaPlayer.events["QUALITY_CHANGE_REQUESTED"], showEvent);
	player.on(dashjs.MediaPlayer.events["FRAGMENT_LOADING_COMPLETED"], showEvent);
	player.on(dashjs.MediaPlayer.events["PLAYBACK_PROGRESS"], showEvent);
}