基于webrtc的一对一视频聊天(apprtc)

一、前言

项目作者:https://github.com/webrtc

成品项目:https://github.com/webrtc/apprtc

samples项目:https://github.com/webrtc/samples

搭建过程参考文章:http://www.cnblogs.com/hujihon/p/4991137.html

https://www.jianshu.com/p/c55ecf5a3fcf

说明

此项目为谷歌项目组的官方项目。apprtc为成品项目,可以编译后部署使用。samples项目为webrtc技术点的单独测试。

本文主要介绍apprtc项目的环境搭建与部署。其中“Collider”为服务端,使用GO语言编写;前端项目使用grunt(Nodejs)构建与编译;前端使用Python语言实现( Google App Engine SDK for Python); Google App Engine SDK for Python的环境搭建,需要服务器能够翻墙链接谷歌云服务器(参考文章【ssh+proxychains实现linux服务器的代理翻墙】)。

文章案例使用的服务器为阿里云linux服务,操作系统为ubuntu server 16。

二、获取项目源代码

1.登录服务器并进入指定目录:

通过ssh登录服务器

1.1.更新系统软件包:

sudo apt update
sudo apt dist-upgrade
sudo apt autoremove

1.2.进入当前用户的目录下:

cd (此案例为阿里云的ubuntu server 16,用户目录的绝对路径为"/root/")

2.从github上获取项目源代码:

sudo apt install git
git clone https://github.com/webrtc/apprtc.git

三、服务端搭建——Collider(GO语言)

1.搭建go语言的运行环境

参考文章【linux操作系统搭建GO语言运行环境

2.编译并测试collider项目

参考原文:https://github.com/webrtc/apprtc/blob/master/src/collider/README.md

2.1.获取apprtc项目源代码

cd 
git clone https://github.com/webrtc/apprtc.git

2.2.创建项目工作空间与项目源代码位置的软连接

 ln -s `pwd`/apprtc/src/collider/collider $GOPATH/src
 ln -s `pwd`/apprtc/src/collider/collidermain $GOPATH/src
 ln -s `pwd`/apprtc/src/collider/collidertest $GOPATH/src

2.3.安装项目依赖

go get collidermain 

(go的库位谷歌的库,如果想在线安装依赖,需要配置服务器翻墙,参考【ssh+proxychains实现linux服务器的代理翻墙】;也可以通过离线安装的方式安装需要的库,参考【离线安装GO语言依赖库】)

2.4.安装collidermain

go install collidermain

2.5.运行collidermain

$GOPATH/bin/collidermain -port=8089 -tls=true

2.6.测试collidermain

go test collider

3.部署collider项目

3.1.修改项目源代码

cd ~/goWorkspace/src/collidermain
vim main.go

 修改如下参数:

var tls = flag.Bool("tls", false, "whether TLS is used")    //本服务配置为非SSL,通过apache的代理,实现SSL
var port = flag.Int("port", 8090, "The TCP port that the server listens on")//服务端口
var roomSrv = flag.String("room-server", "http://127.0.0.1:8090", "The origin of the room server")//设置为本地ip,通过apache代理,提供公网服务

3.2.重新编译项目

go install collidermain

3.3.部署项目

cd /
mkdir collider
cp $GOPATH/bin/collidermain /collider

3.4.配置服务自启动

3.4.1.vim /collider/start.sh 内容如下:

#!/bin/sh -
/collider/collidermain 2>> /collider/collider.log

文件保存后设置sh文件的权限:chmod 744 /collider/start.sh

3.4.2.sudo nano /lib/systemd/system/collider.service 内容如下:

[Unit]
Description=AppRTC signalling server (Collider)

[Service]
ExecStart=/collider/start.sh
StandardOutput=null

[Install]
WantedBy=multi-user.target
Alias=collider.service

3.4.3.sudo systemctl enable collider.service

3.4.4.sudo systemctl status collider.service

3.4.5.服务启动:service collider start

服务停止:service collider stop

