• Stars
    star
    1,077
  • Rank 41,486 (Top 0.9 %)
  • Language
    JavaScript
  • License
    GNU Affero Genera...
  • Created over 10 years ago
  • Updated over 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

WebRTC audio/video call and conferencing server.

Spreed WebRTC

Spreed WebRTC implements a WebRTC audio/video call and conferencing server and web client.

The latest source of Spreed WebRTC can be found on GitHub. If you are a user, just wanting a secure and private alternative for online communication make sure to check out the Spreedbox, providing a ready to use hardware with Spreed WebRTC included.

Build prerequisites

Runtime dependencies

Spreed WebRTC compiles directly to native code and has no external runtime dependencies. See here for details.

Building

Build Status

If you got spreed-webrtc from the git repository, you will first need to run the included autogen.sh script to generate the configure script.

Configure does try to find all the tools on your system at the standard locations. If the dependencies are somewhere else, add the corresponding parameters to the ./configure call.

$ ./configure
$ make

Build separately

There are several make targets available. Get Go external dependencies at least once with make get, all the other targets depend on this.

$ make get
$ make assets
$ make binary

Server startup

spreed-webrtc-server [OPTIONS]

Options

-c="./server.conf": Configuration file.
-cpuprofile="": Write cpu profile to file.
-h=false: Show this usage information and exit.
-l="": Log file, defaults to stderr.
-memprofile="": Write memory profile to this file.
-v=false: Display version number and exit.

An example configuration file can be found in server.conf.in.

Usage

Connect to the server URL and port with a web browser and the web client will launch.

Development

To build styles and translations, further dependencies are required. The source tree contains already built styles and translations, so these are only required if you want to make changes.

The following Node.js modules are required, these may be installed locally by running npm install from the project root. Consult the package.json file for more details.

Styles can be found in src/styles. Translations are found in src/i18n. Each folder has its own Makefile to build the corresponding files. Check the Makefile.am templates for available make targets.

Javascript console logging is automatically disabled and can be enabled by adding the query parameter debug to your url https://my_url?debug.

Running server for development

Copy the server.conf.in to server.conf.

Build styles, javascript and binary using make. Then run ./spreed-webrtc-server

The server runs on http://localhost:8080/ per default.

HTML changes and Go rebuilds need a server restart. Javascript and CSS reload directly.

Running for production

Spreed WebRTC should be run through a SSL frontend proxy with support for Websockets. Example configuration for Nginx can be found in doc/NGINX.txt.

In addition, for real world use, one also needs a STUN/TURN server configured (with shared secret support).

See https://github.com/coturn/coturn for a free open source TURN server implementation. Make sure to use a recent version (we recommend 3.2). Versions below 2.5 are not supported.

For WebRTC usage, be sure to enable long-term credentials, fingerprinting, and set the realm. See https://github.com/coturn/coturn/wiki/turnserver#webrtc-usage for more information.

Running with Docker

We provide official Docker images at https://hub.docker.com/r/spreed/webrtc/. Of course you can build the Docker image yourself as well. Check the Dockerfiles in this repository for details and instructions.

Use the following command to run a Spreed WebRTC Docker container with the default settings from our official Spreed WebRTC Docker image.

docker run --rm --name my-spreed-webrtc -p 8080:8080 -p 8443:8443 \
    -v `pwd`:/srv/extra -i -t spreed/webrtc

Setup Screensharing

Chrome

Chrome should work out of the box.

Firefox

As of Firefox >= 36 you must append the domain being used to the allowed domains to access your screen. You do this by navigating to about:config, search for 'media.getusermedia.screensharing.allowed_domains', and append the domain to the list of strings. You can edit the field simply by double clicking on it. Ensure that you follow the syntax rules of the field. If you are using an ip:port url, simply append ip to the list. Also ensure that you are using https, otherwise permission will be denied to share your screen. You do not need to restart or reload in order for it to take affect.

Contributing

  1. "Fork" develop branch.
  2. Create a feature branch.
  3. Make changes.
  4. Do your commits (run make fmt and make jshint before commit).
  5. Send "pull request" for develop branch.

License

Spreed WebRTC uses the AGPL license, see our LICENSE file.

More Repositories

1

libde265

Open h.265 video codec implementation.
C++
1,573
star
2

libheif

libheif is an HEIF and AVIF file format decoder and encoder.
C++
1,383
star
3

libde265.js

JavaScript-only version of libde265 HEVC/H.265 decoder.
JavaScript
573
star
4

nextcloud-spreed-signaling

Standalone signaling server for Nextcloud Talk.
Go
322
star
5

docker-webrtc-turnserver

Docker image for a TURN server suitable for WebRTC
Shell
97
star
6

vlc-libde265

Standalone plugin for VLC 2.x to support decoding of HEVC/H.265 using libde265.
C
89
star
7

gstreamer-libde265

HEVC/H.265 video decoder using libde265 (GStreamer plugin)
C
58
star
8

nextcloud-spreedme

Spreed.ME Nextcloud app
JavaScript
55
star
9

VLCKit

Fork of http://git.videolan.org/?p=vlc-bindings/VLCKit.git to integrate a version of VLC supporting libde265.
Objective-C
51
star
10

vlc-2.1

Fork of http://git.videolan.org/?p=vlc/vlc-2.1.git to integrate libde265. Main integration development happens in https://github.com/strukturag/vlc.
C
51
star
11

pdfdraw

Nextcloud app to annotate PDF documents
JavaScript
42
star
12

libde265-ffmpeg

h.265 codec for ffmpeg using libde265
C
40
star
13

heif-gimp-plugin

Plugin for GIMP to load HEIF files.
C
23
star
14

phoenix

Go library providing support functionality for application startup, configuration, logging, and profiling.
Go
17
star
15

vlc-ports-ios

Fork of git://git.videolan.org/vlc-ports/ios.git to integrate a version of VLC supporting libde265.
Objective-C
9
star
16

vlc-2.2

Fork of http://git.videolan.org/?p=vlc/vlc-2.2.git to integrate libde265.
C
8
star
17

httputils

Go support library for HTTP servers.
Go
7
star
18

libde265-data

Example video stream data for libde265.
6
star
19

spreedme-iosapp

Spreed.ME iOS app
Objective-C
6
star
20

xudnsd

Tiny single host/IP DNS server
Go
4
star
21

tlsdumpster

TLS dumpster prints incoming TLS requests details (host, url, headers and body) to stdout and aborts the request with HTTP status 500.
Go
4
star
22

sloth

Tiny REST framework for Go
Go
3
star
23

gst-plugins-good

GStreamer "good" plugins with support for HEVC/H.265 decoding using libde265
C
3
star
24

webrtc-ios

WebRTC fork for Spreed.ME iOS app
C++
3
star
25

spreed-turnservicecli

TURN service client implementation for Go
Go
3
star
26

sling

Go support library for HTTP clients
Go
3
star
27

goacceptlanguageparser

Go library for parsing HTTP request header "Accept-Language".
Go
2
star
28

file-browser-ios

File browser for iOS
Objective-C
2
star
29

SortedDictionary

Sorted dictionary class for iOS/ macOS
Objective-C
2
star
30

spreed-webrtc-snap

Spreed WebRTC Ubuntu Snappy Snapcraft build repository.
Python
2
star
31

gst-plugins-bad

GStreamer "bad" plugins with support for HEVC/H.265 decoding using libde265
C
2
star
32

lavfilters-ffmpeg

ffmpeg with custom patches for LAV Filters (deprecated and no longer required by https://github.com/strukturag/LAVFilters)
C
2
star