Code Monkey home page Code Monkey logo

jangouts's Introduction

Jangouts

Coverage Status

Jangouts (for "Janus Hangouts") is a solution for videoconferencing based on WebRTC and the excellent Janus Gateway with a user interface loosely inspired by Google Hangouts. It aims to provide a completely self-hosted open source alternative to Google Hangouts and similar solutions. Currently Jangouts supports conferences with video, audio, screen sharing and textual chat organized into an unlimited amount of conference rooms with a configurable limit of participants per room.

Example screen of Jangouts 0.4.0

Installation

Jangouts is a JavaScript application running exclusively client-side (i.e. in the browser). The server simply needs to provide a bunch of static files through a web server.

Step 1. Janus Gateway

All the server-side WebRTC handling is performed by Janus Gateway, so the first requirement is a running janus server with support for data channels compiled in, with the videoroom plugin enabled and with a valid list of rooms in the janus.plugin.videoroom.cfg file.

There are many ways to get a Janus Gateway server running in your system. Check JANUS.md for some guidance.

Step 2. Download and configure Jangouts

The easiest way to get Jangouts is to download the latest archive from the Jangouts releases page at Github. For deployment purposes, the only relevant directory in that archive is the one called build, which contains the files to be served by the HTTP server to the participants' browsers.

A file called config.json can be added to that directory to point the participants to any Janus server, to enable extra debugging, or to tweak Jangouts in several ways. Use the file config.sample.json as starting point. It's fine to operate Jangouts without a config.json file or to have some parameters set to null in that file, Jangouts will try to guess the proper value during runtime.

Step 3. Serve the build folder

Given than a Janus Gateway server is running and reachable and that config.json contains the proper values (in case something needs to be adjusted), all that needs to be done is to serve the content of the build directory to the clients. Any web server, such as Apache, can be used for that purpose.

The simplest way (although certainly not the cleanest) to do such thing in an (open)SUSE system would be:

  1. sudo zypper in apache2
  2. Copy the content of build directly into /srv/www/htdocs/
  3. sudo systemctl start apache2.service

Done. At that point you should be able to access your own instance of Jangouts just by pointing your browser to http://localhost/.

See the deployment instructions for more information about how to properly configure Apache.

A note about security and browsers

Browsers will refuse to allow screen sharing through WebRTC for connections not using SSL. In most cases, they will even refuse to send any WebRTC content at all, neither video or audio. Providing HTTPS access to both the files and the Janus gateway, like shown in the deployment instructions, may be crucial for a proper usage experience.

Plugins

Jangouts includes limited support for plugins in order to provide additional functionality. But plugins are temporarily disabled in the current version of Jangouts. If you are interested on Jangouts plugins, use Jangouts version 0.5.x for the time being. Information about configuring the existing plugins is found in the README.md file for that release.

Troubleshooting

If Jangouts does not work, please check the troubleshooting guide.

Developing Jangouts

In order to modify Jangouts, it's necessary to install some development tools. That setup is detailed in the development instructions.

Acknowledgments

License

This software is released under the terms of the MIT License. See the license file for more information.

Find us

Jangouts developers can be usually found at:

jangouts's People

Contributors

ancorgs avatar aniabui avatar bimalkant-lauhny avatar bmwiedemann avatar chrisbr avatar cyntss avatar dependabot[bot] avatar dgdavid avatar imobachgs avatar joseivanlopez avatar jreidinger avatar magarcia avatar mdeniz avatar mohsini172 avatar mvidner avatar qantas94heavy avatar sandr3j avatar teclator 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

jangouts's Issues

Avoid using $scope.$apply

There are a lot of points when $scope.$apply is called. We must avoid them because it leads to some failures (trying to do an $apply during a running digest-cycle).

Bookmarkable username and room

It should be possible to create a bookmark for the current username and room selections, so entering the same room everyday (or several times per day) is more straightforward.

speak detection if muted

When I'm muted (esp. if others muted me) and I start speaking Jangouts should detect that and inform me (e.g. with a bell).

Google Hangout does that.

Automatically resized feeds in list

The thumbnails are currently fixed at 100px wide. The plan has always being to have them automatically adjusted between 126 and 80 pixels, based on the available space. With the current flex box, that should be very easy to implement using only css with the min-width and max-width properties. The problem is that those properties, that work as expected with figures containing images, doesn't seem to work with videos.

Two options:

Option to disable the notification

Once you're muted but jangout supposed you are speaking then it will notice you by text and audio, we should have an option can disable it.

Deactivate local video channel when disabling video

