1
Fork 0
Commit Graph

479 Commits

Author SHA1 Message Date
Juliusz Chroboczek a2e322edcb Rework custom video controls.
Move custom video controls into its own function.  Remove some
DOM traversals, avoid querySelector.  Remove dead code.
2020-11-28 03:46:31 +01:00
Alain Takoudjou 907a712d6a Remove support for disabling camera in media player. 2020-11-27 21:23:58 +01:00
Alain Takoudjou 484781e3c1 Close side menu after a local media file is loaded 2020-11-26 22:58:37 +01:00
Toke Høiland-Jørgensen 08b1a50d21 Fix CSS for new version of Font Awesome. 2020-11-25 17:02:27 +01:00
Juliusz Chroboczek 6e548deded Handle removetrack event on streamed videos.
Probably useless, but I'm supersticious.
2020-11-24 23:22:24 +01:00
Juliusz Chroboczek 6a9ab96902 Use default controls for streamed video. 2020-11-24 23:05:43 +01:00
Juliusz Chroboczek 58ba37d8da Implement stopping of videos. 2020-11-24 22:41:43 +01:00
Juliusz Chroboczek 2c9ee2f431 Set outgoing rate for all stream types, not just local.
We were inconsistent with stream creation.
2020-11-24 21:21:26 +01:00
Juliusz Chroboczek 3167c217db Implement playing of local files. 2020-11-24 19:36:11 +01:00
Juliusz Chroboczek 2c17157ea2 Implement automatic enabling of camera. 2020-11-24 17:16:52 +01:00
Juliusz Chroboczek 4c9762931d Prevent multiple connections. 2020-11-24 16:29:19 +01:00
Juliusz Chroboczek 81db6e73eb Add some typing annotations. 2020-11-24 15:55:12 +01:00
Juliusz Chroboczek 689bc63330 Make /me undocumented. 2020-11-24 15:46:10 +01:00
Juliusz Chroboczek db4ea57883 Rework the command parser, implement /help. 2020-11-24 14:55:52 +01:00
Juliusz Chroboczek dcfd071ea0 Remove studio mode.
It's not useful.
2020-11-20 21:22:52 +01:00
Alain Takoudjou b1dac6f477 sfu webfont: switch to fontawesome 5 2020-11-20 20:54:33 +01:00
Alain Takoudjou ff110ec9cd remove button control to mute/unmute my video 2020-11-20 20:50:47 +01:00
Juliusz Chroboczek 0bc8129159 Disable the present button while setting up a presentation.
Users sometimes click on the button multiple times.
2020-11-09 01:16:13 +01:00
Juliusz Chroboczek 85df898101 Remove PIP button when not supported. 2020-11-09 00:35:52 +01:00
Juliusz Chroboczek 3d3182acf8 Fix typo in side menu. 2020-11-09 00:13:13 +01:00
Juliusz Chroboczek 47c90037f3 Allow brackets and ampersands in URLs. 2020-11-09 00:11:55 +01:00
Juliusz Chroboczek 3c607a6e72 Improve typing, reindent. 2020-11-08 17:07:17 +01:00
Juliusz Chroboczek 3c57cc772e Merge remote-tracking branch 'alain/sfu-update' into master 2020-11-08 14:06:05 +01:00
Alain Takoudjou c4f97b3cf0 make button on video more visible when background is white 2020-11-06 11:04:10 +01:00
Alain Takoudjou 7cb73a501f do not listen on camera control button when it's not present 2020-11-06 10:03:33 +01:00
Juliusz Chroboczek 49ade2f66f Allow 30s slack for message times in the future. 2020-11-05 21:09:49 +01:00
Juliusz Chroboczek 96c3e4f830 Add warning about screen sharing under Safari. 2020-10-31 23:26:56 +01:00
Alain Takoudjou 581d2439ab video controls on mobile 2020-10-31 01:23:20 +01:00
Alain Takoudjou e900ef6d89 fix resize video on screen sharing too 2020-10-31 01:15:03 +01:00
Alain Takoudjou 4e2993dd1d put message send date in the msg header block 2020-10-31 00:37:03 +01:00
Juliusz Chroboczek 4911b7ad38 Buffer local ICE candidates.
Apparently, it is possible for an ICE candidate to be generated
before onnegotiationneeded triggers.  Avoid losing a candidate
in that case.
2020-10-30 00:35:36 +01:00
Alain Takoudjou 358cdd918d make video control buttons more visible 2020-10-29 09:55:32 +01:00
Juliusz Chroboczek 56641b8d84 Allow 1s slack for long time display. 2020-10-28 18:00:48 +01:00
Alain Takoudjou 5a526c24f6 sfu.js: fix display message time in chat box 2020-10-28 16:58:14 +01:00
Alain Takoudjou 2388dfd351 allow to disable camera on videoElement 2020-10-28 16:58:14 +01:00
Alain Takoudjou 2e0b195964 fix resizing when we have only 2 videos 2020-10-28 16:58:14 +01:00
Alain Takoudjou 31deef47f5 fix video resizing, add a button to close chat 2020-10-28 16:58:14 +01:00
Alain Takoudjou fc152d4377 allow to hide chat, improve settings bar and others 2020-10-28 16:58:14 +01:00
Alain Takoudjou fa694e67bf improve html interface, add custom controls for video 2020-10-28 16:58:14 +01:00
Juliusz Chroboczek 69540e23af Allow anonymous users to chat. 2020-10-08 15:19:29 +02:00
Juliusz Chroboczek 2b4372ad87 Sort usernames case-insensitively in user interface. 2020-10-08 15:11:52 +02:00
Juliusz Chroboczek 179b57a986 Display destination in private messages. 2020-10-05 20:48:44 +02:00
Juliusz Chroboczek 66dd71678e Implement private messages. 2020-10-01 16:59:09 +02:00
Juliusz Chroboczek 3bd9a1db4e Timestamp chat messages. 2020-09-30 00:54:12 +02:00
Juliusz Chroboczek 480922268e Some more tweaks to JS typing. 2020-09-29 18:16:54 +02:00
Juliusz Chroboczek 8399ee2c4a Implement group description. 2020-09-24 22:03:41 +02:00
Juliusz Chroboczek 6a4784da44 Hide share button if getDisplayMedia doesn't exist. 2020-09-23 21:53:59 +02:00
Juliusz Chroboczek 2e63c0f305 Error handling when attempting chat on closed connection. 2020-09-23 21:53:59 +02:00
Juliusz Chroboczek 667412e6ae Implement /set command. 2020-09-23 21:53:59 +02:00
Juliusz Chroboczek 0aa77441bd Improve typing of javascript code.
We now enable typing of sfu.js.
2020-09-20 17:25:41 +02:00
Juliusz Chroboczek eab848f2cf Add ability to receive nothing. 2020-09-18 20:09:52 +02:00
Juliusz Chroboczek 8a4b2f5d3f Implement studio and blackboard mode. 2020-09-18 19:58:05 +02:00
Juliusz Chroboczek b8011371cf Rework settings handling in sfu.js.
There is now a data structure that contains the ultimate truth
about the user's preferences.  We no longer grovel through the
UI components.
2020-09-18 19:58:05 +02:00
Juliusz Chroboczek f8ae908d7a Implement message for locked groups. 2020-09-18 11:40:00 +02:00
Juliusz Chroboczek e824b93584 Improve error handling in ServerConnection.connect. 2020-09-18 11:28:13 +02:00
Juliusz Chroboczek b2f01a528e Fix URL in ServerConnection.connect. 2020-09-18 11:24:33 +02:00
Juliusz Chroboczek 714a0939d6 Fix formatting of /me. 2020-09-16 01:47:36 +02:00
Juliusz Chroboczek 77179c3db9 Allow usernames with spaces.
This requires a proper parser for commands.
2020-09-16 01:42:39 +02:00
Juliusz Chroboczek 1672f13230 Don't login automatically.
Users find it confusing, especially when the browser disables autoplay.
2020-09-16 01:02:46 +02:00
Antonin Décimo 5ad4df5a45 Add missing semicolons. 2020-09-14 17:23:06 +02:00
Juliusz Chroboczek aa3e094f65 Fix checkbox for activity detection, increase interval to 200ms. 2020-09-14 17:15:44 +02:00
Juliusz Chroboczek abb8b70a0d Load toastify before its users. 2020-09-12 18:31:04 +02:00
Juliusz Chroboczek 66a721a55c Improve typing of sfu.js. 2020-09-12 16:44:42 +02:00
Juliusz Chroboczek 6a554831a1 Sort users lexicographically. 2020-09-12 16:44:42 +02:00
Juliusz Chroboczek 7707775cca Implement user-readable message for kick. 2020-09-12 12:26:07 +02:00
Juliusz Chroboczek 5c97e739a6 Implement activity detection. 2020-09-11 23:43:30 +02:00
Juliusz Chroboczek d35f599922 Minor fixes to sfu.js. 2020-09-11 22:46:23 +02:00
Juliusz Chroboczek 0b5416f617 Revert blurring failed media.
Failed media must still be usable.
2020-09-11 21:53:53 +02:00
Juliusz Chroboczek 8d9c3d7d1c Add userdata field to ServerConnection and Stream. 2020-09-11 21:39:18 +02:00
Alain Takoudjou bcc0e8da5e sfu: add 404 custom page 2020-09-11 16:51:56 +02:00
Alain Takoudjou df0bb231af more fixes on web interface 2020-09-11 16:51:56 +02:00
Juliusz Chroboczek 760cafe02a Display help message after receiving permissions from server.
We used to display the help message too early, which caused us to
display it even if the group doesn't exist or the user doesn't have
the present permission.
2020-09-11 09:52:40 +02:00
Juliusz Chroboczek 66d352b35a Rename Parameters to Settings, fix typo. 2020-09-11 09:52:40 +02:00
Alain Takoudjou 640fbb8107 more improvement on design 2020-09-11 09:52:40 +02:00
Juliusz Chroboczek 0ab8425025 Remove icon on mainpage. 2020-09-11 09:52:40 +02:00
Alain Takoudjou 71f5db03ad fix display login form and video on mibile 2020-09-11 09:52:40 +02:00
Alain Takoudjou e5ccc82204 minor fixes 2020-09-11 09:52:39 +02:00
Alain Takoudjou efb8a71981 improve sfu design and remove some useless code 2020-09-11 09:52:39 +02:00
Alain Takoudjou 32459b4b5b fix connexion problem with new users 2020-09-11 09:52:39 +02:00
Alain Takoudjou 788e43ba7a add some interface improvement 2020-09-11 09:52:39 +02:00
Alain Takoudjou 382446ebcb sfu: update layout and make video working with mobile too 2020-09-11 09:52:39 +02:00
Alain Takoudjou 76e812d00f sfu: first working design 2020-09-11 09:52:39 +02:00
Juliusz Chroboczek 517d7edbc8 Make login work when sessionStorage is not available.
Thanks to Ralf Treinen for pointing out the issue.
2020-09-10 15:30:49 +02:00
Juliusz Chroboczek c9865830cc Fix screen sharing on Safari.
Apparently Safari requires {video: true}.
2020-09-10 10:03:14 +02:00
Juliusz Chroboczek 346f93dd16 Maintain information about whether renegotiation is permitted.
Renegotiation is not correct when the stream is fresh, for example
after the user has switched the camera.
2020-09-10 01:33:23 +02:00
Juliusz Chroboczek 39789dc89a Make addSharedMedia go through newUpStream.
Otherwise the callbacks don't get set.
2020-09-08 03:10:45 +02:00
Juliusz Chroboczek 93f116021d Clear user list upon disconnection. 2020-09-05 12:59:28 +02:00
Juliusz Chroboczek eac7a2afc4 Display a notification when local stream fails.
We used to silently fail when there was a problem with camera
permissions.  Display a notification.
2020-09-05 12:52:02 +02:00
Juliusz Chroboczek 9a0c830a59 Fix setting of send bitrate for Firefox.
Thanks to Ines Klimann.
2020-09-03 20:19:26 +02:00
Juliusz Chroboczek c0122c069e Implement restartIce for older browsers. 2020-09-03 20:19:26 +02:00
Juliusz Chroboczek e0a81e7f03 Add ability to limit outgoing throughput.
This will hopefully become unnecessary once we have better congestion
control.
2020-08-26 19:16:01 +02:00
Juliusz Chroboczek a4b528e1e7 Implement onnegotiationcompleted callback. 2020-08-26 18:30:29 +02:00
Juliusz Chroboczek 6dc1d72438 Type global variables in sfu.js. 2020-08-24 22:37:48 +02:00
Juliusz Chroboczek fba0dded84 Type global variables in sfu.js. 2020-08-24 22:31:22 +02:00
Juliusz Chroboczek e4aad04f28 Fix typo in onended callback of screen share. 2020-08-24 22:24:33 +02:00
Juliusz Chroboczek a2ab8c3686 Remove up media when closing the socket. 2020-08-23 19:07:52 +02:00
Juliusz Chroboczek 8fbd16cc8c Minor tweaks to error handling. 2020-08-19 14:39:40 +02:00
Juliusz Chroboczek 33bfb433f1 Mark async functions explicitly in protocol.js.
JSDoc doesn't recognise them otherwise.
2020-08-14 14:44:23 +02:00
Juliusz Chroboczek 7848822469 Minor type tightenings in protocol.js. 2020-08-14 14:36:29 +02:00
Juliusz Chroboczek 668fae29ef Add some more typing assertions to sfu.js. 2020-08-13 20:55:13 +02:00
Juliusz Chroboczek 0067edc6eb Fix some more Javascript typos.
Thanks to Rémi Nollet and Léo Stefanesco.
2020-08-13 20:54:37 +02:00
Juliusz Chroboczek fc3ee84243 Fix typo in newUpStream. 2020-08-13 20:16:52 +02:00
Juliusz Chroboczek 0102bdc128 Fix typo in gotAbort. 2020-08-13 20:11:21 +02:00
Juliusz Chroboczek 04b0951530 Fix fetching of ICE servers. 2020-08-13 15:45:19 +02:00
Juliusz Chroboczek 3e0bb08955 Split out the javascript protocol interface. 2020-08-13 12:21:29 +02:00
Juliusz Chroboczek ec742eacdb Fix typo in renegotiation. 2020-08-13 12:16:05 +02:00
Juliusz Chroboczek 52c4f1a399 Restructure offers. 2020-08-12 13:56:35 +02:00
Juliusz Chroboczek bc7bd36ba2 Restructure user notifications. 2020-08-12 13:51:31 +02:00
Juliusz Chroboczek b6adc0b9a8 Rename Connection to Stream in the JS code. 2020-08-12 12:50:28 +02:00
Juliusz Chroboczek 675035ab29 Restructure group and client management messages. 2020-08-12 12:40:40 +02:00
Juliusz Chroboczek 88d2a96819 Restructure error and chat messages. 2020-08-12 12:17:56 +02:00
Juliusz Chroboczek 7b51296262 Split handshake into login/join.
For now, join must follow login, but it will make it easier to extend
the protocol for joining multiple groups (think federation).
2020-08-12 11:50:30 +02:00
Juliusz Chroboczek 6a37033ca8 Allow both sides to initiate renegotiation.
More reliable reaction to network failures when they are detected
by just one side.
2020-08-11 15:49:33 +02:00
Juliusz Chroboczek 7aab79c4c6 Have chat messages go through the server even when sent to oneself. 2020-08-07 11:33:59 +02:00
Juliusz Chroboczek 23c4aea58f Implement renegotiation in the up direction. 2020-08-07 11:15:58 +02:00
Juliusz Chroboczek 9506615272 Restart ICE instead of restarting down connections. 2020-08-07 11:15:58 +02:00
Juliusz Chroboczek 8a4d315c51 Move ice-servers.json under dataDir.
This makes it easier to deploy by putting all user-serviceable files
under data/.
2020-08-07 11:14:34 +02:00
Juliusz Chroboczek 426c1e06d8 Remove half-baked compatibility code for old browsers. 2020-06-19 11:51:46 +02:00
Juliusz Chroboczek 1e977213d1 Check media status in setMediaStatus. 2020-06-12 21:28:35 +02:00
Juliusz Chroboczek a8ca2e8559 Make stats reporting independent of the number of tracks. 2020-06-12 15:42:44 +02:00
Juliusz Chroboczek dbd87895ba Add visual feedback for connection status. 2020-06-11 19:47:26 +02:00
Juliusz Chroboczek 4b32c55a57 Restart ICE in client on up connection failures. 2020-06-11 19:20:11 +02:00
Juliusz Chroboczek e175ef0e49 Replace changed connections.
We used to destroy and recreate connections, we now replace them atomically.
2020-06-10 20:25:25 +02:00
Juliusz Chroboczek d3655b8955 Handle client-side errors during negotiation. 2020-06-10 14:38:00 +02:00
Juliusz Chroboczek 0308719719 Implement local mute. 2020-06-09 18:10:11 +02:00
Juliusz Chroboczek f70ff2424e Detect sends on closed websocket explicitly.
It turns out that send on a closed websocket doesn't throw, so handle
this case explicitly.  Thanks to Giuseppe Castagna for noticing.
2020-06-09 01:49:55 +02:00
Juliusz Chroboczek 8830870ded Implement downloading of recorded videos. 2020-06-01 00:02:17 +02:00
Juliusz Chroboczek 50ad751e7d Protect against stream being null in connection.close.
This may happen if we close a connection before getting any tracks.
2020-05-30 13:15:12 +02:00
Juliusz Chroboczek 0a2c4eb381 Implement recording. 2020-05-30 03:26:05 +02:00
Juliusz Chroboczek 1365683ad6 Fix selection of alternate media devices.
Thanks to Giuseppe Castagna for noticing.
2020-05-29 15:56:06 +02:00
Juliusz Chroboczek eb6ab8aa1a Implement workaround for older browsers that don't have transceivers. 2020-05-24 13:39:06 +02:00
Juliusz Chroboczek 9575b80893 Use mids instead of track ids for indexing labels.
It turns out that track ids are not necessarily the same on the local and
remote sides.  Thanks to Ines Klimann for noticing the issue.
2020-05-21 22:40:11 +02:00
Juliusz Chroboczek cbff5067b2 Implement sharing of multiple application windows at a time. 2020-05-21 22:40:11 +02:00
Juliusz Chroboczek 12858e1f36 Implement commands /lock and /unlock. 2020-05-18 15:24:04 +02:00
Juliusz Chroboczek 037f002a29 Make the requested field of client requests into a dictionary. 2020-05-18 00:56:29 +02:00
Juliusz Chroboczek b26a8cad78 Label tracks explicitly.
For now, this is only used to request screen sharing as opposed to normal
videos.  In the future, it will be used for simulcasting.
2020-05-17 23:28:19 +02:00
Antonin Décimo c52fa75686 Fix undefined disconnectbutton variable.
Commit 8257a7f "Remove dead variables." was wrong in that it deleted
the 'diconnect' [sic] variable definition, and left the
'disconnectbutton' variable undefined.
2020-05-14 12:55:41 +02:00
Juliusz Chroboczek 6efd6007f1 Fix bitrate computation.
I'm an idiot.
2020-05-12 19:20:39 +02:00
Juliusz Chroboczek 4a476abe11 Add minimum size for list of users. 2020-05-11 20:38:47 +02:00
Juliusz Chroboczek fbf26be8c6 Instantiate box explicitly.
Thanks to Antonin Décimo.
2020-05-11 02:58:48 +02:00
Juliusz Chroboczek 8257a7ff19 Remove dead variables. 2020-05-11 02:51:44 +02:00
Antonin Décimo 31a5a8e8f1 Fix escaping of \ in character class.
> Rejeté. Ce n'est pas un escape.

