AppRTC Configuration On Ubuntu 16.04

I tried again and again and again to successfully configure AppRTC on Ubuntu 16.04...These are all my hard steps.

1. Get Google APP Engine

Please download here. Then add export PATH=$PATH:$yourpath/google_appengine to /~.bashrc, and run source ~/.bashrc.

2. Configure AppRTC Room Server

Please download here.
Edit$yourpath/apprtc/out/app_engine/apprtc.py, and change all wss: and https: to ws: and http:. (Maybe something has been changed by me in the download files.)
Edit$yourpath/apprtc/out/app_engine/constants.py and modify the file like this

# WEBRTC_URL is your server ip.
TURN_BASE_URL = 'http://WEBRTC_URL'
TURN_URL_TEMPLATE = '%s/turn?username=%s&key=%s'
CEOD_KEY = '4080218913'

# Dictionary keys in the collider instance info constant.
WSS_INSTANCE_HOST_KEY = 'host_port_pair'
WSS_INSTANCE_NAME_KEY = 'vm_name'
WSS_INSTANCE_ZONE_KEY = 'zone'
WSS_INSTANCES = [{
    WSS_INSTANCE_HOST_KEY: 'WEBRTC_URL:8089',
    WSS_INSTANCE_NAME_KEY: 'wsserver-std',
    WSS_INSTANCE_ZONE_KEY: 'us-central1-a'
}, {
    WSS_INSTANCE_HOST_KEY: 'WEBRTC_URL:8089',
    WSS_INSTANCE_NAME_KEY: 'wsserver-std-2',
    WSS_INSTANCE_ZONE_KEY: 'us-central1-f'
}]

All the files modified are from the out directory, which is different from other suggestions that we should modify files in src, because apprtc room server will run by out directory directly, you can also modify src and rebuild apprtc by nodejs, of course.

3. Use a Independent Collider

Many blogs suggest installing collider server by GO, but it may be a long and tough way to finish, you can download a compiled one here, you need no GO and you don't to have to step over the GFW.

Enter $yourpath/collider/src/collidermain and 'nano main.go', modify corresponding slot to

// WEBRTC_URL is your server ip.
var roomSrv = flag.String("room-server", "http://WEBRTC_URL:8080", "The origin of the room server")\

4. Install Coturn server

Install

Run the followings to install coturn

git clone https://github.com/coturn/coturn
cd coturn
./configure
make
make install

or you can download a conturn server from http://turnserver.open-sys.org/downloads/v4.4.5.3/turnserver-4.4.5.3-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz
and

tar -zxvf turnserver-4.4.5.3-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz
cat INSTALL  # it is a readme file, follow it
sudo apt-get install gdebi-core
sudo gdebi coturn_4.2.2.2-1_i386.deb

Create Config File

Make a file named turnserver.conf adding these

# WEBRTC_URL is your server ip.
listening-device=eth1
listening-ip=WEBRTC_URL
min-port=59000
max-port=65000
relay-device=eth1
relay-ip=WEBRTC_URL
Verbose
fingerprint
lt-cred-mech
use-auth-secret
static-auth-secret=4080218913
stale-nonce
realm=WEBRTC_URL
cert=/etc/turn_server_cert.pem
pkey=/etc/turn_server_pkey.pem
no-loopback-peers
no-multicast-peers
mobility
no-cli

Generate Key

Generate some required keys

sudo openssl req -x509 -newkey  rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes

Prepare a TURN REST API

Make a file named turn.js adding these

// WEBRTC_URL is your server ip.
var express = require('express');
var crypto = require('crypto');
var app = express();

var hmac = function(key, content){
    var method = crypto.createHmac('sha1', key);
    method.setEncoding('base64');
    method.write(content);
    method.end();
    return method.read();
};

app.get('/turn', function(req, resp) {

var query = req.query;
var key = '4080218913'; 

if (!query['username']) {
    return resp.send({'error':'AppError', 'message':'Must provide username.'});
} else {
    var time_to_live = 600;
    var timestamp = Math.floor(Date.now() / 1000) + time_to_live;
    var turn_username = timestamp + ':' + query['username'];
    var password = hmac(key, turn_username);

    return resp.send({
        username:turn_username,
        password:password,
        ttl:time_to_live,
        "uris": [
            "turn:WEBRTC_URL:3478?transport=udp",
            "turn:WEBRTC_URL:3478?transport=tcp",
            "turn:WEBRTC_URL:3479?transport=udp",
            "turn:WEBRTC_URL.233:3479?transport=tcp"
            ]
    });
}

});

app.listen('3033', function(){
    console.log('server started');
});

5. Nginx

Run apt-get install nginx to install nginx conveniently, and modify the config file default in /etc/nginx/sites-available.

# WEBRTC_URL is your server ip.
server {

        listen       80 default;

        server_name WEBRTC_URL;

        location /turn
        {
                proxy_pass http://WEBRTC_URL:3033;
                proxy_set_header Host $host;
        }

        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'POST,GET';
        add_header 'Access-Control-Allow-Headers' 'x-session-id,user_id,x-requested-with,content-type';

        access_log  /etc/access.log;
}

Run nginx -s reload to check and restart.

6. Start Services

Firstly, you should know you PC inner net ip address, you can get it by ifconfig -a | grep 'inet ' | cut -d ':' -f 2 |cut -d ' ' -f 1 | grep -v '^127', and if you want a internet WebRTC, you need a internet ip address to replace all WEBRTC_URL above. If not (you just want to test WebRTC in your inner net), you can use your PC inner net ip address instead.
You can write a shell like

#!/bin/sh

local_url=$(ifconfig -a | grep 'inet ' | cut -d ':' -f 2 |cut -d ' ' -f 1 | grep -v '^127')
webrtc_url=WEBRTC_URL # Change to your url here

nohup dev_appserver.py --port 8091  --admin_port 8050 --admin_host $local_url --host $local_url --skip_sdk_update_check=yes $yourpath/apprtc/out/app_engine/ 2>stderr1.log &
nohup $yourpath/collider/bin/./collidermain -port=8089 -tls=false -room-server=http://$webrtc_url 2>stderr2.log &
nohup nodejs $yourpath/turn.js >/dev/null 2>stderr3.log &
nohup turnserver -c $yourpath/turnserver.conf -o -v >/dev/null 2>stderr4.log
exit 0

to start all the service.

Open your browser and enter http://WEBRTC_URL:8091(Firefox or 360 explorer (Chrome mode) are required.).

Done, Done, Done! Welcome to communicate with me if you have any problem~

你可能感兴趣的:(AppRTC Configuration On Ubuntu 16.04)