Giter Club home page Giter Club logo

strive's Introduction

ASP.NET Core Cypress codecov Maintainability License: Apache 2.0


Strive

Open source video conference system

View Demo · Report Bug · Request Feature

Preview image

Table of content

This is a very new project and I'm very thankful for all kinds of contributions including

  • design suggestions
  • typos or if you think something is worded poorly
  • feature ideas
  • bug reports
  • problems you have for a specific use case
  • and basically all your thoughts about Strive

About The Project

Last year when I was tutor at my university, I had to use BigBlueButton which was a very frustrating experience. I wondered how hard it can be to create a video conference system and that's how Strive was started. You can find a list with issues of BBB I wanted to address here.

Features

  • Flexible Permission System
  • Breakout Rooms
  • Screen Share
  • Multiple scenes (grid, active speaker)
  • Presenter mode
  • Room Chat & Global Chat, anonymous chat messages
  • Equipment / use smartphone as webcam by scanning a QR code
  • Talking Stick / moderated talking
  • Reduce traffic using WebRTC simulcast
  • Up-to-date and responsive UI
  • Announcements / show a message to all participants, also those in breakout rooms
  • Horizontal and vertical scalability (some small things are still to do, but the architecture allows it)
  • Polls (single choice, multiple choice, numeric, tag cloud)
  • Whiteboard

Architecture

Architecture

WebSPA

The frontend, written with React/TypeScript. Basically everything you see.

Identity Microservice

Manages the authentication process. This is basically an OpenID Connect server that provides the frontend for the login aswell as managing the access/refresh tokens.

Selective Forwarding Unit (SFU)

Redirects the media traffic (audio/video) between the participants.

Conference Management

This is the heart of Strive, here are conferences created, chat messages delivered, rooms created etc.

Preview

Strive.Preview.mp4

Getting Started

Running on localhost with Docker Compose and Traefik

  1. Clone the repo

    git clone https://github.com/Anapher/Strive.git
  2. Got to src directory

    cd src/
  3. Execute docker compose using the script

    • On Windows, execute
    ./compose.ps1 up --build
    • On Linux, execute
    chmod +x ./compose.sh && ./compose.sh up --build
  4. Go to https://localhost using your favorite browser. Please note that you may have to trust the self signed certificate for localhost. If you are using Google Chrome, you can simply enable this option chrome://flags/#allow-insecure-localhost (just paste it in the address bar)

In the .env file you can change some parameters, but they are already preconfigured for local testing.

Running on production server

Please refer to the installation instructions.

Development

For developing, you likely want to focus on one microservice only. First of all, you need to setup the infrastructure, namely a RabbitMQ server (with delayed message exchange plugin) and a MongoDB database, both running on default ports. The easiest way to do so is by executing

docker-compose -f docker-compose.yml -f docker-compose.override.yml up nosqldata rabbitmq

Then you need to start the required microservices you do NOT want to modify:

  • Identity microservice (runs on http://localhost:55105):
    cd src/Services/Identity/Identity.API && dotnet run
  • WebSPA (runs on http://localhost:55103):
    cd src/Web/WebSPA && dotnet run
    Do not use yarn start in the ClientApp folder, as the ASP.Net Core app injects some parameters required for the frontend to work. Fast refresh will still work in the React app.
  • SFU (runs on http://localhost:3000)
    cd src/Services/SFU && yarn dev
  • Conference Management (runs on http://localhost:55104)
    cd src/Services/ConferenceManagement/Strive && dotnet run

Do not change these ports as they are configured to work together in a local development environment. You can then attach a debugger to the microservice you want to change. For ASP.Net Core projects, instead of executing this command you may also open the solution with Visual Studio and run the debugger here.

Known Issues

  • Firefox will not connect to the SFU on localhost (in simple language, if you are running Strive on localhost, you cannot use your microphone, webcam, etc.) as Firefox has limitations for ICE over TCP. For local development, I suggest to use a different browser (e. g. Google Chrome).

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

License

Distributed under the Apache-2.0 License. See LICENSE for more information.

Acknowledgements

strive's People

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

strive's Issues

Active speaker view

We tried openstrive with 10+ persons and were surprise that on the "Active Speaker" view, only 2 videos are shown in addition to the active speaker. Is it intentional? If yes can you clarify why this decision?

Also we would like to continue our tests and eventually use it in a network of universities we federate. I did not find any blog post explaining what are your objectives and how you plan to organize the project. We would like to collaborate and help. Can you elaborate?

[Feature] How to Implements Load Balance

Hi, the feature support load balance .
I have read the code , but still have no idea how to deploy load balance .
can anyone give me some tips ?

If I want to deploy in kubernetes , How should I do ?
I think it might be very hard, the k8s don't support port range now

[Question] [Feature Request] GUI change and select presenter as me.

Hello!

Firstly, thanks to the author! You are doing amazing thing. My school uses bbb, I don't like it, because I hate Java and bbb is hard to install on server. This software is simply and it's the best OSS alternative for bbb I found.

But, I think this GUI is a bit uncomfortable.
My questions:

  • Where I can found a HTML/CSS/JS files to change layout?
  • Is available to make me as a presenter?

Feature request:

  • If answer to the second question is "no", please add that option.
  • Add an option to select layout of the elements.

Regardless of the above, this software is amazing and is the only viable OSS conferencing software written in C #

Contact Request

Hey, I've been trying to find a way to contact you, but you don't have any methods on contact on your profile. I would like to get in contact with you about a project, if you can, please reach me at [private]

Full Screen mode

Hello. I am wondering is it possible as a client to force full screen on any of the remote screens? I was searching for the button but couldnt find any :)

Apart from that I really like how many management features are already in mind, so keep up the good work :)

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.