WebRTC服务器——Licode 环境搭建

系统配置

阿里云服务器

Ubuntu 14.04.5 LTS

Docker 环境搭建

在一台空的机器上搭建docker环境,先要安装docker,执行下面的命令即可:

apt-get update
apt-get install docker.io

执行下面的shell脚本:

#!/bin/sh

MIN_PORT=30000;
MAX_PORT=30050;
docker run --name licode -p 3000:3000 -p $MIN_PORT-$MAX_PORT:$MIN_PORT-$MAX_PORT/udp -p 3001:3001 -p 8080:8080 -e "MIN_PORT=$MIN_PORT" -e "MAX_PORT=$MAX_PORT" -e "PUBLIC_IP=your_ip_address" lynckia/licode

没错任何错误的话,licode服务会自动运行起来,查看port:

root@test:/git/docker# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 865/sshd
tcp6 0 0 :::8080 :::* LISTEN 4732/docker-proxy
tcp6 0 0 :::3000 :::* LISTEN 4496/docker-proxy
tcp6 0 0 :::3001 :::* LISTEN 4856/docker-proxy

有几点注意

  1. 需要把相关端口在阿里云服务器上打开,这里用到的端口有:
  • TCP 端口:8080 3000 3001
  • UDP 端口:30000/30050 UDP端口需要按照官方文档写,我自己开始使用了另外一个范围的端口,死活跑不起来。
  1. 不要用国外的服务器,这点当初没有注意到,开始在一台香港的服务器上搭建,一直报一个TURN服务器的问题,后来在国内的机器上的试了一下才通过,应该是TURN服务器穿透的时候有问题。

最后可以在Chrome或者火狐浏览器中输入地址:

http://your_ip_address:3001

作者在一台Mac和一台andorid上测试的,看一下效果,就不露脸了~~

编译环境搭建

先按照官方文档的步骤操作:

克隆代码

git clone https://github.com/lynckia/licode.git
cd licode

安装依赖

安装Licode依赖的组件:

./scripts/installUbuntuDeps.sh

安装Licode

安装LIcode的各个组件:

./scripts/installNuve.sh
./scripts/installErizo.sh

安装实例

./scripts/installBasicExample.sh

配置环境

因为是在阿里云服务器上搭建环境,有些关于服务器地址的配置需要修改,在licode_config.js中把下面的字段改成阿里云服务器的外网IP或者域名:

config.erizoController.publicIP = 'your_ip_address';
config.erizoController.hostname = 'your_ip_address';
config.erizoAgent.publicIP = 'your_ip_address'; //default value: ''

改一下网卡的名字,一般都是eth0:

config.erizoAgent.networkinterface = 'eth0'; //default value: '':w

运行Licode

启动Licode服务:

./scripts/initLicode.sh

启动Licode实例:

./scripts/initBasicExample.sh

关于配置的一些问题

在浏览器里面输入下面的URL之后:

http://your_ip_address:3001

浏览器会报下面的错误:

ICE failed, add a TURN server and see about:webrtc for more details

看一下licode的配置文件licode_config.js,配置ICE server的地方:

 config.erizoController.iceServers = [{'url': 'stun:stun.l.google.com:19302'}]; // default value: [{'url': 'stun:stun.l.google.com:19302'}]

只有一个STUN服务器链接,看来是需要自己添加一个TURN服务器,作者自己在本地搭建了一个coturn服务器,具体流程可以参考此链接,作者采用的是编译安装。

配置coturn服务

在网络上搜索了很多资料来配置coturn,很多都没有成功,下面是作者自己机器上的配置:

#如果多网卡,记得此处设置为和你所用监听的IP相对应的eth
listening-device=eth0
listening-ip=your_local_address
external-ip=your_external_address
listening-port=3478
relay-device=eth0
min-port=30000
max-port=30050
Verbose
fingerprint
#webrtc需要使用此选项
lt-cred-mech
#use-auth-secret
#static-auth-secret=123456
#之前turnadmin中-r参数的值,此处要对应
realm=demo
stale-nonce
#可以添加用户名和密码
user=demo:123456 #测试期间可以使用example/etc中的pem,自己计算的话需要用到openssl,方法为: #sudo openssl req -x509 -newkey rsa:2048 -keyout /etc/ turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes #填写pem目录即可,如
#cert=/root/cert/_cert.pem
cert=/root/cert/mycert.pem
#pkey=/root/cert/_pkey.pem
pkey=/root/cert/mycert.key
no-loopback-peers
no-multicast-peers
mobility
no-cli

