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并不是支持所有浏览器,一般来说谷歌浏览器是没问题的
好用,大赞啊
厉害,佩服
这个太好用了,感谢,感谢,感谢
好棒!! 可以玩对对碰了
怎么用啊?访问上面的DEMO,两个终端输入相同的房间号,只能看到自己。
NotFoundError: Requested device not found 怎么解决
chrome、firefox可以跑起来。但是国内谷歌核心类的浏览器会报错:.addTrack is not a function只能看到本地。难道是把webrtc阉割了?
.addTrack 并不是所有浏览器都支持,已经做了兼容,重新下载一份试下
已经完美运行,谢谢大神
运行了,但有点问题,一、没有声音,二、只能看到本地视频,远程的看不到,请问是什么原因?
用不了两个人会黑屏
大神,我想问一下,这个可以支持移动端的浏览器使用吗?我记得webrtc说是可以兼容移动端的浏览器的
你好,请问一下,用手机的4G网谷歌浏览器访问就闪退黑屏,要怎么解决啊,是不是stun的问题啊
应该是兼容性问题,可以自己尝试解决下
我用turn解决了,不知道对不对,但是现在可以用两个手机的4G网链接视频通话了。下面是我安装的整个过程。
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端口,在公司机房服务器配置没有成功,最后用阿里云配置成功)。
请问一下,直播要怎样实现啊
还有个问题就是连接的时候,有时连的上,有时连接不上,要刷新
手机端与pc端通信时remoteVideo没有stream
我也碰到这个问题:NotFoundError: Requested device not found,有人知道怎么处理吗
感谢大佬
怎么改成一对多的呢
safari 浏览器下本地可以看到,连接上,远程的就黑屏 ,是编码不对吗
请问这个demo的nginx怎么配置啊,https默认端口使443,访问demo地址带9988的话,提示连接已重置,但是将nginx的ssl监听端口改成9988,demo又运行部起来。
老铁,怎么视频对话啊?配置好后点进入房间,一边进去了,另一边又黑屏了
用手机来访问
windows系统双击start_for_win.bat启动后,本机的可以打开摄像头运行,其它电脑或手机进入房间后就黑屏了
如何看到对方呢?我用手机打开的 打开后只是看到本地的自己 用了两部手机都是这样 房间号也相同
为什么只能看到自己
大神,我提一个问题, 我所有的都搭建好了,但是我遇到一个难题,在本地时,语音正常, 搭建到服务器,语音就有特别大的噪音,啸叫,回声, 想提问如何解决 系统是debian9 php7.4.6 workerman4 安装了turn,希望大神能回答一下
噪音这个不是服务端该解决的问题。一般是客户端采集声音的时候要通过一些算法消除噪音回声这些,不过这些一般都是客户端封装死了的,我们很难去修改的。
我们只是在内网使用,也是必须域名吗?
另外一个手机怎么访问喃
相同房间就可以
后端怎么交互的?楼主能发我一份看看么
你解决了吗 我用workerman交互只能看到自己看不到对方
线上演示地址不能访问了
好了
手机上不能直接调用摄像头聊天吗
手机没试过。这个只是个demo,如果哪里有问题需要自己找资料调试下。
好的
手机也是可以的
composer install 阿里云镜像会报错
改成 腾讯的就可以了
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/
这个可以读取局域网内的摄像头吗