D’après mes tests, c’est considéré comme un escape. Doubler le
caractère serait suffisant.

    const url = 'https://example\\.com';
    const urlRegexp1 = /https?:\/\/[-a-zA-Z0-9@:%/._\+~#=?]+[-a-zA-Z0-9@:%/_\+~#=]/g;
    const urlRegexp2 = /https?:\/\/[-a-zA-Z0-9@:%/._\\+~#=?]+[-a-zA-Z0-9@:%/_\\+~#=]/g;
    console.log(url.length); // 20
    console.log(urlRegexp1.exec(url)); // ["https://example"]
    console.log(urlRegexp2.exec(url)); // ["https://example\.com"]
2020-05-11 00:33:58 +02:00
Antonin Décimo 33610e89f8 Introduce a lexical block in case. 2020-05-10 22:42:48 +02:00
Antonin Décimo 61b45ace5a Correctly close input tags. 2020-05-10 21:43:09 +02:00
Antonin Décimo 38a341de95 Fix unsafe negation.
https://eslint.org/docs/rules/no-unsafe-negation
2020-05-10 21:41:46 +02:00
Antonin Décimo 1064c4a47b Remove mentions of #anonymous-users. 2020-05-10 21:41:33 +02:00
Antonin Décimo f595da8fa9 Add missing semicolons. 2020-05-10 21:39:42 +02:00
Juliusz Chroboczek 89695c3713 Implement reception of audio only. 2020-05-09 22:44:34 +02:00
Juliusz Chroboczek f78030c482 Initial implementation of mike and camera selection.
We're closing and reopening the connection each time, we should be
renegotiating instead.
2020-05-05 20:50:27 +02:00
Juliusz Chroboczek 175b08bb08 Remove dead code. 2020-05-05 17:30:56 +02:00
Juliusz Chroboczek 3fec035132 Let setLocal and SharedMedia take the new state as an explicit parameter. 2020-05-04 23:49:44 +02:00
Juliusz Chroboczek 1f50b42ee0 Disable checkbox on media failure in setLocal and SharedMedia. 2020-05-03 11:06:08 +02:00
Juliusz Chroboczek 78cf9d0dbc Resize videos automatically. 2020-05-03 11:06:08 +02:00
Juliusz Chroboczek 10526d474e Add command /clear. 2020-04-30 19:13:32 +02:00
Juliusz Chroboczek 34eacafe5c Add sample ice-servers.json. 2020-04-30 19:13:32 +02:00
Juliusz Chroboczek 9bd093e78c Stop tracks before closing stream.
Otherwise the camera status light stays on.
2020-04-29 01:22:39 +02:00
Juliusz Chroboczek d24aafd314 Remove all down connections at websocket close. 2020-04-27 01:37:27 +02:00
Juliusz Chroboczek e7e1f248ea Dont send close on abort. 2020-04-27 01:33:05 +02:00
Juliusz Chroboczek 087f804100 Clear error after connecting. 2020-04-26 22:00:48 +02:00
Juliusz Chroboczek eed3d2aff7 Display upstream throughput. 2020-04-26 22:00:48 +02:00
Juliusz Chroboczek e19d704a0a Format error messages on the client side. 2020-04-26 19:15:02 +02:00
Juliusz Chroboczek c441b49d26 Send rate updates over RTCP. 2020-04-26 03:03:39 +02:00
Juliusz Chroboczek b201c3d93c Implement ping/pong exchanges and client timeouts. 2020-04-25 22:44:24 +02:00
Juliusz Chroboczek 4ea4e7c0eb Implement chat history. 2020-04-25 21:19:11 +02:00
Juliusz Chroboczek 1d90f44315 Kill Message field in clientMessage.
Having both Message and Value is confusing.
2020-04-25 20:49:21 +02:00
Juliusz Chroboczek fc4bac3f16 Hide overflow on user list. 2020-04-25 20:15:47 +02:00
Juliusz Chroboczek 2e841c082e Implement leave command. 2020-04-25 18:43:22 +02:00
Juliusz Chroboczek 2811506dfb Allow anonymous users to send commands. 2020-04-25 18:42:06 +02:00
Juliusz Chroboczek 3ea63c394c Implement abort message in the downstream direction.
This is not quite correct, we're sending a spurious close.
2020-04-25 18:29:44 +02:00
Juliusz Chroboczek 8bfdc2b040 Display username, rename admin to op. 2020-04-25 18:10:37 +02:00
Juliusz Chroboczek 5c40b95e9a Discard permissions when disconnecting. 2020-04-25 17:49:50 +02:00
Juliusz Chroboczek d46014242d Set page title. 2020-04-25 17:43:56 +02:00
Juliusz Chroboczek 25825e5b22 Implement kick, op and friends. 2020-04-25 17:36:35 +02:00
Juliusz Chroboczek 6f7c809b71 Unshare screen when stream ends. 2020-04-25 15:42:43 +02:00
Juliusz Chroboczek b018b14c80 Display bitrate. 2020-04-25 15:42:43 +02:00
Juliusz Chroboczek dd96f120a9 Don't allow empty group name in mainpage. 2020-04-25 14:34:47 +02:00
Juliusz Chroboczek 2890d21c98 Add group permissions. 2020-04-25 14:34:47 +02:00
Juliusz Chroboczek cb1782b6b2 Allow server to push error message to client. 2020-04-25 02:41:16 +02:00
Juliusz Chroboczek f5a518a448 Initial commit. 2020-04-25 01:06:57 +02:00