Home

Awesome

<h1 align="center">MiroTalk SFU</h1> <br /> <div align="center">

<a href="">Author</a> <a href="">License: AGPLv3</a> <a href="">Community</a>

</div> <p align="center">Free WebRTC - SFU - Simple, Secure, Scalable Real-Time Video Conferences with support for up to 8k resolution and 60fps. It's compatible with all major browsers and platforms</p> <hr /> <p align="center"> <a href="https://sfu.mirotalk.com/">Explore MiroTalk SFU</a> </p> <hr /> <p align="center"> <a href="https://sfu.mirotalk.com/"> <img src="public/images/mirotalksfu-header.gif"> </a> </p> <hr /> <p align="center"> Join our community for questions, discussions, and support on <a href="https://discord.gg/rgGYfeYW3N">Discord</a> </p> <hr /> <details> <summary>Features</summary> <br/> </details> <details> <summary>About</summary> <br> </details> <details> <summary>Direct Join</summary> <br/> </details> <details> <summary>Host Protection Configuration</summary> <br/>

When host.protected or host.user_auth is enabled, the host/users can provide a valid token for direct joining the room as specified in the app/src/config.js file.

ParamsValueDescription
host.protectedtrue if protection is enabled, false if not (default false)Requires the host to provide a valid username and password during room initialization.
host.user_authtrue if user authentication is required, false if not (default false).Determines whether host authentication is required.
host.usersJSON array with user objects: {"username": "username", "password": "password"}List of valid host users with their credentials.

Example:

    host: {
        protected: true,
        user_auth: true,
        users: [
            {
                username: 'username',
                password: 'password',
            },
            {
                username: 'username2',
                password: 'password2',
            },
            //...
        ],
    },
</details> <details open> <summary>Embed a meeting</summary> <br/>

iframe

To embed a meeting within your service or app using an iframe, you can use the following code:

<iframe
    allow="camera; microphone; display-capture; fullscreen; clipboard-read; clipboard-write; web-share; autoplay"
    src="https://sfu.mirotalk.com/newroom"
    style="height: 100vh; width: 100vw; border: 0px;"
></iframe>
</details> <details open> <summary>Quick Start</summary> <br/>
# Gcc g++ make
$ apt-get update
$ apt-get install -y build-essential
# Python 3.8 and pip
$ DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata
$ apt install -y software-properties-common
$ add-apt-repository -y ppa:deadsnakes/ppa
$ apt update
$ apt install -y python3.8 python3-pip
# FFmpeg
$ apt install -y ffmpeg

nodejs

Install NodeJS 18.X and npm using Node Version Manager


# Clone this repo
$ git clone https://github.com/miroslavpejic85/mirotalksfu.git
# Go to to dir mirotalksfu
$ cd mirotalksfu
# Copy app/src/config.template.js in app/src/config.js and edit it if needed
$ cp app/src/config.template.js app/src/config.js
# Install dependencies - be patient, the first time will take a few minutes, in the meantime have a good coffee ;)
$ npm install
# Start the server
$ npm start
# If you want to start the server on a different port than the default use an env var
$ PORT=3011 npm start
<br/>

[!NOTE]

To run MiroTalk SFU on a Windows operating system, you can follow the instructions provided in this documentation.

</details> <details open> <summary>Docker</summary> <br/>

docker

# Clone this repo
$ git clone https://github.com/miroslavpejic85/mirotalksfu.git
# Go to to dir mirotalksfu
$ cd mirotalksfu
# Copy app/src/config.template.js in app/src/config.js IMPORTANT (edit it according to your needs)
$ cp app/src/config.template.js app/src/config.js
# Copy docker-compose.template.yml in docker-compose.yml and edit it if needed
$ cp docker-compose.template.yml docker-compose.yml
# (Optional) Get official image from Docker Hub
$ docker-compose pull
# Create and start containers
$ docker-compose up # -d
# To stop and remove resources
$ docker-compose down
</details> <details> <summary>Documentations</summary> <br>
# The response will give you the total of rooms and users.
$ curl -X GET "http://localhost:3010/api/v1/stats" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json"
$ curl -X GET "https://sfu.mirotalk.com/api/v1/stats" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json"
# The response will give you the active meetings (default disabled).
$ curl -X GET "http://localhost:3010/api/v1/meetings" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json"
$ curl -X GET "https://sfu.mirotalk.com/api/v1/meetings" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json"
# The response will give you a entrypoint / Room URL for your meeting.
$ curl -X POST "http://localhost:3010/api/v1/meeting" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json"
$ curl -X POST "https://sfu.mirotalk.com/api/v1/meeting" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json"
# The response will give you a entrypoint / URL for the direct join to the meeting.
$ curl -X POST "http://localhost:3010/api/v1/join" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json" --data '{"room":"test","roomPassword":"false","name":"mirotalksfu","audio":"false","video":"false","screen":"false","notify":"false"}'
$ curl -X POST "https://sfu.mirotalk.com/api/v1/join" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json" --data '{"room":"test","roomPassword":"false","name":"mirotalksfu","audio":"false","video":"false","screen":"false","notify":"false"}'
# The response will give you a entrypoint / URL for the direct join to the meeting with a token.
$ curl -X POST "http://localhost:3010/api/v1/join" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json" --data '{"room":"test","roomPassword":"false","name":"mirotalksfu","audio":"false","video":"false","screen":"false","notify":"false","token":{"username":"username","password":"password","presenter":"true", "expire":"1h"}}'
$ curl -X POST "https://sfu.mirotalk.com/api/v1/join" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json" --data '{"room":"test","roomPassword":"false","name":"mirotalksfu","audio":"false","video":"false","screen":"false","notify":"false","token":{"username":"username","password":"password","presenter":"true", "expire":"1h"}}'
# The response will give you a valid token for a meeting (default diabled)
$ curl -X POST "http://localhost:3010/api/v1/token" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json" --data '{"username":"username","password":"password","presenter":"true", "expire":"1h"}'
$ curl -X POST "https://sfu.mirotalk.com/api/v1/token" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json" --data '{"username":"username","password":"password","presenter":"true", "expire":"1h"}'
</details> <details open> <summary>Hetzner & Contabo</summary> <br/>

