Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

319
Visualizações
¿Es posible realizar una videollamada a través de websocket en la web sin usar WebRTC?

Quiero transmitir video (con audio) a través de websocket en una dirección sin usar el servidor STUN/TURN. ¿Es posible escribir una aplicación web de este tipo?

Los datos fluirán así:

Par A -> Servidor Websocket -> Par B

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Sí, es posible. si estas bien 0.5 s de latencia
serpentina:

 navigator.mediaDevices.getUserMedia({video:true,audio:true}).then(stream=>{ var ws,mediaRecorder; var options = { mimeType: "video/webm;codecs=opus, vp8", bitsPerSecond:5000 //quality }; function handleVideo(){ try{ mediaRecorder.stop() }catch(e){} mediaRecorder=null; mediaRecorder = new MediaRecorder(stream,options); mediaRecorder.ondataavailable =function(e) { if(e.data&&e.data.size>0) { e.data.arrayBuffer().then(buffer=>{ ws.send(buffer) }) } } mediaRecorder.start(300); } function connect(){ ws = new WebSocket("wss://yourwebsocket.com") ws.binaryType = "arraybuffer" ws.onopen=handleVideo ws.onmessage=handleVideo ws.onclose=connect } connect() }) // so onmessage function neccessary for when someone join the socket stream again, because webm format need embl header

observador:

 var media,sourceBuffer,ws; var video = document.getElementById('yourvideoid') function handleStream(e){ const buffer=e.data const data= new Uint8Array(buffer) if(data[0]===26&&data[1]===69&&data[2]===223){ if(media){ URL.revokeObjectURL(media) sourceBuffer=null; } media= new MediaSource(); video.src = URL.createObjectURL(media); video.onloadedmetadata=function(){ video.muted=false video.play() } media.onsourceopen=function(){ sourceBuffer= media.addSourceBuffer("video/webm;codecs=opus, vp8"); sourceBuffer.appendBuffer(buffer) } } else { if(!media)return; sourceBuffer.appendBuffer(buffer) } } function connect(){ ws = new WebSocket("wss://yourwsserver.com") ws.binaryType = "arraybuffer" ws.onmessage=handleStream ws.onclose=connect } connect() // we fetch data from websocket then add data to video buffer

servidor nodejs:

 const EventEmitter = require('events'); const https = require('https'); const {Server} = require('ws'); //npm i ws const emitter= new EventEmitter(); const app = https.createServer(options,function (req, res) {}) const wss = new Server({ server: app }); wss.on('connection', (socket,req) => { var isStreamer=false socket.fn=function(e){socket.send(e)} const interval= setInterval(socket.ping, 5000); emitter.on('data',socket.fn) emitter.emit('refresh','0') socket.on('message', (data) => { isStreamer||(emitter.on('refresh',socket.fn),emitter.off('data',socket.fn),(isStreamer=true)) emitter.emit('data',data) }); socket.on('close', () => { clearInterval(interval) emitter.off('data',socket.fn) emitter.off('refresh',socket.fn) }) socket.on('ping',socket.pong) socket.on("error", (err) => {}) }); app.listen(PORT,'0.0.0.0') //u need to set option for https or use http instead
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda