...
http_api {
enabled on
listen 1985
}
stats {
network 0
}
rtc_server {
enabled on
# Listen at udp://8000
listen 8000
candidate 192.168.8.97
}
vhost __defaultVhost__ {
rtc {
enabled on
rtmp_to_rtc on
}
.....
}
其实webrtc拉流,需要用到两个端口,一个是1985,一个是8000(udp)
如果在配置文件中1985改成了1986,则
http://192.168.8.97:8080/players/rtc_player.html,中拉流地址:webrtc://192.168.8.97:1986/live/stream
真正的webrtc的流程:
1)、webrtc客户端通过API接口/rtc/v1/play/通知SRS服务端创建WebRTC拉流连接,访问的是以下 http://192.168.8.97:1986/rtc/v1/play/
2)、rtc交互过程,在日志中会有记录,
RTC remote offer: 客户端请求
RTC local answer: ...... udp 2130706431 192.168.8.97 8000 typ host generation 0\r\n
返回给客户端的具体地址与端口号 (8000就是前面配置的端口)
特别注意,在docker中配置,在端口映射时,特别要注意,这个8000端口号,一定要与外网的端口号一样。比如同时改成30049,才能正常拉流。
参考:
https://blog.csdn.net/adkada1/article/details/120590921
https://blog.csdn.net/adkada1/article/details/120590944
https://blog.csdn.net/adkada1/article/details/120590949
WebRTC经过这么多年的发展,目前已经比较成熟的协议之一,播放也比较稳定,协议也已经成为了RFC,相应的开源项目也越来越多,但是基于WebRTC协议的部署简单,性能强悍,功能强大流媒体服务器的项目还比较稀少。之前了解到的服务器比如Mediasoup,Janus,Medooze ,要么就是设计复杂,接入成本要,要么就是性能较差,还就是多种语言结合,学习成本较高。 而SRS聚焦视频相关,功能专一,语言使用了高性能的c++,并且支持Rtmp转Webrtc等其他强大的功能的媒体服务器。
1.源码编译安装运行SRS
使用这个命令开启RTC支持
2.SRS常用命令
3.配置nginx代理
若不需要浏览器推流,可以不用设置nginx代理,使用localhost访问
注意:your 代表需要配置你自己的域名信息,由于使用浏览器推流必须使用https协议,所以我这边配置了证书
4.访问配置的域名
访问nginx配置的网址 https://webrtc.yourhost.com/
出现如下内容,则服务端架设成功
虽然整片文章看起来不复杂,流程很简单。但是官网的文档中的知识点比较分散,所以大家要想快速的搭建的话就参考我这篇文章
WebRTC需要通过长链接查找到通信双方,然后通过 peer to peer 的方式传输音频数据。
WebRTC中最主要的就是一个叫做 PeerConnection 的对象,这个是WebRTC中已经封装好的对象。每一路的音视频会话都会有唯一的一个 PeerConnection 对象,WebRTC通过这个 PeerConnection 对象进行视频的发起、传输、接收和挂断等操作。
PeerConnection中包含的属性如下:
PeerConnection 中还包含了一些方法:
RTCSessionDescription 类型中包含了两个属性:
A向B发起通信请求
首先WebRTC需要一个信令服务器,也就是一个socket链接用来发起视频通信,发送WebRTC中的 offer 和回复 answer 。
如何搭建一个简单的socket服务器,可以找我的这篇文章《》,也可以是用webSocket搭建信令服务器。
WebRTC需要打洞服务器(一个 stun ,一个 turn )来穿透防火墙等,我们需要配置打洞服务器:
WebRTC由于是未来的一种即时通信的标准,所以目前在Chrome、Firefox和Opera浏览器中有内置插件,均提供一个全局的PeerConnection类。
创建PeerConnection的对象:
创建时需要传入打洞服务器的配置信息,如果不穿入打洞服务器的配置信息,则只可以在内网中使用实时音频通讯。
由于PeerConnection是全局的,所以我们可以通过另外的一种方式进行创建:
如何判断浏览器是否支持WebRTC:
WebRTC也提供了一个全局单例来获取本地的音视频信息:
GetUserMedia需要传入三个参数,第一个参数为配置信息,第二个参数为获取成功的回调,第三个参数为获取失败的回调。
获取到视频流之后
创建一个offer并发送给指定的对象:
创建offer时要同时发送打洞服务器配置信息,WebRTC给了一个监听:
返回的参数中有一个 candidate 属性,便是打洞服务器的配置信息。
音频通话请求是通过socket发来的,需要通过socket去监听。
如果收到了offer,那么需要将offer存到自己的peerConnection中,并且创建一个answer发送回对方。
将offer存入peerConnection中:
创建一个answer并返回给对方:
如果收到了打洞服务器的配置信息,那么需要将打洞服务器的配置信息存入到 peerConnection 中:
发送给对方answer后便可以等待接受对方的数据流了:
至此,整个简单的WebRTC的流程就完成了
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)