workerman作为信令服务器,实现webrtc一对一视频聊天。完整示例源码在附件中。
在线demo:
webrtc 在线demo
webrtc源码 github地址:https://github.com/walkor/workerman-webrtc 不要吝啬你的小星星哦
注意:
webrct要求网站是基于https的,http无法开启摄像头,所以需要设置https证书。
配置:
假设你的域名为 webrtc.workerman.net,则config.php中配置类似如下
<?php
// 信令服务器(Signaling Server)地址,需要用wss协议,并且必须是域名
$SIGNALING_ADDRESS = 'wss://webrtc.workerman.net:8877';
$SSL_CONTEXT = array(
// 更多ssl选项请参考手册 http://php.net/manual/zh/context.ssl.php
'ssl' => array(
// 请使用绝对路径
'local_cert' => '磁盘路径/server.pem', // 也可以是crt文件
'local_pk' => '磁盘路径/server.key',
'verify_peer' => false,
'allow_self_signed' => true, //如果是自签名证书需要开启此选项
)
);
启动:
linux系统运行 php start.php start -d 启动
windows系统双击start_for_win.bat启动
访问:
浏览器访问 域名.com:9988
进入视频聊天页面
其它:
源码中web目录可以使用其它webserver运行,比如apache nginx。
如果使用nginx代理wss,需要注释掉config.php中$SSL_CONTEXT设置, wss相关设置参考手册 http://doc.workerman.net/faq/secure-websocket-server.html
GITHUB:
webrtc github地址:https://github.com/walkor/workerman-webrtc 不要吝啬你的小星星哦
注意github下载的源码需要用composer安装workerman才能运行,附件中是完整的webrtc示例代码。
注意:
如果有问题,可以尝试装一个turn服务器,比如 https://github.com/coturn/coturn
安装完coturn后 web/room.php页面js 代码里设置类似如下:
iceServers: [{
urls: [
'turn:域名.com:3478?transport=udp',
'turn:域名.com:3478?transport=tcp'
],
username: 'xxx',
credential: 'xxx'
}]
这个demo并不是支持所有浏览器,一般来说谷歌浏览器是没问题的
33 个评论
var configuration = {
iceServers: [{
urls: 'turn:域名',//免费的stun服务器换成自己搭建的turn
},{
urls: 'turn:域名',//
credential:'用户名',
username:'密码'
}]
};
csdn博客地址:
地址:https://blog.csdn.net/polarGW/article/details/70226634
下载turn包地址 https://blog.csdn.net/qq_32435729/article/details/78729093
安装 turn
先安装所需依赖库:要不然编译会报错:(我安装的时候没有到sudo,直接yum)
sudo yum install openssl-devel
sudo yum install sqlite
sudo yum install sqlite-devel
sudo yum install libevent
sudo yum install libevent-devel
sudo yum install postgresql-devel
sudo yum install postgresql-server
sudo yum install mysql-devel
sudo yum install mysql-server
或者是:
sudo yum install mysql - serve(中间加空格不同版本安装命令不一样试一下)
sudo yum install hiredis
sudo yum install hiredis-devel
下载 turn 包:
官网:http://turnserver.open-sys.org/downloads/
这里我们选取CenterOS最新版本v4.5.0.6对应CenterOS7.2下载之后是一个后缀为.gz的压缩包。
wget http://turnserver.open-sys.org/downloads/v4.5.0.6/turnserver-4.5.0.6-CentOS7.2-x86_64.tar.gz
解压:
tar -zxvf turnserver-4.5.0.6-CentOS7.2-x86_64.tar.gz
#转到其目录下
cd turnserver-4.5.0.6
#如果里面有install.sh文件,直接执行./install.sh或者chmod a+x install 生成install文件 。
./install.sh
修改配置文件,配置文件在/etc/turnserver目录下turnserver.conf,执行:
cd /etc/turnserver/
vim turnserver.conf
#监听端口可以不设置会默认的使用3478
listening-port=3478
#listening-ip,注意必须是你的内网IP地址如:
listening-ip=10.10.xx.xx
#relay-ip可以不设置,默认会使用你的外网ip地址作为转发包的中继地址,建议不设置,使用默认就可以:
relay-ip=10.10.xx.xx
#external-ip,注意必须使用你的外网IP地址如:
external-ip=133.110.xx.xx
#设置用户名及密码,这个是作为TURN服务器使用必须设置的,可以设置多个
user=user:password 或者使用ssh也是可以的
user=user:passKey
#realm,目前没发现有什么用,可设置可不设置:
realm=companyName.com.cn
#turndb数据库位置,/var/db/turndb
以上就是配置的主要内容,更详细的配置可以直接查看turnserver.conf,里面的注释很详细,可以设置tls,mysql,redis,mongodb等等内容这里不做详细解释了。
另外:STUN和TURN的区别,turn服务器是一个特殊的stun服务器,turn具备了stun的功能,并且具备stun不具备的中继转发功能,我们按照的服务可以不提供turn功能只作为stun使用,打开turnserver.conf中的stun-only即可。
启动和关闭TURN服务:
启动命令:
turnserver -v -r 外网ip -a -o -c /etc/turnserver/turnserver.conf
关闭命令:
执行 cat /var/run/turnserver/turnserver.pid 或者 cat /var/tmp/turnserver.pid
找到进程编号,例如:2059
执行kill 2059 结束进程。
测试地址:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
测试样例:
点击gather candidates按钮测试,正确结果如下:
如果没有产生3种类型的ip地址则配置失败(该服务可能会用到80端口,在公司机房服务器配置没有成功,最后用阿里云配置成功)。