Hetzner

This application is running for demonstration purposes on Hetzner, one of the best cloud providers and dedicated root servers.


Use my personal link to receive €⁠20 IN CLOUD CREDITS.


Contabo

Experience also top-tier German web hosting – dedicated servers, VPS, and web hosting at unbeatable prices. Reliable, secure, and backed by 24/7 support. Explore now here


To set up your own instance of MiroTalk SFU on a dedicated cloud server, please refer to our comprehensive self-hosting documentation. This guide will walk you through the process step by step, ensuring a smooth and successful deployment.

</details> <details> <summary>Live Demo</summary> <br/>

<a target="_blank" href="https://hetzner.cloud/?ref=XdRifCzCK3bn"><img src="public/sponsors/Hetzner.png" style="width: 220px;"></a>

https://sfu.mirotalk.com

mirotalksfu-qr

</details> <details> <summary>Credits</summary> <br/> </details> <details> <summary>Contributing</summary> <br/> </details> <details> <summary>License</summary> <br/>

AGPLv3

MiroTalk SFU is free and open-source under the terms of AGPLv3 (GNU Affero General Public License v3.0). Please respect the license conditions, In particular modifications need to be free as well and made available to the public. Get a quick overview of the license at Choose an open source license.

To obtain a MiroTalk SFU license with terms different from the AGPLv3, you can conveniently make your purchase on CodeCanyon. This allows you to tailor the licensing conditions to better suit your specific requirements.

</details> <details open> <summary>Support the project</summary> <br/>

Do you find MiroTalk SFU indispensable for your needs? Join us in supporting this transformative project by becoming a backer or sponsor. By doing so, not only will your logo prominently feature here, but you'll also drive the growth and sustainability of MiroTalk SFU. Your support is vital in ensuring that this valuable platform continues to thrive and remain accessible for all. Make an impact – back MiroTalk SFU today and be part of this exciting journey!

BroadcastXHetzner
LuvLoungeQuestionPro
BrowserStackCrystalSound
CloudronKiquix
LambdaTest
</details> <details open> <summary>Advertisers</summary>

Contabo


</details>

Diving into Additional MiroTalk Projects:

<details> <summary>MiroTalk P2P</summary> <br/>

Try also MiroTalk P2P peer to peer real-time video conferences, optimized for small groups. Unlimited time, unlimited concurrent rooms each having 5-8 participants.

</details> <details> <summary>MiroTalk C2C</summary> <br>

Try also MiroTalk C2C peer to peer real-time video conferences, optimized for cam 2 cam. Unlimited time, unlimited concurrent rooms each having 2 participants.

</details> <details> <summary>MiroTalk BRO</summary> <br>

Try also MiroTalk BRO Live broadcast (peer to peer) live video, audio and screen stream to all connected users (viewers). Unlimited time, unlimited concurrent rooms each having a broadcast and many viewers.

</details> <details> <summary>MiroTalk WEB</summary> <br>

Try also MiroTalk WEB a platform that allows for the management of an unlimited number of users. Each user must register with their email, username, and password, after which they gain access to their personal dashboard. Within the dashboard, users can manage their rooms and schedule meetings using the desired version of MiroTalk on a specified date and time. Invitations to these meetings can be sent via email, shared through the web browser, or sent via SMS.

</details>

This project is tested with BrowserStack.