Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

318
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda