day22-----3.1-----coturn安装以及报错“coturn/src/apps/relay/netengine.c:316:对‘SSL_CTX_up_ref’未定义的引用“

1 安装步骤

我的系统是Ubuntu16.04。

1.1 安装coturn需要的依赖

我先安装了下面两个依赖。

sudo apt‐get install libssl‐dev 
sudo apt‐get install libevent‐dev

1.2 编译安装coturn

然后我正常的安装。

git clone https://github.com/coturn/coturn 
cd coturn 
./configure 
make 
sudo make install

结果发现,执行./configure 还是正常的生成Makefile,但是当我在make的时候,报错了,大概意思是说动态库没有找到。
day22-----3.1-----coturn安装以及报错“coturn/src/apps/relay/netengine.c:316:对‘SSL_CTX_up_ref’未定义的引用“_第1张图片
day22-----3.1-----coturn安装以及报错“coturn/src/apps/relay/netengine.c:316:对‘SSL_CTX_up_ref’未定义的引用“_第2张图片

那只好往对应的目录中手动放动态库呗,将openssl的so,顺便静态库也放进去,例如放上去上面我的截图的/usr/local/lib目录中,但是又报了另一个错误,也是openssl库没找到的意思,去coturn的官网看issue也没有找到对应的解决方法。
弄着弄着一晚上三个多小时没了。。。实在没思路了,洗澡睡了。

然后第二天起来再百度百度看看,结果也遇到一个和我一样的问题。

1.3 解决上面的问题

大概意思就是可能与coturn的版本相关,我看他是使用camke加上自定义模块去找到对应的动态库,并且我这里执行./configure 也found对应的so,我也不知道为啥没链进去,所以就换了个下载方法。不用git clone去下载,使用wget去下载tar算了。

# 1. 提前安装相关依赖
sudo apt‐get install libssl‐dev 
sudo apt‐get install libevent‐dev
sudo apt-get install sqlite3
sudo apt-get install build-essential//和gcc,g++相关的软件包
sudo apt-get install gcc//实际上安装上面的包后已经自动安装了gcc,g++,可能与ubuntu版本有关吧,我的是16.04
sudo apt-get install g++

# 2. 安装coturn
wget https://github.com/coturn/coturn/archive/4.5.1.1.tar.gz
tar -zxvf 4.5.1.1.tar.gz
cd coturn-4.5.1.1
./configure
make
sudo make install

如果gcc、g++没有安装或者版本较低,可能会出现以下错误:
day22-----3.1-----coturn安装以及报错“coturn/src/apps/relay/netengine.c:316:对‘SSL_CTX_up_ref’未定义的引用“_第3张图片

安装成功的截图。
day22-----3.1-----coturn安装以及报错“coturn/src/apps/relay/netengine.c:316:对‘SSL_CTX_up_ref’未定义的引用“_第4张图片

1.4 验证是否真的成功

如果成功了,可以通过which turnserver验证。如果出现路径即为成功。

which turnserver

在这里插入图片描述

或者使用下面的方法验证:

# nohup是重定向命令,输出都将附加到当前目录新生成的 nohup.out 文件中
# 命令后加 & ,后台执行起来后按 ctr+c,不会停止
# 注意:-u后面的是你的linux 账号和密码,例如你是root登陆的话,就是:root:你的root密码
sudo nohup turnserver ‐L 0.0.0.0 ‐a ‐u tanyiyuan:123456 ‐v ‐f ‐r nort.gov &
sudo lsof -i:3478

day22-----3.1-----coturn安装以及报错“coturn/src/apps/relay/netengine.c:316:对‘SSL_CTX_up_ref’未定义的引用“_第5张图片
停止coturn服务可以使用kill -9。例如我上面lsof后看到pid。

sudo kill -9 5125
#此时再次查看程序已经停止了。
lsof -i:3478

参考文章:
CentOS上webRTC的coturn服务器部署。

2 验证coturn服务器是否能成功穿透打洞和中继

如果不验证的话,那么有可能会存在这一种情况,就是你本地部署好coturn服务器并且测试是成功的,但是一拿到公网后,就失灵了,原因在于,即使coturn在局域网内是失效的,你在局域网也是能进行正常的音视频传输,因为局域网是互通的,所以你在局域网能测试成功,并不能代表coturn服务器就是正常工作的。所以验证还是必要的。

2.1 验证conturn的stun的打洞功能(即是否能通过端口进行映射)

首先打开以下网址。

https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

按如下步骤输入内容,其中1是你刚刚下载的coturn服务器的虚拟机ip或者云服务器ip,coturn的默认端口是3478。
第2、3步则是你虚拟机的用户和密码,就是上面登陆coturn服务器时,-u选项的账号、密码。
然后依次点击4和5即可。
day22-----3.1-----coturn安装以及报错“coturn/src/apps/relay/netengine.c:316:对‘SSL_CTX_up_ref’未定义的引用“_第6张图片
成功的话,会出现done,说明你的coturn的stun打洞功能是正常工作的。
day22-----3.1-----coturn安装以及报错“coturn/src/apps/relay/netengine.c:316:对‘SSL_CTX_up_ref’未定义的引用“_第7张图片

2.2 验证conturn的turn的中继转发功能

在确认是上面是能打洞之后,还需要验证turn的中继转发功能。
首先将stun的服务器去掉先,先点击一下那一行,然后按remove即可。
day22-----3.1-----coturn安装以及报错“coturn/src/apps/relay/netengine.c:316:对‘SSL_CTX_up_ref’未定义的引用“_第8张图片

然后按照上面类似的做法,只不过需要将协议换成turn和ICE options换成delay。
如下图:
day22-----3.1-----coturn安装以及报错“coturn/src/apps/relay/netengine.c:316:对‘SSL_CTX_up_ref’未定义的引用“_第9张图片

2.3 疑问

上面虽然看到,stun和turn都返回了Done,但是为什么他报了701返回。我百度了一下,有人说是谷歌浏览器的问题。
但我验证了一下,应该和浏览器没关,因为我用谷歌,微软自带的Microsoft Edge,搜狗,ie,火狐都不行,火狐测stun的时候没报错,但是测turn的时候报错了。 ie更离谱,点击添加服务器没反应。
并且有人和我的操作一样,使用搜狗浏览器是能正常的,没有报错701。

故留下此疑问。

然后又跟踪了一下这个疑问,有人说是正常的,具体看下面文章。
coturn NAT穿透服务器搭建。
How to create and configure your own STUN/TURN server with coturn in Ubuntu 18.04。
https://github.com/webrtc/samples/issues/1227。这一篇似乎很多国外的开发者遇到了和我类似的问题,并且谷歌官方也没有回应这个错误,那我们就不理他这个bug先了,避免浪费太多时间。

你可能感兴趣的:(音视频流媒体开发,linux,webrtc)