Nextcloud/Talk/HPB/Janus: Unterschied zwischen den Versionen
Erscheinungsbild
	
	
Keine Bearbeitungszusammenfassung  | 
				|||
| (50 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
'''Nextcloud/Talk/HPB/Janus''' - WebRTC-Server  | |||
= Beschreibung =  | |||
== WebRTC ==  | |||
* WebRTC ('''Web''' '''R'''eal-'''T'''ime '''C'''ommunication), Web Echtzeitkommunikation.   | |||
* WebRTC ist ein offener Standard, der durch eine Sammlung von Kommunikationsprotokollen und Programmierschnittstellen definiert wird.   | |||
* Dieser Standard ermöglicht es Clients (wie beispielsweise Webbrowsern) eine '''direkte''' Verbindung zueinander aufzubauen.   | |||
* Damit die Clients voneinander erfahren, wie sie die direkte Verbindung zueinander aufbauen können, sind die Dienste eines Signaling-Servers notwendig.  | |||
; Vorteile  | |||
* Keine Softwareinstallation notwendig  | |||
** wie beispielsweise es bei Skype oder Zoom  | |||
* Schonung von Server-Ressourcen  | |||
** WebRTC läuft innerhalb der Browser-Sandbox  | |||
** keine Plug-ins oder andere Prozesse notwendig  | |||
** dadurch sicherer  | |||
Hier konfigurieren wir den STUN-Server (coturn), aktivieren die Option   | == Janus WebRTC gateway ==  | ||
= Installation =  | |||
== Installation ==  | |||
 # '''apt install janus'''  | |||
= Syntax =  | |||
== Argumente ==  | |||
== Optionen ==  | |||
= Konfiguration =  | |||
; /etc/janus/janus.jcfg  | |||
Hier konfigurieren wir den STUN-Server (coturn), aktivieren die Option "Full Trickle" und tragen den API-Key ein:  | |||
  # ...  |   # ...  | ||
  stun_server = "turn.meinedomain.de"  |   stun_server = "turn.meinedomain.de"  | ||
| Zeile 16: | Zeile 37: | ||
  # ...  |   # ...  | ||
; /etc/janus/janus.transport.http.jcfg  | |||
Das Interface wird dabei auf   | Das Interface wird dabei auf "lo" gesetzt:  | ||
  # ...  |   # ...  | ||
  interface = "lo"    |   interface = "lo"    | ||
  # ..  |   # ..  | ||
; /etc/janus/janus.transport.websockets.jcfg  | |||
  # ...  |   # ...  | ||
  ws_interface = "lo"  |   ws_interface = "lo"  | ||
  # ...  |   # ...  | ||
Mit einer Janus-Instanz kann auf verschiedenen Wegen interagiert werden  | |||
* HTTP  | |||
* Websockets  | |||
* [https://www.rabbitmq.com/ RabbitMQ]  | |||
* ...   | |||
Für jede dieser Möglichkeiten werden im Verzeichnis /etc/janus eigene Konfigurationsdateien angelegt.  | |||
 # '''cp -i /etc/janus/janus.jcfg.sample /etc/janus/janus.jcfg'''  | |||
;/etc/janus/janus.jcfg  | |||
 ...  | |||
 stun_server = "cloud.foxtom.de"  | |||
 stun_port = 5349  | |||
 ...  | |||
 full_trickle = true  | |||
 ...  | |||
 turn_server = "cloud.foxtom.de"  | |||
 turn_port = 5349  | |||
 ...  | |||
 turn_rest_api_key = "'''<api-Key>'''"  | |||
 ...  | |||
; /etc/janus/janus.transport.http.jcfg   | |||
 ...  | |||
 interface = "lo"   | |||
 ...  | |||
; /etc/janus/janus.transport.websockets.jcfg  | |||
Janus-Server soll nur das lokale Interface abhören  | |||
 ...  | |||
 ws_interface = "lo"  | |||
= Anwendung =  | |||
== Dienst starten ==  | |||
* Der Janus-Server kann mit dem Befehl systemctl start/stop manuell gestartet bzw. angehalten werden.   | |||
* Eine Ausgabe eventueller Fehler erhält man jedoch nicht.   | |||
* Zur Fehlersuche läßt sich das Programm jedoch manuell starten, indem mit der Option '''debug-level''' festgelegt werden kann, wie detailliert die Ausgabe erfolgen soll.  | |||
 # '''janus --debug-level=<1..7>'''  | |||
 # '''systemctl start janus'''  | |||
== Status prüfen ==  | |||
* Ist ein entsprechendes Janus-PlugIn nicht installiert, oder dessen Konfigurationsdatei nicht nicht vorhanden, wird eine Fehlermeldung erzeugt.   | |||
* In der Konfigurationsdatei /etc/janus/janus.jcfg lässt sich die Verwendung des PlugIns für RabbitMQ abstellen, indem die entsprechende Zeile auskommentiert wird:  | |||
 # You can choose which of the available transports should be enabled or  | |||
 # not. Use the 'disable' directive to prevent Janus from loading one  | |||
 # or more transport: use a comma separated list of transport file names  | |||
 # to identify the transports to disable. By default all available  | |||
 # transports are enabled and loaded at startup.  | |||
 transports: {  | |||
         '''#'''disable = "libjanus_rabbitmq.so"  | |||
 }  | |||
 ...  | |||
 # '''systemctl status janus'''  | |||
 ● janus.service - Janus WebRTC gateway  | |||
    Loaded: loaded (/lib/systemd/system/janus.service; enabled; vendor preset: enabled)  | |||
    Active: active (running) since Wed 2021-01-06 23:53:56 CET; 12s ago  | |||
      Docs: https://janus.conf.meetecho.com/docs/index.html  | |||
  Main PID: 10220 (janus)  | |||
     Tasks: 24 (limit: 2296)  | |||
    Memory: 11.1M  | |||
    CGroup: /system.slice/janus.service  | |||
            └─10220 /usr/bin/janus -o  | |||
 Jan 06 23:53:57 signaling janus[10220]: '''[ERR] [config.c:janus_config_parse:191]   -- Error reading configuration file 'janus.transport.rabbitmq.cfg'... error 2 (No such file or directory)'''  | |||
 Jan 06 23:53:57 signaling janus[10220]: RabbitMQ SSL support disabled  | |||
 Jan 06 23:53:57 signaling janus[10220]: '''[WARN] RabbitMQ support disabled (Janus API)'''  | |||
 Jan 06 23:53:57 signaling janus[10220]: '''[WARN] RabbitMQ support disabled (Admin API)'''  | |||
 Jan 06 23:53:57 signaling janus[10220]: '''[WARN] RabbitMQ support disabled for both Janus and Admin API, giving up'''  | |||
 Jan 06 23:53:57 signaling janus[10220]: '''[WARN] The 'janus.transport.rabbitmq' plugin could not be initialized'''  | |||
 Jan 06 23:53:57 signaling janus[10220]: '''[WARN] libnice version outdated: 0.1.14 installed, at least 0.1.15 recommended'''  | |||
 Jan 06 23:53:57 signaling janus[10220]: HTTP transport timer started  | |||
 Jan 06 23:54:09 signaling janus[10220]: Creating new session: 7609464843575521; 0x7f1b4c001db0  | |||
 Jan 06 23:54:09 signaling janus[10220]: Creating new handle in session 7609464843575521: 3636178337595333; 0x7f1b4c001db0 0x7f1b4c0031a0  | |||
== Debugging ==  | |||
 # '''journalctl -u janus'''  | |||
 -- Logs begin at Mon 2021-02-01 13:52:30 CET, end at Tue 2021-02-02 11:19:16 CET. --  | |||
 Feb 02 08:54:04 signaling janus[21010]: Creating new handle in session 5338086438572651: 2325140291688110; 0x7f9da4048db0 0x7f9da4133dc0  | |||
 Feb 02 08:54:04 signaling janus[21010]: [2325140291688110] Creating ICE agent (ICE Full mode, controlled)  | |||
 Feb 02 08:54:04 signaling janus[21010]: nice_agent_set_relay_info: assertion 'username' failed  | |||
 Feb 02 08:54:04 signaling janus[21010]: [WARN] Could not set TURN server, is the address correct? (2a01:4f8:231:45cd::2:5349)  | |||
 Feb 02 08:54:04 signaling janus[21010]: [ERR] [sdp-utils.c:janus_sdp_get_codec_rtpmap:779] Unsupported codec 'none'  | |||
 Feb 02 08:54:05 signaling janus[21010]: [2325140291688110] The DTLS handshake has been completed  | |||
 Feb 02 08:54:05 signaling janus[21010]: [janus.plugin.videoroom-0x7f9da41f45c0] WebRTC media is now available  | |||
 ...  | |||
=== Debug-/Loglevel einstellen ===  | |||
* Soll der Janus-Server seine Ausgaben in eine eigene Log-Datei schreiben, kann dies in der Datei /etc/janus/'''janus.jcfg''' konfiguriert werden.   | |||
* Die Angabe eines Debug-Levels ist hierbei möglich  | |||
 ...  | |||
 # The next settings configure logging  | |||
        #log_to_stdout = false                                  # Whether the Janus output should be written  | |||
                                                                                        # to stdout or not (default=true)  | |||
        #'''log_to_file''' = "/path/to/janus.log"             # Whether to use a log file or not  | |||
        '''debug_level''' = 4                                                 # Debug/logging level, valid values are 0-7  | |||
        #debug_timestamps = true                                # Whether to show a timestamp for each log line  | |||
        #debug_colors = false                                   # Whether colors should be disabled in the log  | |||
        #debug_locks = true                                             # Whether to enable debugging of locks (very verbose!)  | |||
        #log_prefix = "[janus] "                                # In case you want log lines to be prefixed by some  | |||
 ...  | |||
= Sicherheit =  | |||
= Dokumentation =  | |||
== RFC ==  | |||
== Man-Page ==  | |||
== Info-Pages ==  | |||
== Projekt ==  | |||
# https://github.com/meetecho/janus-gateway  | |||
= Links =  | |||
== Siehe auch ==  | |||
== Weblinks ==  | |||
[[Kategorie:Nextcloud/Talk]]  | |||
Aktuelle Version vom 10. August 2025, 19:53 Uhr
Nextcloud/Talk/HPB/Janus - WebRTC-Server
Beschreibung
WebRTC
- WebRTC (Web Real-Time Communication), Web Echtzeitkommunikation.
 - WebRTC ist ein offener Standard, der durch eine Sammlung von Kommunikationsprotokollen und Programmierschnittstellen definiert wird.
 - Dieser Standard ermöglicht es Clients (wie beispielsweise Webbrowsern) eine direkte Verbindung zueinander aufzubauen.
 - Damit die Clients voneinander erfahren, wie sie die direkte Verbindung zueinander aufbauen können, sind die Dienste eines Signaling-Servers notwendig.
 
- Vorteile
 
- Keine Softwareinstallation notwendig
- wie beispielsweise es bei Skype oder Zoom
 
 - Schonung von Server-Ressourcen
- WebRTC läuft innerhalb der Browser-Sandbox
 - keine Plug-ins oder andere Prozesse notwendig
 - dadurch sicherer
 
 
Janus WebRTC gateway
Installation
Installation
# apt install janus
Syntax
Argumente
Optionen
Konfiguration
- /etc/janus/janus.jcfg
 
Hier konfigurieren wir den STUN-Server (coturn), aktivieren die Option "Full Trickle" und tragen den API-Key ein:
# ... stun_server = "turn.meinedomain.de" stun_port = 5349 # ... full_trickle = true # ... turn_rest_api_key = "<Janus API-Key>" # ...
- /etc/janus/janus.transport.http.jcfg
 
Das Interface wird dabei auf "lo" gesetzt:
# ... interface = "lo" # ..
- /etc/janus/janus.transport.websockets.jcfg
 
# ... ws_interface = "lo" # ...
Mit einer Janus-Instanz kann auf verschiedenen Wegen interagiert werden
- HTTP
 - Websockets
 - RabbitMQ
 - ...
 
Für jede dieser Möglichkeiten werden im Verzeichnis /etc/janus eigene Konfigurationsdateien angelegt.
# cp -i /etc/janus/janus.jcfg.sample /etc/janus/janus.jcfg
- /etc/janus/janus.jcfg
 
... stun_server = "cloud.foxtom.de" stun_port = 5349 ... full_trickle = true ... turn_server = "cloud.foxtom.de" turn_port = 5349 ... turn_rest_api_key = "<api-Key>" ...
- /etc/janus/janus.transport.http.jcfg
 
... interface = "lo" ...
- /etc/janus/janus.transport.websockets.jcfg
 
Janus-Server soll nur das lokale Interface abhören
... ws_interface = "lo"
Anwendung
Dienst starten
- Der Janus-Server kann mit dem Befehl systemctl start/stop manuell gestartet bzw. angehalten werden.
 - Eine Ausgabe eventueller Fehler erhält man jedoch nicht.
 - Zur Fehlersuche läßt sich das Programm jedoch manuell starten, indem mit der Option debug-level festgelegt werden kann, wie detailliert die Ausgabe erfolgen soll.
 
# janus --debug-level=<1..7>
# systemctl start janus
Status prüfen
- Ist ein entsprechendes Janus-PlugIn nicht installiert, oder dessen Konfigurationsdatei nicht nicht vorhanden, wird eine Fehlermeldung erzeugt.
 - In der Konfigurationsdatei /etc/janus/janus.jcfg lässt sich die Verwendung des PlugIns für RabbitMQ abstellen, indem die entsprechende Zeile auskommentiert wird:
 
# You can choose which of the available transports should be enabled or
# not. Use the 'disable' directive to prevent Janus from loading one
# or more transport: use a comma separated list of transport file names
# to identify the transports to disable. By default all available
# transports are enabled and loaded at startup.
transports: {
        #disable = "libjanus_rabbitmq.so"
}
...
# systemctl status janus
● janus.service - Janus WebRTC gateway
   Loaded: loaded (/lib/systemd/system/janus.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2021-01-06 23:53:56 CET; 12s ago
     Docs: https://janus.conf.meetecho.com/docs/index.html
 Main PID: 10220 (janus)
    Tasks: 24 (limit: 2296)
   Memory: 11.1M
   CGroup: /system.slice/janus.service
           └─10220 /usr/bin/janus -o
Jan 06 23:53:57 signaling janus[10220]: [ERR] [config.c:janus_config_parse:191]   -- Error reading configuration file 'janus.transport.rabbitmq.cfg'... error 2 (No such file or directory)
Jan 06 23:53:57 signaling janus[10220]: RabbitMQ SSL support disabled
Jan 06 23:53:57 signaling janus[10220]: [WARN] RabbitMQ support disabled (Janus API)
Jan 06 23:53:57 signaling janus[10220]: [WARN] RabbitMQ support disabled (Admin API)
Jan 06 23:53:57 signaling janus[10220]: [WARN] RabbitMQ support disabled for both Janus and Admin API, giving up
Jan 06 23:53:57 signaling janus[10220]: [WARN] The 'janus.transport.rabbitmq' plugin could not be initialized
Jan 06 23:53:57 signaling janus[10220]: [WARN] libnice version outdated: 0.1.14 installed, at least 0.1.15 recommended
Jan 06 23:53:57 signaling janus[10220]: HTTP transport timer started
Jan 06 23:54:09 signaling janus[10220]: Creating new session: 7609464843575521; 0x7f1b4c001db0
Jan 06 23:54:09 signaling janus[10220]: Creating new handle in session 7609464843575521: 3636178337595333; 0x7f1b4c001db0 0x7f1b4c0031a0
Debugging
# journalctl -u janus -- Logs begin at Mon 2021-02-01 13:52:30 CET, end at Tue 2021-02-02 11:19:16 CET. -- Feb 02 08:54:04 signaling janus[21010]: Creating new handle in session 5338086438572651: 2325140291688110; 0x7f9da4048db0 0x7f9da4133dc0 Feb 02 08:54:04 signaling janus[21010]: [2325140291688110] Creating ICE agent (ICE Full mode, controlled) Feb 02 08:54:04 signaling janus[21010]: nice_agent_set_relay_info: assertion 'username' failed Feb 02 08:54:04 signaling janus[21010]: [WARN] Could not set TURN server, is the address correct? (2a01:4f8:231:45cd::2:5349) Feb 02 08:54:04 signaling janus[21010]: [ERR] [sdp-utils.c:janus_sdp_get_codec_rtpmap:779] Unsupported codec 'none' Feb 02 08:54:05 signaling janus[21010]: [2325140291688110] The DTLS handshake has been completed Feb 02 08:54:05 signaling janus[21010]: [janus.plugin.videoroom-0x7f9da41f45c0] WebRTC media is now available ...
Debug-/Loglevel einstellen
- Soll der Janus-Server seine Ausgaben in eine eigene Log-Datei schreiben, kann dies in der Datei /etc/janus/janus.jcfg konfiguriert werden.
 - Die Angabe eines Debug-Levels ist hierbei möglich
 
...
# The next settings configure logging
       #log_to_stdout = false                                  # Whether the Janus output should be written
                                                                                       # to stdout or not (default=true)
       #log_to_file = "/path/to/janus.log"             # Whether to use a log file or not
       debug_level = 4                                                 # Debug/logging level, valid values are 0-7
       #debug_timestamps = true                                # Whether to show a timestamp for each log line
       #debug_colors = false                                   # Whether colors should be disabled in the log
       #debug_locks = true                                             # Whether to enable debugging of locks (very verbose!)
       #log_prefix = "[janus] "                                # In case you want log lines to be prefixed by some
...