流媒体协议之WebRTC简易服务器搭建20230726

流媒体协议之WebRTC简易服务器搭建

1.简介

         由于官网的peerconnection_server和apprtc对SDP以及登录流程有特定要求,不便于调试自己实现的WebRTC,所以计划自己搭建服务器,网上开源的服务器有很多:licode/janus/kurento/mediasoup/jitsi等等,但是这些服务器的搭建又比较复杂,而自己的需求只是需要一个信令服务器(局域网内的),该服务器的功能是将设备的SDP和Candidate信息发给浏览器,然后浏览器就可以设备通信上,由此自己设计了一个简易服务器,便于使用该服务器是运行在WIINDOWS平台的。

         该服务器分为两个部分:

  1. 和浏览器通信

和浏览器通信需要HTTP+HTML+JAVASCRIPT,这样浏览器通过访问网页,再通过网页上的javascript语句实现WebSocket和服务器打通。

  1. 和设备通信

和设备通信直接采用最简单的TCP协议,即服务器监听一个端口,然后设备连上这个端口后直接发送SDP信息。服务器收到SDP信息后直接转发给浏览器。

         这样,当浏览器收到SDP后,双方就可以进行打洞,以及流媒体数据传输等操作。

2.环境搭建

2.1.HTTP服务器搭建   

2.1.1.方案1----Python实现方式

Python实现HTTP服务最简单只要在资源文件(html文件)所在目录敲个命令就可以了:

python -m http.server 80

但是实测这样有问题,在非本机上进行页面访问会失败,遂采用了方案2

 

2.1.2.方案2---Apache实现方式

下载Apache源码后,需要进行如下配置:

1.配置安装路径

修改conf目录下的httpd.conf文件,将路径改为自己的安装路径:

 

 

2.配置资源文件路径

即配置html文件所在的路径,如下所示:

 

 

配置后直接去bin目录下执行命令:httpd -k start 即可。

 

如果出现如下的错误提示(提示端口冲突):

 

 

则需要修改两个配置文件:

1.修改conf目录下的httpd.conf文件extra httpd-ahssl.conf

在文件的232行修改成自己希望的http端口,一般是80如果运行不出现上述错误(端口冲突)即可

 

 

2.修改conf/extra目录下的httpd-ahssl.conf文件

在文件的18行修改成自己希望的https端口,一般是8080如果运行不出现上述错误(端口冲突)即可

 

 

 

2.2.浏览器页面设计

要让浏览器访问信令服务器,除了需要前面搭建HTTP服务器,还需让浏览器访问资源文件(html文件),这样浏览器内才有内容。

由于前面配置HTTP服务器的时候已经指定了资源目录所在路径,所以只需要把index.html文件放到指定目录即可。

 

Index.html就是让浏览器访问的内容,其内容如下:

 

 

很简单,只有一个视频框,和两个按钮,其效果如下:

 

 

注意其引入了js/main.js文件,这个就是浏览器的控制代码了,其实现参见3.2。

3.源码实现

3.1.和设备通信

1.接收设备的SDP信息

和设备通信采用TCP协议,服务器启动是就会去监听9898端口(也是stun端口):

 

 

当有数据接受到时,则认为是SDP数据,然后保存下来

 

 

2.发送浏览器的SDP和Candidate

浏览器和服务器是采用WebSocket通信的,当服务器收到浏览器的数据,则认为是SDP和Candidate数据,这时服务器就会通过和设备建立的TCP链接将浏览器的数据转发出去:

 

 

 

3.2.和浏览器通信

1.接受浏览器的Candidate数据

在main.js中,当用户点击call按钮就会触发start函数,start函数会通过websocket和服务器(9002端口)建立链接:

 

 

另外还绑定了ICE回调函数,即当ICE地址收集完毕后会触发回调函数,将浏览器自己的Candidate数据发送给服务器:

 

 

 

2.发送设备的SDP信息和接收浏览器的SDP信息

在建立链接的时候,设置了回调函数,当websocket收到数据时则会触发gotoffer函数,在gotoffer函数中浏览器会把收到的sdp信息设置到本地,然后产生自生的SDP信息并通过websocket发送给服务器,服务器则会把SDP通过TCP转发给设备。

 

 

这样双方交互SDP和Candidate后,就可以发起建立链接操作(P2P),以及通过建立的链接传输媒体数

3.3.编译生成

源码路径:https://github.com/fengweiyu/webrtc_server/tree/master/webrtcgateway

点击webrtcgateway.sln使用visual studio 2017打开工程编译生成即可,注意这个不依赖libnice但是依赖boost库,

boost下载路径:

https://boostorg.jfrog.io/artifactory/main/release/1.63.0/binaries/

visual studio 2017对应boost_1_63_0-msvc-14.0-,32位下载32.exe ,64位下载64.exe

4.调试方法

4.1.信令服务器

信令服务器直接通过visual studio运行即可,上面会显示客户端的ip,并打印接收到客户端的SDP和Candidate:

 

 

 

 

4.2.谷歌浏览器

4.2.1.本地日志信息

谷歌浏览器要想其生成日志,则启动时需要带参数:

 

 

这时候就会生成日志文件:

 

 

可以从中查看调试信息

 

4.2.2.页面日志信息

页面上的日志信息有两种:

1.在访问服务器时,按f12会出现console里面的信息:

 

 

 

 

可以看到浏览器收到的SDP和candidate信息。

 

2.直接在地址栏输入:chrome://webrtc-internals/

就可以到webrtc运行相关信息:

 

 

 

对比火狐的浏览器则在地址栏输入about:webrtc:

 

posted @ 2023-07-26 14:04  yuweifeng  阅读(1340)  评论(0编辑  收藏  举报