关于如何添加用户名和密码,如何配置证书需要自行解决。

启动coturn服务

执行下面的命令:

turnserver -c path/turnserver.conf

碰到下面一堆log不要惊慌,这不是错误的log,只是在监听事件:

1112: timer_event_handler: timeout 0xc449b0: timer_handler
1113: timer_event_handler: timeout 0xc461b0: rtcp_map_timeout_handler
1113: timer_event_handler: timeout 0x7f2acc001c90: timer_handler
1113: timer_event_handler: timeout 0x7f2acc002ea0: timer_timeout_handler
1113: timer_event_handler: timeout 0x7f2ac4001c90: timer_handler
1113: timer_event_handler: timeout 0x7f2ac4002ea0: timer_timeout_handler
1113: timer_event_handler: timeout 0x7f2ac8001d30: timer_handler

修改Licode配置文件

添加了turn 选项:

config.erizoController.iceServers = [{'url': 'stun:stun.l.google.com:19302'},{'url':'turn:your_external_address:3478','username':'demo','credential':'123456'}]; //

最后重启licode服务和实例,在地址栏在此输入地址,如果请求TURN穿透,coturn服务会有类似下面的log:

86: read_client_connection:4436:start
86: read_client_connection: data.buffer=0x7f26040033ec, data.len=100
86: session 000000000000000005: peer 10.0.42.1 lifetime updated: 300
86: session 000000000000000005: realm <demo> user <demo>: incoming packet CREATE_PERMISSION processed, success
86: write_client_connection:4220:start
86: write_client_connection: prepare to write to s 0x7f2604028170
86: write_client_connection:4243:end
86: read_client_connection:4542:end
86: udp_server_input_handler:666:end
86: udp_server_input_handler:628:start
86: read_client_connection:4436:start
86: read_client_connection: data.buffer=0x7f26040033ec, data.len=140
86: handle_turn_send:2916:start
86: handle_turn_send:3011:end
86: session 000000000000000005: realm <demo> user <demo>: incoming packet SEND processed, success
86: udp_server_input_handler:666:end
86: udp_server_input_handler:628:start
86: read_client_connection:4436:start
86: read_client_connection: data.buffer=0x7f260401816c, data.len=140

浏览器控制台上有时会有下面的log:

  ICE failed, your TURN server appears to be broken, see about:webrtc for more details

这是你的turnserver没有配置好,如果连接成功,最终浏览器控制台会有下面的链接成功的log:

DEBUG:  Event: ice-state-change erizo.js:28:39
DEBUG: Event: icestatechanged erizo.js:28:39
INFO: 341271403301651300 - iceConnectionState: connected erizo.js:28:39
DEBUG: Event: onAddStream erizo.js:28:39
DEBUG: Event: stream-added erizo.js:28:39
DEBUG: Event: signaling_message_erizo

最后放一个搭建好的licode环境链接:

webrtc实验田

