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

walkor

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并不是支持所有浏览器,一般来说谷歌浏览器是没问题的
 

47439 38 14
38个评论

six

好用,大赞啊

  • 暂无评论
追梦随想

厉害,佩服

  • 暂无评论
xiuwang

这个太好用了,感谢,感谢,感谢

  • 暂无评论
blogdaren

好棒!! 可以玩对对碰了

  • 暂无评论
xiaomingtt

怎么用啊?访问上面的DEMO,两个终端输入相同的房间号,只能看到自己。

  • 暂无评论
buyer

NotFoundError: Requested device not found 怎么解决

  • 暂无评论
lazyant

chrome、firefox可以跑起来。但是国内谷歌核心类的浏览器会报错:.addTrack is not a function只能看到本地。难道是把webrtc阉割了?

  • 暂无评论
walkor

.addTrack 并不是所有浏览器都支持,已经做了兼容,重新下载一份试下

  • 暂无评论
lazyant

已经完美运行,谢谢大神

  • 暂无评论
lzh888

运行了,但有点问题,一、没有声音,二、只能看到本地视频,远程的看不到,请问是什么原因?

  • 暂无评论
zhouyunfei

用不了两个人会黑屏

  • 暂无评论
bslsky

大神,我想问一下,这个可以支持移动端的浏览器使用吗?我记得webrtc说是可以兼容移动端的浏览器的

  • 暂无评论
m14786151457

你好,请问一下,用手机的4G网谷歌浏览器访问就闪退黑屏,要怎么解决啊,是不是stun的问题啊

  • 暂无评论
walkor

应该是兼容性问题,可以自己尝试解决下

  • 暂无评论
m14786151457

我用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端口,在公司机房服务器配置没有成功,最后用阿里云配置成功)。

  • 暂无评论
m14786151457

请问一下,直播要怎样实现啊

  • 暂无评论
m14786151457

还有个问题就是连接的时候,有时连的上,有时连接不上,要刷新

  • 暂无评论
sddwt

手机端与pc端通信时remoteVideo没有stream

  • 暂无评论
toby

我也碰到这个问题:NotFoundError: Requested device not found,有人知道怎么处理吗

  • 暂无评论
nibirus

感谢大佬

  • 暂无评论
a31578462

怎么改成一对多的呢

  • 暂无评论
jiyehang

safari 浏览器下本地可以看到,连接上,远程的就黑屏 ,是编码不对吗

  • 暂无评论
不_唁

请问这个demo的nginx怎么配置啊,https默认端口使443,访问demo地址带9988的话,提示连接已重置,但是将nginx的ssl监听端口改成9988,demo又运行部起来。

  • 暂无评论
axlix

老铁,怎么视频对话啊?配置好后点进入房间,一边进去了,另一边又黑屏了

  • 暂无评论
axlix

用手机来访问

  • 暂无评论
liaojianfeng

windows系统双击start_for_win.bat启动后,本机的可以打开摄像头运行,其它电脑或手机进入房间后就黑屏了

  • 暂无评论
13673188929

如何看到对方呢?我用手机打开的 打开后只是看到本地的自己 用了两部手机都是这样 房间号也相同

  • 暂无评论
luck橙

为什么只能看到自己

  • 暂无评论
cexll

大神,我提一个问题, 我所有的都搭建好了,但是我遇到一个难题,在本地时,语音正常, 搭建到服务器,语音就有特别大的噪音,啸叫,回声, 想提问如何解决 系统是debian9 php7.4.6 workerman4 安装了turn,希望大神能回答一下

  • 暂无评论
walkor

噪音这个不是服务端该解决的问题。一般是客户端采集声音的时候要通过一些算法消除噪音回声这些,不过这些一般都是客户端封装死了的,我们很难去修改的。

  • 暂无评论
weipt

我们只是在内网使用,也是必须域名吗?

  • 暂无评论
yanyi98

另外一个手机怎么访问喃

huzhipeng

后端怎么交互的?楼主能发我一份看看么

  • 暂无评论
PHP李航

你解决了吗 我用workerman交互只能看到自己看不到对方

  • 暂无评论
会飞的鱼

线上演示地址不能访问了

Tinywan
  • 暂无评论
rui6ye

composer install 阿里云镜像会报错
改成 腾讯的就可以了

composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/

  • 暂无评论

这个可以读取局域网内的摄像头吗

  • 暂无评论
年代过于久远,无法发表评论

walkor

140441
积分
0
获赞数
0
粉丝数
2014-05-04 加入
🔝