3.5.配置服务通过wss访问

vim /etc/apache2/sites-enabled/lidetao.com-le-ssl.conf 指定域名的配置处添加ws的代理:

ProxyPass /ws ws://127.0.0.1:8090/ws
ProxyPassReverse /ws ws://127.0.0.1:8090/ws

四、Iceserver服务端搭建——Coturn TURN

五、前端搭建——apprtc(Node+Python)

1.环境搭建

参考文章【Nodejs开发环境与生产环境安装】【Google App Engine SDK for Python的本地化安装】初始化系统环境。

2.修改项目配置项

cd ~/apprtc
vim src/app_engine/constants.py

2.1.修改wss服务地址

# Dictionary keys in the collider instance info constant.
WSS_INSTANCE_HOST_KEY = 'apprtc.3elearn.com.cn:443'  //代理后的Collider地址
WSS_INSTANCE_NAME_KEY = 'vm_name'
WSS_INSTANCE_ZONE_KEY = 'zone'
WSS_INSTANCES = [{
    WSS_INSTANCE_HOST_KEY: 'apprtc.3elearn.com.cn:443',//代理后的Collider地址
    WSS_INSTANCE_NAME_KEY: 'wsserver-std',
    WSS_INSTANCE_ZONE_KEY: 'us-central1-a'
}, {
    WSS_INSTANCE_HOST_KEY: 'apprtc.3elearn.com.cn:443',//代理后的Collider地址
    WSS_INSTANCE_NAME_KEY: 'wsserver-std-2',
    WSS_INSTANCE_ZONE_KEY: 'us-central1-f'
}]

2.2.修改ice server地址

# Enable by uncomment below and comment out above, then specify turn and stun
ICE_SERVER_OVERRIDE  = [
  {
    "urls": [
      "turn:118.190.70.27:3478?transport=udp",//coturn的访问地址
      "turn:118.190.70.27:3478?transport=tcp"//coturn的访问地址
    ],
    "username": "ling",//coturn的访问用户名
    "credential": "ling1234"//coturn的访问密码
  }
]

3.构建项目与测试启动

cd ~/apprtc/
grunt build (构建项目)
dev_appserver.py out/app_engine/ (启动项目)

4.设置项目自启动

4.1.vim ~/apprtc/start.sh 内容如下:

#!/bin/sh -
/root/google-cloud-sdk/bin/dev_appserver.py /root/apprtc/out/app_engine/

sh文件保存后,设置sh文件的权限:chmod 744 ~/apprtc/start.sh

4.2.sudo nano /lib/systemd/system/apprtc.service 内容如下:

[Unit]
Description=AppRTC signalling server (apprtc)

[Service]
ExecStart=/root/apprtc/start.sh
StandardOutput=null

[Install]
WantedBy=multi-user.target
Alias=apprtc.service

4.3.sudo systemctl enable apprtc.service

4.4.sudo systemctl status apprtc.service

4.5.服务启动:service apprtc start (启动后,谷歌云管理后台地址为:http://127.0.0.1:8000/;项目访问地址为:http://127.0.0.1:8080/)

服务停止:service apprtc stop

5.设置https代理

修改apache的配置文件

vim /etc/apache2/sites-enabled/lidetao.com-le-ssl.conf

ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/

6.代理后的bug修改

代理后,用浏览器访问网站(https),F12打开控制台,调试相应的错误。

6.1.解决代理后部分文件跨域问题

cd ~/apprtc
vim src/web_app/js/appcontroller.js

这个文件里有这样的两个函数:

AppController.prototype.pushCallNavigation_

AppController.prototype.displaySharingInfo_

分别在这两行函数内部的开头,加上如下代码:

roomLink = roomLink.replace(/http:\/\/127\.0\.0\.1:8080\//, 'https://apprtc.3elearn.com.cn/');

保存退出,然后对前端项目进行重新编译与部署。

© 2018, 李德涛博客. 版权所有.

《基于webrtc的一对一视频聊天(apprtc)》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注