WebRTC服务器——Licode 环境搭建的更多相关文章

  1. 阿里云(ECS)Centos服务器LNMP环境搭建

    阿里云( ECS ) Centos7 服务器 LNMP 环境搭建 前言 第一次接触阿里云是大四的时候,当时在校外公司做兼职,关于智能家居项目的,话说当时俺就只有一个月左右的 php 后台开发经验(还是 ...

  2. 【Python】部署上手App后端服务器 - Linux环境搭建安装Python、Tornado、SQLAlchemy

    基于阿里云服务器端环境搭建 文章目录 基于阿里云服务器端环境搭建 配置开发环境 安装 Python 3.8.2 安装 Tornado 安装 MySQL 安装 mysqlclient 安装 SQLAlc ...

  3. 【Hadoop基础教程】1、Hadoop之服务器基础环境搭建(转)

    本blog以K-Master服务器基础环境配置为例分别演示用户配置.sudo权限配置.网路配置.关闭防火墙.安装JDK工具等.用户需参照以下步骤完成KVMSlave1~KVMSlave3服务器的基础环 ...

  4. openfire服务器开发环境搭建

    2017-07-26 更新:直接获取最新版源码,就不会报错了,而且可支持的插件多,老版本的openfire几乎没有可用的官方插件. 系统及软件环境: MAC OSX EI Capitan 10.11. ...

  5. SVN服务器的环境搭建(图文并茂)

    SVN服务器的搭建与使用 本章读完,就可以创建代码版本库,传送门 https://www.cnblogs.com/zzpython/p/13348009.html TortoiseSVN 是 Subv ...

  6. FTP服务器 Serv-u 环境搭建

    一.安装 *Windows 10 *Serv-u Windows-v15.1.2 *Mysql Mysql 5.7 安装成功后开始配置serv-u. 二.配置 1.新建域(test) 点击新建域,开始 ...

  7. Linux服务器运行环境搭建(三)——MySQL数据库安装

    官网:http://www.mysql.com/ 官网下载地址:http://dev.mysql.com/downloads/mysql/ 说明:官网下载页面的“Select Platform” 选择 ...

  8. Linux服务器运行环境搭建(四)——Tomcat安装

    官网地址:http://tomcat.apache.org 官网下载地址(Tomcat6):http://tomcat.apache.org/download-60.cgi,Windows下载wind ...

  9. Linux服务器运行环境搭建(二)——Redis数据库安装

    官网地址:http://redis.io/ 官网下载地址:http://redis.io/download 1. 下载Redis源码(tar.gz),并上传到Linux 2. 解压缩包:tar zxv ...

随机推荐

  1. gcc编译器命令使用详解

    1.gcc包含的c/c++编译器gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什么意思:))一般c程序就用gcc编译,c++程序就用g++编译 ...

  2. 【洛谷P4054】计数问题

    题目大意:维护 N*M 个点,每个点有三个权值,支持单点修改,查询矩形区间内权值等于某个值的点的个数. 题解:矩阵可以看成两个维度,权值为第三个维度,为一个三维偏序维护问题.发现第三维仅仅为单点修改和 ...

  3. 高级Linux运维工程师必备技能(扫盲篇)

    高级Linux运维工程师必备技能(扫盲篇) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在了解文件系统之前,我们要学习一下磁盘存储数据的方式,大家都知道文件从内存若要持久化存储的 ...

  4. H3C交换机端口安全技术之端口隔离的应用

    H3C交换机端口安全技术---端口隔离的应用 相信大家所在公司都会有财务部门,普通员工和领导,网络工程师在配置的时候为了安全考虑,会用一些硬件上自身支持的功能区做一些安全措施.为了方便说明需求,我特意 ...

  5. Linux下Shell去除空行的方法

    1.用grep命令 grep -v “^$” 文件名 2.用sed命令 cat 文件名 | sed ‘/^$/d' 3.用awk命令 cat 文件名 | awk ‘{if($0!=”")pr ...

  6. java日期相关

    JAVA中获得一个月最大天数的方法 参考博客:http://www.cnblogs.com/relucent/p/4566582.html Calendar 类是一个抽象类,为日历字段之间的转换提供了 ...

  7. idea中的常用快捷键

    idea中常用的快捷键以及一些奇淫技巧  ,  加快我们的开发效率 !!! 知道类名查找你本地以的类  (你pom中依赖的类+你自己创建的类)------------->    ctrl+shi ...

  8. Linux 命令详解(二)awk 命令

    AWK是一种处理文本文件的语言,是一个强大的文本分析工具.之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Fami ...

  9. idea_2018.1.5版本的激活使用

    1:步骤help中找到register,然后按如下截图操作 注册码: K71U8DBPNE-eyJsaWNlbnNlSWQiOiJLNzFVOERCUE5FIiwibGljZW5zZWVOYW1lIj ...

  10. .Net进阶系列(15)-异步多线程(线程的特殊处理和深究委托赋值)(被替换)

    1. 线程的异常处理 我们经常会遇到一个场景,开启了多个线程,其中一个线程报错,导致整个程序崩溃.这并不是我们想要的,我需要的结果是,其中一个线程报错,默默的记录下,其它线程正常进行,保证程序整体可以 ...