Open Source im professionellen Einsatz
Linux-Magazin 08/2013
482

Web RTC über das Internet

Das typische Anwendungsszenario von Web RTC über das Internet macht einen Signaling-Server erforderlich. Der leitet gemäß Abbildung 1 die Konfigurationsdaten weiter. Das folgende Beispiel verwendet für diese Daten das Json-Format. Jede Nachricht entspricht einem Javascript-Objekt mit zwei Komponenten: »command« beschreibt den Nachrichtentyp, »data« nimmt die Nutzdaten auf.

Die Anwendung verwendet drei unterschiedliche Nachrichtentypen: Zur Eröffnung einer Peer-to-Peer-Verbindung dient eine Nachricht des Typs »offer« (Listing 7). Zur Bestätigung der Verbindungseröffnung schickt die Gegenstelle eine Nachricht vom Typ »answer« zurück. Beide Signale enthalten im Datenfeld die jeweils lokale Sitzungsbeschreibung. Übermittelt ICE einen neuen Kandidaten, teilt es dies durch Senden einer Nachricht vom Typ ICE mit. In diesem Fall enthält »data« den Kandidaten.

Listing 7

Offer im Json-Format

01 {
02   "command":"offer",
03   "data": {
04     "sdp":"v=0\r\no=- 3077950714 2 IN IP4 127.0.0.1 [...] \r\n",
05     "type":"offer"
06   }
07 }

Signaling-Server

Für den Signaling-Server kommt ebenfalls Javascript zum Einsatz, jedoch Server-seitig auf Node.js. Eine ausführliche Einführung in den Node.js-Server bietet ein Artikel aus einem früheren Linux-Magazin [11]. Unter Ubuntu Linux installiert man Node.js, aktuell ist Version 0.8, und seinen Paketmanager Npm mit dem Befehl »sudo apt-get install nodejs npm« . Der Signaling-Server benötigt zudem die Module Connect ab Version 2.7.2 und Websocket ab Version 1.0.8.

Da Websocket seinerseits von »node-gyp« abhängt, installiert der Anwender zunächst dieses mit »npm install -g node-gyp« und anschließend Websocket und Connect mit dem Kommando »sudo npm install connect websocket« .

Listing 8 zeigt den Code für den Signaling-Server in Node.js. Die Zeilen 2 bis 4 binden die benötigten Module ein. Die Variable »channels« (Zeile 5) speichert die verbundenen Clients in einem Feld. In der darauf folgenden Zeile nimmt die Variable »app« eine um das Modul »static« erweiterte Connect-Anwendung auf. Static bewirkt, dass Node.js auf HTTP-Anfragen wie »http://localhost:6655/webrtc.html« die Datei »webrtc.html« aus dem Verzeichnis »../« zurückgibt.

Listing 8

Signaling-Server für Node.js

01 #!/usr/bin/env node
02 var http = require('http'),
03     connect = require('connect'),
04     WebSocketServer = require('websocket').server,
05     channels = [],
06     app = connect().use(connect.static('../'));
07
08 var wsServer = new WebSocketServer({
09   httpServer:new http.createServer(app).listen(6655)
10 });
11
12 wsServer.on('request', function(req) {
13   var thisChannel = req.accept('webrtc', req.origin);
14   channels.push(thisChannel);
15   thisChannel.on('message', function(msg) {
16     channels.forEach(function(channel) {
17       if (channel !== thisChannel) {
18         console.log(msg.utf8Data)
19         channel.sendUTF(msg.utf8Data);
20       }
21     });
22   });
23   thisChannel.on('close', function() {
24     channels = channels.filter(function(channel) {
25    return (channel !== thisChannel)?true:false;
26     });
27   });
28 });

Der Websocket-Server bindet in Zeile 9 ein HTTP-Server-Objekt ein. Die Variable »app« als Argument im Aufruf der Methode »createServer()« übergibt die Anwendungslogik der Connect-Anwendung an das HTTP-Server-Objekt. Die Methode »listen()« lässt den HTTP-Server auf Port 6655 lauschen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • ECMA-Script 6

    Der kommende Sprachstandard ECMA-Script 6 beseitigt viele historische Javascript-Eigenheiten. Die bisher vermissten Klassen, Module und Default-Parameter erleichtern das Coden vor allem den Umsteigern von anderen Programmiersprachen.

  • Signal erlaubt verschlüsselte Videochats

    Der verschlüsselnde Messenger Signal bietet nun für Android und I-OS offiziell Ende-zu-Ende-verschlüsselte Videotelefonate an. Das Feature hat die Betaphase beendet, zugleich versprechen die Signal-Macher eine bessere Qualität für Sprachanrufe.

  • HTML-5-DRM

    Im Rahmen von HTML 5 erhalten Webbrowser die Fähigkeit, Inhalte zu verschlüsseln. Das Sicherheitsfeature hat sich nun zum Politikum entwickelt, denn die Anbieter von digitalen Inhalten möchten es für Digital Rights Management (DRM) verwenden. Hier ein freier Blick auf die Technik.

  • React

    Vom Unternehmen Facebook kommt das quelloffene Javascript-Framework React, das Weboberflächen geschickt mit Datenschätzen verknüpft. Insbesondere die Renderfunktion macht sich dabei nützlich.

  • Meteor

    Javascript sowohl im Browser als auch auf dem Server: Das Webframework Meteor verspricht Anwendungen aus einem Guss, die sich dank vieler fertiger Pakete rasch programmieren lassen.

comments powered by Disqus

Ausgabe 07/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.