In the past, the buttons for muting or disabling local video really disabled the corresponding channels of the stream locally. Now the channels remain activated but are not sent to the other peers. That is great for audio because it allowed us to implement #27. But for video is not that great. The user can still manage to see their own video and may think that it's being transmitted. So disabling the local video channel in addition to stop sending it would give us the best of both worlds and should be easy to implement with some git archeology.

Automatically resized thumbnails are sometimes too big

The thumbnails of the participants are automatically resized to make sure they all fit in the roster area. But there is a bug somewhere and in some situations the resized thumbnails don't fit and a scroll bar appears (instead of using smaller thumbnails).

Add a test suite

Jangouts is getting bigger and bigger so, IMHO, we must build a test suite.

Interface for mobile devices

The current UI is not much friendly for devices with a small screen. Moreover, the CPU of mobile devices do not cope very well with many videos being rendered at the same time. Thus, the mobile interface should reduce the number of live videos, maybe rendering only the active one.

In long meetings, audio stream can get broken

We use Jangouts for long meetings with a lot of people. Sometimes, the audio stream from user A to user B stops working. Video still works and other participants can still hear A. When that happens, there are A LOT of errors like this being thrown to the Janus log

[ERR] [ice.c:janus_ice_send_thread:3124] [3945424720] ... SRTP protect error... err_status_replay_old

As a workaround, we use the ignore functionality to restart the connection between A and B, so everything works fine again. But that's just an ugly workaround, we need to prevent the error from happening at all.

FR: allow disabling of webcam (i.e. voice-only mode)

Currently the only way to disable the webcam in Chrome is to refuse Jangouts permission to access it, but this also refuses permission to the microphone, which is obviously useless. I would like to be able to use Jangouts in voice-only mode, even if others are using their webcams. This is supported by Google Hangouts.

layout changes don't persist

If I rearrange the position/size of the panes on the meeting page, the new layout gets lost when I reload the page. This should be persisted either locally via cookies, or server-side per user account.

Error when a peer disconnects

The following error is logged to the console every time a remote feed disconnects.

this.connection.getConfig(...) is undefined

per user volume control

Since some users are way to loud and others very quiet it should be possible to control the volume per user.

Alternative UI for lower CPU usage

Right now, the limiting factor for big meetings is the CPU usage needed to render all the videos in the clients. Bandwidth and CPU power on the server seems to not be a big issue. We should create alternative user interfaces less CPU hungry.

A first approach could be to only render the main video, keeping the thumbnails as audio-only.

We could need to investigate which situations produce the highest CPU consumption.

More elaborated solutions can be tried, like rendering video only for participants that are speaking and/or moving (with motion detection in the publisher side).

Warning about being muted raises too fast

When you have just joined a room, the setup (sending the configure and so on) can take some seconds. If the user speaks during that period the "you are muted" notification is displayed. Once the setup finishes, the user is not muted anymore. Unexpected and confusing.

Support for selecting room

At this time, user is always connected to the room '1234'. This feature is intended to let the user to choose a room to join.

"Ignoring" someone is too strong

I see that to Ignore someone means turning off their

  • video
  • audio
  • chat messages

That may be OK for an annoying person in a public chat, but our use case is cancelling echos when sitting in the same room. For that, you should definitely see the chat messages (with links to issue trackers) and possibly also the video (if the other party is sitting back to back with you).

Add sessions recording support

We have discussed two approaches here.

  1. Use the integrated recording feature in Janus, which produces one .mjr per each audio and video stream. We could use then the streaming plugin to recreate the meeting in a similar way to what is done in this demo (code available) https://janus.conf.meetecho.com/recordplaytest.html We would probably need to store some additional data (like the list of participants) in order to be able to recreate the session effectively. Data channels would be most likely lost, since I don't think they are currently recorded by Janus. The good part is that the recording could be "interactive", i.e. allowing selection of the participant to highlight in each moment, browser resizing, layout rearranging and so on.

  2. Connect to the room with a "ghost" participant that will run a browser and simply record what is rendered in the browser. It needs almost no special support server-side and everything will be recorded (including chat messages). But the result would not be so flexible.

Log and display events

The chat window should also show events (like participants joining/leaving). Probably, some events should be, in addition, displayed using Toastr or a similar mechanism.

Architecturally, the feature is planned (using ActionService), but some more events (like muting) should be moved to ActionService as a first step.

"Next" button for turn-based meetings

For turn-based meetings it would be useful to have a button which automatically mutes the only current speaker and un-mutes the next one in the list of feeds.

No handling of the back button

When a user press the browser's back button while being on a room, he goes back to the login screen without actually quiting the room, so he can join twice.

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.