webrtc拉流在srs中的配置

webrtc拉流在srs中的配置,第1张

配置文件

...

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的流程就完成了


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/488127.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-13
下一篇2023-06-13

发表评论

登录后才能评论

评论列表(0条)

    保存