Git Product home page Git Product logo

edumeet's Introduction

edumeet logo WebRTC meeting service

Official website: edumeet.org

Try it online at usually.in

Join our discord server here

Main features

Feature Description
A/V streaming Share your microphone and camera + additional video stream
Screen sharing Share your screen to make some presentation right from your desktop
File sharing Share your files with the peers (torrent solution under the hood)
Chat messages Text conversation with other participants
Local Recording Record window/tab/screen content in browser supported formats with room audio and save them (disabled by default)
Authentication Supported types: OIDC, SAML, Local DB

Installation

Prerequisites

  • Docker and docker-compose
  • Curl
  • If you want to access the service from the internet, you need a public IP address
  • 2 fqdns (one for the main service and one for the turn server) that point to the public IP address
  • Ports 80/tcp, 443/tcp need to be open on the public IP address
  • Ports 40000-40249/udp and 40000-40249/tcp are not strictly necessary, but are recommended for better connectivity

Installation steps

  1. Run the installation script
./run-first.sh

This will ask you for a main domain and a media domain. It will also ask you for an email address for the certificates, but you can leave it empty if you don't want to receive notifications about the certificates. The script will also ask you for the listen IP of the server as well as the external IP. If you don't have a separate external IP, you can use the same IP for both.

The script will then prepare the certificates and the services. You may inspect and change the values in the .env file as needed. The script will read the .env file and use the values from there if they are present, so you can also set the values in the .env file before running the script. You may delete the .env file to start from scratch.

  1. Docker compose
docker-compose up -d

This will start all the services. And you are done. You can now access the service at the main domain you provided.

Configuration

The configuration for the client is in the client folder. You may change it as needed, but no changes are necessary for the service to work. The configuration for the room-server is in the room-server folder. You may change it as needed, but no changes are necessary for the service to work.

Community-driven support

Type
Open mailing list [email protected]
Subscribe lists.edumeet.org/sympa/subscribe/community/
Open archive lists.edumeet.org/sympa/arc/community/

Authors

  • Håvar Aambø Fosstveit
  • Stefan Otto
  • Mészáros Mihály
  • Roman Drozd
  • Rémai Gábor László
  • Piotr Pawałowski

License

MIT License

Contributions to this work were made on behalf of the GÉANT project, a project that has received funding from the European Union’s Horizon 2020 research and innovation programme under Grant Agreement No. 731122 (GN4-2). On behalf of GÉANT project, GÉANT Association is the sole owner of the copyright in all material which was developed by a member of the GÉANT project.

GÉANT Vereniging (Association) is registered with the Chamber of Commerce in Amsterdam with registration number 40535155 and operates in the UK as a branch of GÉANT Vereniging. Registered office: Hoekenrode 3, 1102BR Amsterdam, The Netherlands. UK branch address: City House, 126-130 Hills Road, Cambridge CB2 1PQ, UK.

edumeet's People

Contributors

havfo avatar n7remus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

edumeet's Issues

/server/public is missing

2.0 is broken due this error.
There is two way to fix:

  1. Create an empty dir with a placeholder file. Empty dir not allowed in git

  2. change script

