美文网首页
web端摄像头直播解决方案

web端摄像头直播解决方案

作者: 十号楼 | 来源:发表于2021-03-30 14:56 被阅读0次

    1、HLS协议走 nginx + http_flv_module 方式:

    http_flv_module 是nginx的一个模块, 需要重新编译nginx;稍微省事的方法是走docker的方式

    docker镜像为: mycujoo/nginx-http-flv-module:latest

    启动docker命令:docker run -p 8080:80 -p 1965:1965 -p 8181:8181 -p 1935:1935 mycujoo/nginx-http-flv-module:latest

    前端支持flv的html

    
    <!DOCTYPE html>
    
    <html>
    
    <head>
    
      <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    
      <title>flv.js demo</title>
    
      <style>
    
        .mainContainer {
    
          display: block;
    
          width: 1024px;
    
          margin-left: auto;
    
          margin-right: auto;
    
        }
    
        .urlInput {
    
          display: block;
    
          width: 100%;
    
          margin-left: auto;
    
          margin-right: auto;
    
          margin-top: 8px;
    
          margin-bottom: 8px;
    
        }
    
        .centeredVideo {
    
          display: block;
    
          width: 100%;
    
          height: 576px;
    
          margin-left: auto;
    
          margin-right: auto;
    
          margin-bottom: auto;
    
        }
    
        .controls {
    
          display: block;
    
          width: 100%;
    
          text-align: center;
    
          margin-left: auto;
    
          margin-right: auto;
    
        }
    
      </style>
    
    </head>
    
    <body>
    
      <p class="mainContainer">
    
        <VIDEO name="videoElement" id="videoElement" class="centeredVideo" controls muted autoplay width="1024" height="576">
    
          Your browser is too old which doesn't support HTML5 video.
    
        </VIDEO>
    
      </p>
    
      <script src="https://cdnjs.cloudflare.com/ajax/libs/flv.js/1.3.2/flv.min.js"></script>
    
      <script>
    
        function start() {
    
          if (flvjs.isSupported()) {
    
            var videoElement = document.getElementById('videoElement');
    
            var flvPlayer = flvjs.createPlayer({
    
              type: 'flv',
    
              // url: 'http://172.24.0.5:8088/live?port=1935&app=hls&stream=robot7-210'
    
              url: 'http://localhost:8080/live?port=1935&app=hls&stream=tt'
    
            });
    
            flvPlayer.attachMediaElement(videoElement);
    
            flvPlayer.load();
    
            flvPlayer.play();
    
          }
    
        }
    
        document.addEventListener('DOMContentLoaded', function () {
    
          start();
    
        });
    
      </script>
    
    </body>
    
    </html>
    
    

    最后使用 ffmpeg 推流
    ffmpeg -re -i ~/Downloads/test.mp4 -c copy -f flv rtmp://localhost:1935/hls/tt

    这种方式的延迟较高, 底层是缓存一段段视频帧,再传输给前端。

    2、webrtc的方式

    webrtc + srs 流媒体服务器方式

    <video class="" controls autoplay style="" id="video">
    <script src="/static/js/jswebrtc.min.js"></script>
    <script>
    var video = document.getElementById('video');
    var url = 'webrtc://127.0.0.1/live/livestream';
    var player = new JSWebrtc.Player(url, { video: video, autoplay: true,  });
    </script>
    

    jswebrtc.min.js 从github中找

    srs 流媒体也是直接走docker 获取
    docker run --name srs -p 1935:1935 -p 8080:8080 -p 1985:1985 -p 8000:8000/udp --env CANDIDATE={LOCALIP} registry.cn-hangzhou.aliyuncs.com/ossrs/srs:v4.0.55 objs/srs -c conf/rtc.conf
    注意:这儿CANDIDATE需要设置成本机的对外ip地址。

    最后是 使用 ffmpeg 进行rtmp推流。

    webrtc 这种方式延迟较低, 毫秒或1秒左右级别

    相关文章

      网友评论

          本文标题:web端摄像头直播解决方案

          本文链接:https://www.haomeiwen.com/subject/skhghltx.html