php webrtc一对一视频聊天源码-基于workerman

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示例代码。
 
注意:
这个demo并不是支持所有浏览器,一般来说谷歌浏览器是没问题的
 

23 个评论

好用,大赞啊
厉害,佩服
这个太好用了,感谢,感谢,感谢
好棒!! 可以玩对对碰了
怎么用啊?访问上面的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又运行部起来。

要回复文章请先登录注册