-react-scripts build && rm -rf ../server/public/* && cp -r build/* ../server/public/
+react-scripts build && rm -rf ../server/public && cp -r build ../server/public

Which one do you prefer? I don't want to bug you too much: I will do the change.
I am just wondering which one should I pick..

Implement peer-2-peer mode

Implement peer-2-peer mode. Be able to switch between modes either automatic or by some other mechanism.

Start and exit page

Something to display on start without room name in URL.

Exit page showing after pressing exit button could be the same as start page?
Optionally with "go back to your old room" or last visited rooms view ...

RaiseHand button

  • don't show if participants < 3
  • set raiseHandStatus to false for all participants if participant number decreases to 2
  • configuration option for enable/disable "raise hand" in config

Fade out button

Fade out button for going back from one fullscreen element.

Better layout management

Users should be able to change the layout of the room, at least:

  • Make one or more videos larger than the rest
  • One video in fullscreen

File sharing

Implement file sharing using webtorrent or some other means

  • integrate webtorrent.io
  • do we need our own tracker or can this run without a tracker?
  • drag and drop a file somewhere make a message in chat
  • file upload button in chat
  • progressbar

Mozilla FireFox 3 tab in the same room issue

unmounted component. This is a no-op, but it indicates a memory leak
in your application. To fix, cancel all subscriptions and asynchronous
tasks in the componentWillUnmount method.
    in HiddenPeers (created by Connect(HiddenPeers))
    in Connect(HiddenPeers) (created by Peers)
react-dom.development.js:513

Chat refactor

Currently, all information about which user was sent by the current user is lost, and all messages are converted to responses.

To fix this, I believe that a lot of work concerning how peers are handled server-side is needed. For example, the peer name is reset when loading the page. Ideally, the peer name should persist for the entire session, and probably somehow be connected to the OpenID identity given that it exists.

Any thoughts?

JWT integration

Integrate JWT to secure participants from id-hijacking. This will also make it possible to authenticate users to enable functionality like muting, kicking etc.

Control panel

Independent real time control panel for each room for use for moderators or from admin side

  • participant list:
    • Change moderator role / admin role
    • Kickout
    • Mute all or arbitrary participants
  • Room :
    • Lock/unlock
      ( - set pin)
    • LastN
    • Default Layout
    • Raise Hand
      ( - Delete)
      ( - Save )

Localization

Support local user languages based on browser locale

gulp dist error

[20:30:14] Plumber found unhandled error:
GulpUglifyError: unable to minify JavaScript
Caused by: SyntaxError: Unexpected token: keyword (const)
File: /root/multiparty-meeting/app/multiparty-meeting.js

please check and let me know solution

Firefox behind firewall with blocked udp not working

If Firefox has to use TCP (via TURN or directly to mediasoup-server) there will no mediastreams go to or from client.

Problem is that there are different ICE candidates used on server and client:

Firefox: receive:
screenshot from 2018-10-31 13-41-43
firefox-receive.log

Firefox send:
screenshot from 2018-10-31 13-42-57
firefox-send.log

mediasoup server:
21598298.log
44260674.log

As you can see Firefox has nominated and selected TCP candidates while mediasoup uses udp candidates.

Actually mediasoup sends streams to Firefox but firewall is blocking.
Transport for receive on mediasoup side is timing out with a dtls failure after 30 secs.
{"roomId":10882856,"peerName":"kgm2bxmq","transportId":44260674,"event":"transport.dtlsstatechange","dtlsState":"failed","timestamp":1540978250225}

webpack

If we want #67 without a massive increase to the bundle size, it seems to me that the most reasonable way to go ahead is to make the feature opt-in by a switch in the settings. Then, we can dynamically load the module when enabling the feature in the client.

However, I don't know how the support for code splitting is in Gulp. I think it's a bit easier to do in wbepack using modules such as react-loadable, so this issue is basically for discussing whether we would want to consider moving to webpack or not. I think moving to something like create-react-app would be nice, however there is no support for Stylus in CRA. Writing a custom webpack configuration is certainly viable, though.

Is this something to consider?

Improving mobile support

  • Sidebar button either does not allow clicks or is incredibly inresponsive when open
  • Sidebar is slow to open
  • Me is a little to slow to actually drag around
  • Peers have no vertical margins
  • Displaying tooltips by mousemove is difficult
  • Sidebar is not wide enough and the buttons are incredibly, should probably cover the entire screen below a certain screen size
  • There is for some reason a vertical scrollbar
  • Notifications overlap with the tooltip for the share link button
  • Floating action buttons could be a bit bigger
  • Consider disabling selection, as the Copy screen is a bit irritating and hard to remove sometimes
  • Fullscreen button does not show a video
  • Currently, Peer only shows tools when hovering

Fine-tune scroll-to-bottom logic

Currently, the chat (and the files tab, from the file sharing PR) scrolls to the bottom when the component mounts or the component props update. This works for scrolling to the bottom when the sidebar is first opened, and when a new message is received. However, there is a small UI problem here, IMO, as this behavior makes it very difficult to scroll up to see an earlier message if new messages are frequently being added. To me, this is pretty irritating. My suggested fix is to only scroll to the bottom provided the user already was scrolled to the bottom, but to do nothing if the user is scrolled up on the page. Then the user can manually scroll to the bottom again when done reading the chat history.

User selection

  • make selected user a state in store
  • push selected user to lastN speakers so that he gets visible (needs lastN)
  • focus selected user in all peer related components (participantList, peer)
  • let show up selected user in bigview of filmstrip layout

No communication between clients

Hello, it seems I am unable to successfully setup the app. Although the app and the server are deployed with success, none of the clients, nor me with my local tests can receive audio or video from another client. Please, I need someone to even have access to my root server and help me find out why, or suggest me a way of getting any logs that can guide me through the process.

I am trying to make it work for over 15 days now and due to I didn't have any previous experience with webrtc, it's more than difficult to debug the installation.

ANY help would be appreciated.

Dark/Light themes

Support for choosing between light/dark themes, and save it to users cookie.

Failed to construct 'RTCPeerConnection'

Hi,
I have an very strange Error when i set the project on my own server.
First, My server is debian 8 . nodejs 8.11 and npm 6.4 ,
I have install the all depends by webtorrent-hybrid. use following commond
" apt-get install libgtk2.0-0 libxtst-dev libxss-dev libgconf2-dev libnss3 libasound2-dev xvfb"

I cloned the git branch "develop",And following your guid ,npm install everything. It seems everything is OK ..
also ,i changed the cert file to my let's encrypt wild cert.
But ,when I open the URL https://xxx.mydomain.club/ , always get error message :
"Failed to initialize native PeerConnection"

Also ,because i'm using chrome ,so i try to add "https://webrtc.github.io/adapter/adapter-latest.js" .
but no lucky . It's still same error.

I have attach the console log for your referrence.

Any help will be appreciate.

Raymond

BTW: I've also try these steps on other "clean" VHost . But ...you known the result.

noname.zssp.club-1540042472958.log

FadeOutElements

  • global fadeOut timer for: toolArea, Menu button, invite button and reappear onMouseMove
  • local PeerView buttons should fade out independently and reappear onMouseOver

User Identity

trustworthy user identity

  • Login / Logout button / User info
  • prevent same display name in one room
  • marker for verified and anonymous users everywhere
    • in Participant list
    • Chat
    • Username on PeerView
  • If in-logged: save a session token on clientside and serverside

Database backend on server

needed for claim rooms and persistent room config

  • mariaDB|postgres SQL?
  • userTable (userID)
  • userRooms (userID, roomName)
  • roomTable (roomName, foreign key userID from userRooms,config:{'locked':false, 'pin':'',moderatorList:[],chatHistory:[]})

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.