当前位置:   article > 正文

公网视频流访问之webrtc-streamer_webrtcstreamer

webrtcstreamer

前言

之前两篇帖子

  • 视频流调试过程(海康威视+Kurento)
  • 使用Kurento提供公网视频流
    分别解决了从rstp视频流转码到页面播放和kurento的网络穿透的问题。但是吧,在我这次的具体方案中,它还是有个很讨厌的地方,就是需要https。而因为是政府项目,政府又因为很多麻烦的审核问题不想申请域名,这里就总是会出现一个看上去很吓人的安全警告。虽然无伤大雅,但是领导看见了总是会想一想的,说不定就给不少人找了很多麻烦。
    后来,我的同事发现了另一个项目webrtc-streamer 这个项目也是基于webtrc的。但是,和kurento不同的是,它就是针对从摄像头拉流的这个事情做的。从我们实际调试的效果上来说,确实比kurento要快一些。不过这是次要的,重要的是它不需要https。或许kurento也不需要,但是至少我现在不知道怎么操作。本文将会记录webtrc-streamer的安装调试过程,部分从前涉及的操作将会提到但不会再次详细记录,可以在上面两篇博客中查到。

安装配置

webrtc-stream的安装是使用docker的。
拉去镜像

sudo docker pull mpromonet/webrtc-streamer
  • 1

启动镜像

sudo docker run -itd -p 8000:8000 --name webrtc-streamer mpromonet/webrtc-streamer
  • 1

然后呢,你会发现这东西没法用。经过我同事的测试,这样操作仅仅是在使用本机docker的时候可用,一旦放到局域网中就不可用了。我们需要给它配置穿透服务。启动指令如下:

sudo docker run -itd -p 8000:8000 --name webrtc-streamer mpromonet/webrtc-streamer  -tkurento:kurento@穿透服务IP:3478  -s穿透服务IP:3478
  • 1

后面加的两个参数就是对stun和turn服务的配置。stun和turn就是和我们在 使用Kurento提供公网视频流 中配置的穿透服务。但是配置文件中,设置的用户名密码是kurento:kurento

前端调用

与之前kurento不同,我们这里不需要一个websocket服务,是直接和webtrc-streamer服务进行通信的。上面我们docker配置的端口是8000。所以,我们可以直接通过js调用就可以将视频播放集成到我们的项目中。具体的我都写在了一个html页面中,源码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="/js/adapter.js"></script>
    <script src="/js/webrtcstreamer.js"></script>
</head>
<body>
<div id="play_div">

</div>
<script>
    var webRtcServerList = [];

    var urls=[
        '你的rtsp流地址'
    ];
    var rsurl='http://webtrc-streamer服务地址:8000/';

    function plays(idx){
        var videoelt = document.createElement("video");
        var vi_tag='videoTag_'+idx;
        videoelt.id = vi_tag;
        videoelt.muted = true;
        videoelt.width=500;
        videoelt.height=600;
        videoelt.controls=true;
        videoelt.title='videoTag_'+idx;
        document.getElementById ("play_div").appendChild(videoelt);
        var webRtcServer = new WebRtcStreamer(vi_tag,rsurl);
        webRtcServer.connectrstp(urls[idx]);
        webRtcServerList[idx]=webRtcServer;
    }
    window.onload= function() {
       for(var i=0;i<urls.length;i++){
           plays(i);
       }
    }
    window.onbeforeunload = function() {
        for(var i=0;i<webRtcServerList.length;i++){
            webRtcServerList[i].disconnect();
        }
    }
</script>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

代码中引用的两个js文件在下载文件的html和/html/lib文件夹下。
webtrc-streamer0.6.5
可以下载linux版本的,里面直接就能看到相关文件。

到此,公网web播放视频流的问题,暂时告一段落,希望不要让我再重启这个话题了。

后记

果然没有那么顺利,还是要重新开启这个话题。原因是我在产线服务器上安装turnserver启动后,日志提示客户端登录错误。于是打算用docker启动运行,排除环境因素。经过一系列的折腾后,最终使用docker的方式倒是很简单,先说成功的吧:

docker run -d --network=host --name=coturn -v /usr/local/etc:/usr/local/etc coturn/coturn -c /usr/local/etc/turnserver.conf
  • 1

然后,说说这里的坑。

网络映射

在docker hub的说明中,网络映射分两种,端口映射和直接使用host映射。开始,我使用的端口映射。然后,直接影响了我连入产线环境的vpn访问。可能是由于做了大量udp端口映射导致这些端口被占用了吧,所以最后还是用了host映射。

配置

虽然使用docker,但是配置还是原来的配置不能变。这里有两个注意点

  • 文件夹映射:注意命令里的-v参数和值。这里将里外的目录映射成一样的,这样我就不用改配置文件了。
  • 指明启动参数:我添加的启动参数就是最后那段-c和之后的内容。就是指明使用哪个配置文件启动。倒不是说必须指明,而是原有的docker镜像中默认待的cmd中动态获取了external-ip并指定了进去。我的产线环境应该是有多个公网ip出口的,所以这里就可能发生错误。自己配置了参数后,原来带了的参数也就默认失效了,这个才是重点。

更换webtrc-streamer端口

是的,在我的产线中没有映射出去8000端口,所以启动的时候要将8000端口转为8443端口。经过我测试,不能直接用docker的端口映射,还是要改变配置文件中的监听端口。具体指令如下:

docker run -itd -p 8443:8443 --name webrtc-streamer mpromonet/webrtc-streamer -H0.0.0.0:8443  -穿透服务用户名密码@穿透服务IP:穿透服务端口  -s穿透服务IP:穿透服务端口
  • 1

歇会儿,有问题再更新吧

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/394576
推荐阅读
相关标签
  

闽ICP备14008679号