182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
203 |
204 |
208 |
212 |
213 |
215 |
216 |
217 |
218 |
219 |
--------------------------------------------------------------------------------
/src/demo/index.js:
--------------------------------------------------------------------------------
1 | import FlussonicMsePlayer from '../FlussonicMsePlayer.js';
2 | import { humanTime } from './utils';
3 | import { decode } from 'querystring';
4 |
5 | window.onload = onLoad;
6 |
7 | function onLoad() {
8 | let streamer_ws = 'ws://localhost:8080';
9 | let stream_name = 'clock';
10 | let videotrack, audiotrack, token, videoQuality, statsSendEnable = false, statsSendTime = 60;
11 |
12 | // parse query string
13 | let query = window.location.search;
14 | if (query) {
15 | let qs = decode(query.replace(/^\?/, ''));
16 | if (qs.host) {
17 | streamer_ws = qs.host;
18 | }
19 | if (qs.name) {
20 | stream_name = qs.name;
21 | }
22 | if (qs.videotrack) {
23 | videotrack = qs.videotrack;
24 | }
25 | if (qs.audiotrack) {
26 | audiotrack = qs.audiotrack;
27 | }
28 | if (qs.from) {
29 | from = qs.from;
30 | }
31 | if (qs.token) {
32 | token = qs.token;
33 | }
34 | if (qs.videoQuality) {
35 | videoQuality = qs.videoQuality;
36 | }
37 | if (qs.statsSendEnable) {
38 | statsSendEnable = qs.statsSendEnable === 'true' ? true : false;
39 | }
40 | if (qs.statsSendTime) {
41 | statsSendTime = Number(qs.statsSendTime);
42 | }
43 | }
44 | let url = `${streamer_ws}/${stream_name}/mse_ld${token ? `?token=${token}` : ''}`;
45 |
46 | const element = document.getElementById('player');
47 | const videoTracksSelect = document.getElementById('videoTracks');
48 | const audioTracksSelect = document.getElementById('audioTracks');
49 | const mbrControls = document.querySelector('.mbr-controls');
50 | const loading = document.getElementById('loading');
51 | const stallingLabel = document.getElementById('stallingLabel');
52 | const showStallingIndicator = (value) => {
53 | stallingLabel.innerText = '' + value;
54 | };
55 |
56 | let showFirstFrameUTC = false;
57 |
58 | // let timeLineChart = []
59 | // let graphUTCLabels = []
60 | // let graphCurrentTime = []
61 | // let graphBufferedTime = []
62 | let graphBufferedLength = [];
63 | let readySt = [];
64 | let mseVideoBufferSize = [];
65 | let mseAudioBufferSize = [];
66 |
67 | let messagesUTC = [];
68 | // const messagesTimelag = []
69 |
70 | const opts = {
71 | debug: true,
72 | connectionRetries: 3,
73 | errorsBeforeStop: 1,
74 | retryMuted: true,
75 | onCrashTryVideoOnly: true,
76 | maxBufferDelay: 2,
77 | videotrack,
78 | audiotrack,
79 | // preferHQ: true,
80 | videoQuality,
81 | progressUpdateTime: 100,
82 | wsReconnect: false,
83 | statsSendEnable,
84 | statsSendTime, // in seconds
85 | // sentryConfig: 'https://*some sentry instance*',
86 | onStartStalling: () => {
87 | showStallingIndicator('start stalling');
88 | loading.classList.add('visible');
89 | },
90 | onEndStalling: () => {
91 | showStallingIndicator('stop stalling');
92 | loading.classList.remove('visible');
93 | },
94 | onSeeked: () => {
95 | showFirstFrameUTC = true;
96 | },
97 | onProgress: (utc) => {
98 | if (showFirstFrameUTC) {
99 | console.log('%c first frame after action: ' + humanTime(utc) + ' ' + utc, 'background: red');
100 | showFirstFrameUTC = false;
101 | }
102 | // timeLineChart.push({
103 | // x: new Date(),
104 | // // y: 0,
105 | // })
106 | // if (timeLineChart.length === 100) {
107 | // timeLineChart.shift()
108 | // }
109 | // eventsChart.update()
110 | },
111 | onDisconnect: (status) => {
112 | console.log('Websocket status:', status);
113 | const restart = () => {
114 | window.player.restart();
115 | clearInterval(restartTimer);
116 | };
117 | let restartTimer = setInterval(restart, 10000);
118 | },
119 | onMediaInfo: (rawMetaData) => {
120 | console.log('rawMetaData:', rawMetaData);
121 | let videoOptions, audioOptions;
122 | const videoTracks = window.player.getVideoTracks();
123 | const audioTracks = window.player.getAudioTracks();
124 | if (videoTracks) {
125 | videoOptions = videoTracks.map(
126 | (v, i) =>
127 | `