mirror of
https://github.com/jech/galene.git
synced 2024-11-25 01:55:57 +01:00
SFU is now called Galène.
This commit is contained in:
parent
2d07c5d317
commit
ef1c211b7f
23 changed files with 56 additions and 55 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -1,7 +1,7 @@
|
||||||
*~
|
*~
|
||||||
data/*.pem
|
data/*.pem
|
||||||
sfu
|
galene
|
||||||
sfu-password-generator/sfu-password-generator
|
galene-password-generator/galene-password-generator
|
||||||
passwd
|
passwd
|
||||||
groups/*.json
|
groups/*.json
|
||||||
static/*.d.ts
|
static/*.d.ts
|
||||||
|
|
14
README
14
README
|
@ -63,21 +63,21 @@ options are described below.
|
||||||
|
|
||||||
## Copy the necessary files to your server:
|
## Copy the necessary files to your server:
|
||||||
|
|
||||||
Assuming you have set up a user *sfu*:
|
Assuming you have set up a user *galene*:
|
||||||
|
|
||||||
rsync -a sfu static data groups sfu@server.example.org:
|
rsync -a galene static data groups galene@server.example.org:
|
||||||
|
|
||||||
## Run the server binary:
|
## Run the server binary:
|
||||||
|
|
||||||
ssh sfu@server.example.org
|
ssh galene@server.example.org
|
||||||
nohup ./sfu &
|
nohup ./galene &
|
||||||
|
|
||||||
If you are using *runit*, use a script like the following:
|
If you are using *runit*, use a script like the following:
|
||||||
|
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
exec 2>&1
|
exec 2>&1
|
||||||
cd ~sfu
|
cd ~galene
|
||||||
exec setuidgid sfu ./sfu
|
exec setuidgid galene ./galene
|
||||||
|
|
||||||
If you are using *systemd*, use `Type=simple` in your service file.
|
If you are using *systemd*, use `Type=simple` in your service file.
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ A user definition is a dictionary with the following fields:
|
||||||
allowed;
|
allowed;
|
||||||
- `password`: if omitted, then no password is required. Otherwise, this
|
- `password`: if omitted, then no password is required. Otherwise, this
|
||||||
can either be a string, specifying a plain text password, or
|
can either be a string, specifying a plain text password, or
|
||||||
a dictionary generated by the `sfu-password-generator` utility.
|
a dictionary generated by the `galene-password-generator` utility.
|
||||||
|
|
||||||
For example,
|
For example,
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ The frontend is written in JavaScript and is split into two files:
|
||||||
|
|
||||||
- `protocol.js` contains the low-level functions that interact with the
|
- `protocol.js` contains the low-level functions that interact with the
|
||||||
server;
|
server;
|
||||||
- `sfu.js` contains the user interface.
|
- `galene.js` contains the user interface.
|
||||||
|
|
||||||
If you wish to develop your own frontend, I recommend using `protocol.js`,
|
If you wish to develop your own frontend, I recommend using `protocol.js`,
|
||||||
which is likely to remain reasonably stable as the protocol evolves. This
|
which is likely to remain reasonably stable as the protocol evolves. This
|
||||||
|
|
|
@ -16,8 +16,8 @@ import (
|
||||||
"github.com/pion/rtp/codecs"
|
"github.com/pion/rtp/codecs"
|
||||||
"github.com/pion/webrtc/v3/pkg/media/samplebuilder"
|
"github.com/pion/webrtc/v3/pkg/media/samplebuilder"
|
||||||
|
|
||||||
"sfu/conn"
|
"galene/conn"
|
||||||
"sfu/group"
|
"galene/group"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Directory string
|
var Directory string
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"sfu/rtptime"
|
"galene/rtptime"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Estimator struct {
|
type Estimator struct {
|
||||||
|
|
|
@ -3,7 +3,7 @@ package estimator
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"sfu/rtptime"
|
"galene/rtptime"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestEstimator(t *testing.T) {
|
func TestEstimator(t *testing.T) {
|
||||||
|
|
|
@ -11,7 +11,7 @@ import (
|
||||||
|
|
||||||
"golang.org/x/crypto/pbkdf2"
|
"golang.org/x/crypto/pbkdf2"
|
||||||
|
|
||||||
"sfu/group"
|
"galene/group"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
|
@ -16,9 +16,9 @@ import (
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"sfu/diskwriter"
|
"galene/diskwriter"
|
||||||
"sfu/group"
|
"galene/group"
|
||||||
"sfu/webserver"
|
"galene/webserver"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
2
go.mod
2
go.mod
|
@ -1,4 +1,4 @@
|
||||||
module sfu
|
module galene
|
||||||
|
|
||||||
go 1.13
|
go 1.13
|
||||||
|
|
||||||
|
|
|
@ -7,9 +7,10 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"hash"
|
"hash"
|
||||||
"sfu/conn"
|
|
||||||
|
|
||||||
"golang.org/x/crypto/pbkdf2"
|
"golang.org/x/crypto/pbkdf2"
|
||||||
|
|
||||||
|
"galene/conn"
|
||||||
)
|
)
|
||||||
|
|
||||||
type RawPassword struct {
|
type RawPassword struct {
|
||||||
|
|
|
@ -3,7 +3,7 @@ package jitter
|
||||||
import (
|
import (
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
||||||
"sfu/rtptime"
|
"galene/rtptime"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Estimator struct {
|
type Estimator struct {
|
||||||
|
|
|
@ -13,12 +13,12 @@ import (
|
||||||
"github.com/pion/rtp"
|
"github.com/pion/rtp"
|
||||||
"github.com/pion/webrtc/v3"
|
"github.com/pion/webrtc/v3"
|
||||||
|
|
||||||
"sfu/conn"
|
"galene/conn"
|
||||||
"sfu/estimator"
|
"galene/estimator"
|
||||||
"sfu/group"
|
"galene/group"
|
||||||
"sfu/jitter"
|
"galene/jitter"
|
||||||
"sfu/packetcache"
|
"galene/packetcache"
|
||||||
"sfu/rtptime"
|
"galene/rtptime"
|
||||||
)
|
)
|
||||||
|
|
||||||
type bitrate struct {
|
type bitrate struct {
|
||||||
|
|
|
@ -9,8 +9,8 @@ import (
|
||||||
"github.com/pion/rtp/codecs"
|
"github.com/pion/rtp/codecs"
|
||||||
"github.com/pion/webrtc/v3"
|
"github.com/pion/webrtc/v3"
|
||||||
|
|
||||||
"sfu/packetcache"
|
"galene/packetcache"
|
||||||
"sfu/rtptime"
|
"galene/rtptime"
|
||||||
)
|
)
|
||||||
|
|
||||||
func isVP8Keyframe(packet *rtp.Packet) bool {
|
func isVP8Keyframe(packet *rtp.Packet) bool {
|
||||||
|
|
|
@ -5,8 +5,8 @@ import (
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"sfu/rtptime"
|
"galene/rtptime"
|
||||||
"sfu/stats"
|
"galene/stats"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *webClient) GetStats() *stats.Client {
|
func (c *webClient) GetStats() *stats.Client {
|
||||||
|
|
|
@ -9,9 +9,9 @@ import (
|
||||||
|
|
||||||
"github.com/pion/rtp"
|
"github.com/pion/rtp"
|
||||||
|
|
||||||
"sfu/conn"
|
"galene/conn"
|
||||||
"sfu/packetcache"
|
"galene/packetcache"
|
||||||
"sfu/rtptime"
|
"galene/rtptime"
|
||||||
)
|
)
|
||||||
|
|
||||||
// packetIndex is a request to send a packet from the cache.
|
// packetIndex is a request to send a packet from the cache.
|
||||||
|
|
|
@ -12,10 +12,10 @@ import (
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
"github.com/pion/webrtc/v3"
|
"github.com/pion/webrtc/v3"
|
||||||
|
|
||||||
"sfu/conn"
|
"galene/conn"
|
||||||
"sfu/diskwriter"
|
"galene/diskwriter"
|
||||||
"sfu/estimator"
|
"galene/estimator"
|
||||||
"sfu/group"
|
"galene/group"
|
||||||
)
|
)
|
||||||
|
|
||||||
func errorToWSCloseMessage(id string, err error) (*clientMessage, []byte) {
|
func errorToWSCloseMessage(id string, err error) (*clientMessage, []byte) {
|
||||||
|
|
|
@ -1020,7 +1020,7 @@ legend {
|
||||||
z-index: 1039;
|
z-index: 1039;
|
||||||
}
|
}
|
||||||
|
|
||||||
#left-sidebar .sfu-header {
|
#left-sidebar .galene-header {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1033,7 +1033,7 @@ header .collapse {
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sfu-header {
|
.galene-header {
|
||||||
font-size: 1.3rem;
|
font-size: 1.3rem;
|
||||||
font-weight: 900;
|
font-weight: 900;
|
||||||
color: #dbd9d9;
|
color: #dbd9d9;
|
|
@ -1,11 +1,11 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<title>SFU</title>
|
<title>Galène</title>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta http-equiv="ScreenOrientation" content="autoRotate:disabled">
|
<meta http-equiv="ScreenOrientation" content="autoRotate:disabled">
|
||||||
<link rel="stylesheet" type="text/css" href="/common.css"/>
|
<link rel="stylesheet" type="text/css" href="/common.css"/>
|
||||||
<link rel="stylesheet" type="text/css" href="/sfu.css"/>
|
<link rel="stylesheet" type="text/css" href="/galene.css"/>
|
||||||
<link rel="author" href="https://www.irif.fr/~jch/"/>
|
<link rel="author" href="https://www.irif.fr/~jch/"/>
|
||||||
<!-- Font Awesome File -->
|
<!-- Font Awesome File -->
|
||||||
<link href="/css/fontawesome.min.css" rel="stylesheet" type="text/css">
|
<link href="/css/fontawesome.min.css" rel="stylesheet" type="text/css">
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
<div class="row full-height">
|
<div class="row full-height">
|
||||||
<nav id="left-sidebar">
|
<nav id="left-sidebar">
|
||||||
<div class="users-header">
|
<div class="users-header">
|
||||||
<div class="sfu-header">SFU</div>
|
<div class="galene-header">Galène</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-sep"></div>
|
<div class="header-sep"></div>
|
||||||
<div id="users"></div>
|
<div id="users"></div>
|
||||||
|
@ -232,6 +232,6 @@
|
||||||
|
|
||||||
<script src="/protocol.js" defer></script>
|
<script src="/protocol.js" defer></script>
|
||||||
<script src="/scripts/toastify.js" defer></script>
|
<script src="/scripts/toastify.js" defer></script>
|
||||||
<script src="/sfu.js" defer></script>
|
<script src="/galene.js" defer></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -1,12 +1,12 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<title>SFU</title>
|
<title>Galène</title>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<link rel="stylesheet" href="/common.css">
|
<link rel="stylesheet" href="/common.css">
|
||||||
<link rel="stylesheet" href="/mainpage.css">
|
<link rel="stylesheet" href="/mainpage.css">
|
||||||
<link rel="stylesheet" type="text/css" href="/sfu.css"/>
|
<link rel="stylesheet" type="text/css" href="/galene.css"/>
|
||||||
<link rel="author" href="https://www.irif.fr/~jch/"/>
|
<link rel="author" href="https://www.irif.fr/~jch/"/>
|
||||||
<!-- Font Awesome File -->
|
<!-- Font Awesome File -->
|
||||||
<link href="/css/fontawesome.min.css" rel="stylesheet" type="text/css">
|
<link href="/css/fontawesome.min.css" rel="stylesheet" type="text/css">
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<div class="home">
|
<div class="home">
|
||||||
<h1 id="title" class="navbar-brand">SFU</h1>
|
<h1 id="title" class="navbar-brand">Galène</h1>
|
||||||
|
|
||||||
<form id="groupform">
|
<form id="groupform">
|
||||||
<label for="group">Group:</label>
|
<label for="group">Group:</label>
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<footer class="signature">
|
<footer class="signature">
|
||||||
<p><a href="https://www.irif.fr/~jch/software/sfu/">Unnamed SFU</a> by <a href="https://www.irif.fr/~jch/" rel="author">Juliusz Chroboczek</a>
|
<p><a href="https://www.irif.fr/~jch/software/galene/">Galène</a> by <a href="https://www.irif.fr/~jch/" rel="author">Juliusz Chroboczek</a>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<script src="/mainpage.js" defer></script>
|
<script src="/mainpage.js" defer></script>
|
||||||
|
|
|
@ -14,6 +14,6 @@
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"protocol.js",
|
"protocol.js",
|
||||||
"sfu.js"
|
"galene.js"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"sfu/group"
|
"galene/group"
|
||||||
)
|
)
|
||||||
|
|
||||||
type GroupStats struct {
|
type GroupStats struct {
|
||||||
|
|
|
@ -21,10 +21,10 @@ import (
|
||||||
|
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
|
|
||||||
"sfu/diskwriter"
|
"galene/diskwriter"
|
||||||
"sfu/group"
|
"galene/group"
|
||||||
"sfu/rtpconn"
|
"galene/rtpconn"
|
||||||
"sfu/stats"
|
"galene/stats"
|
||||||
)
|
)
|
||||||
|
|
||||||
var server atomic.Value
|
var server atomic.Value
|
||||||
|
@ -267,7 +267,7 @@ func groupHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
serveFile(w, r, filepath.Join(StaticRoot, "sfu.html"))
|
serveFile(w, r, filepath.Join(StaticRoot, "galene.html"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func publicHandler(w http.ResponseWriter, r *http.Request) {
|
func publicHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
Loading…
Reference in a new issue