首页 > 其他分享 >使用H5 实现 websocket 实现视频通讯 延迟较大

使用H5 实现 websocket 实现视频通讯 延迟较大

时间:2024-03-07 09:13:10浏览次数:32  
标签:function websocket 实现 app H5 ws new video recorder

发送端

<div>
    <canvas id="canvas"></canvas>
    <video id="srcvideo"></video>
</div>
<div id="xs"></div>
<button id="startBtn" onclick="setRecorder(format);">开始</button>
<button id="stopBtn" onclick="stop()">结束</button>

<script>
    let stream
    let recorder
    ws = new WebSocket('ws://127.0.0.1:8081')

    navigator.mediaDevices.getUserMedia({video: true}).then(s => stream = s)
    format = 'video/webm;codecs=vp8'
    function setRecorder(format) {
         recorder = new MediaRecorder(stream, {
            mimeType: format
        });
        recorder.ondataavailable = e => {
            ws.send(e.data)
        }
        recorder.start(10);
    }

    function stop() {
        recorder.stop();
    }

</script>

接收端

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
</head>
<body>
<video controls autoplay ></video>
<script>
    var video = document.querySelector('video');
    var sourceBuffer

    var mediaSource = new MediaSource;
    video.src = URL.createObjectURL(mediaSource);
    mediaSource.addEventListener('sourceopen', sourceOpen);
    function sourceOpen (_) {
        sourceBuffer = this.addSourceBuffer('video/webm;codecs=vp8');
        sourceBuffer.addEventListener('updateend', function (_) {})//video.play();});
    };

    ws=new WebSocket('ws://127.0.0.1:8081')
    ws.onopen= function () {}
    ws.onmessage=function onMessage(event){
        var reader = new FileReader();
        reader.onloadend = function(e){	sourceBuffer.appendBuffer(reader.result);}
        reader.readAsArrayBuffer(event.data);
    }

</script>
</body>
</html>

服务端

const express = require('express');
const app = express();

app.use(express.static('client'));
const wsInstance = require('express-ws')(app);

app.ws('/', ws => {
    ws.on('message', data => {
        wsInstance.getWss().clients.forEach(server => {
            if (server !== ws) {
                server.send(data);
            }
        });
    });
});

app.listen(8081);

标签:function,websocket,实现,app,H5,ws,new,video,recorder
From: https://www.cnblogs.com/guanchaoguo/p/18058116

相关文章

  • 宕机后,Redis如何实现快速恢复?
    Redis作为非常火热的内存数据库,其除了具有非常高的性能之外,还需要保证高可用,在故障发生时,尽可能地降低故障带来的影响,Redis也提供了完善的故障恢复机制:哨兵。下面就来具体来看看Redis的故障恢复是如何做的,以及其中的原理。部署模式Redis在部署时,可以采用多种方式部署,每种部署方......
  • 手机H5考试页面
    <!DOCTYPEhtml><html><head><metacharset="utf-8"/><metaname="viewport"content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"/><metaname="appl......
  • HTML+CSS 实现简单打印页
    代码:<!DOCTYPEhtml><html><head><title>分页打印示例</title><style>/*打印样式*/@mediaprint{.page{page-break-after:always;/*每个.page元素后都分页*/}}</style>......
  • 通过canvas实现鼠标绘图的注意点
    问题情景:想设置全屏canvas时,直接修改了canvas的css样式为width:100%。出现问题:绘图时坐标不对应且有明显放大感。问题原因:css中width是将canvas尺寸直接放大,而实际需要的是修改canvas本身的尺寸。解决办法:直接定义canvas.width和canvas.height。我用的是vue3所以用了onMount......
  • 费马素性检验(python实现)
    费马素性检验:给定奇整数n>=3和安全参数t1、随机选取整数b,(b,n)=1,2<=b<=n-22、计算r=b的n-1次方(modn)3、如果r!=1,则n是合数4、上述过程重复t次以下是python代码,如发现错误,请跟博主联系importrandom#n>=3且n是奇整数n=int(input())t=int(input())defgcd(a,b):wh......
  • Golang使用Goroutine实现筛素数
    //Copyright2009TheGoAuthors.Allrightsreserved.//UseofthissourcecodeisgovernedbyaBSD-style//licensethatcanbefoundintheLICENSEfile.packagemainpackagemainimport"fmt"//Sendthesequence2,3,4,...tochannel&......
  • CS144_2020_Fall_lab0(实现开始,准备工作)
    碎碎念开头:三年竞赛无人问,一朝面试全盘输,大三的寒假过的并不是那么舒服,准备春招实习,筹备项目,面对满纸漏洞的简历,决定去做一下这个闻名已久的计算机网络实验:CS144-基于UDP实现TCP。虽说已经做完了,但是对于其中一些知识点扔不是很牢固,有些测试点仅仅也是面向样例编程,不明所以,仅以此......
  • 简单实现邮件模板功能
    系统中经常有需要发送提醒邮件的需求,而且邮件类型和内容往往又不同,有些还需要跟业务字段做关联。这种情况下,就需要用到邮件模板功能,可以通过在模板中定义业务字段标记,通过模板引擎或自定义代码来实现这些字段的填充。下面是一个自己写的简单的,字符串替换方式实现的邮件模板功能。......
  • 基于FPGA的二维DCT变换和逆变换verilog实现,包含testbench
    1.算法运行效果图预览    数据导入到matlab显示图像 2.算法运行软件版本vivado2019.2 matlab2022a 3.算法理论概述       离散余弦变换(DiscreteCosineTransform,DCT)是一种广泛应用于图像和信号处理领域的变换技术。在图像处理中,DCT常被用于图像压......
  • WEBRTC 局域网 自己搭建信令服务 实现视频通讯
    信令服务constapp=require('express')();constwsInstance=require('express-ws')(app);app.ws('/',ws=>{ ws.on('message',data=>{ wsInstance.getWss().clients.forEach(server=>{ if(server!==ws)......