Transmisión de video a través de websockets usando JavaScript

84

¿Cuál es la forma más rápida de transmitir videos en vivo usando JavaScript? ¿WebSockets sobre TCP es un protocolo lo suficientemente rápido para transmitir un video de, digamos, 30 fps?

Sonrisa
fuente
1
Gert G: ¿Qué recomendarías? Preferiría mantener el consumo de memoria relativamente bajo, por eso JS (actualizar un lienzo HTML5) parece una mejor opción, si puede ofrecer una velocidad lo suficientemente buena.
SMILO
1
Vaya, olvidé mencionar que estoy interesado en la transmisión en vivo, no solo en la transmisión de algunos videos almacenados en un archivo. ¿<video> puede ofrecer eso?
SMiLE
2
No me preocuparía tanto la parte de transmisión , sino más bien cómo renderizaría el video transmitido de esa manera. ¿Es eso siquiera posible?
deceze
4
Para los detractores de la velocidad, estos son ejemplos de velocidades de fotogramas y video rápidas que utilizan HTML 5: The Wilderness Downtown (Chrome, video) thewildernessdowntown.com y Quake en HTML 5 (Chrome, velocidad de fotogramas) techcrunch.com/2010/04/01/ google-html5-quake Un par de pruebas de concepto. Solo va a mejorar. Alguien se subirá al tren muy pronto y cosechará los beneficios de ser uno de los primeros en el mercado, si es que alguien no lo ha hecho todavía. ¿Aguantaría la respiración por IE? No sé '
John K
2
Gracias por los ejemplos, John K.
SMiLE

Respuestas:

79

¿Es WebSockets sobre TCP un protocolo lo suficientemente rápido para transmitir un video de, digamos, 30 fps?

Sí ... lo es, échale un vistazo a este proyecto . Websockets puede manejar fácilmente la transmisión de video HD. Sin embargo, debe optar por la transmisión adaptativa. Te explico aquí cómo podrías implementarlo.

Actualmente estamos trabajando en una aplicación de mensajería instantánea basada en la web con soporte para chat, intercambio de archivos y video / cámara web. Con algunos trucos, obtuvimos transmisión de medios a través de websockets (usamos HTML5 Media Capture para obtener la transmisión de nuestras cámaras web).

Necesita compilar ay stream APIa Media Stream Transceiverpara controlar el procesamiento y transporte de medios relacionados.

Wouter Dorgelo
fuente
4
¡Esto es genial, gracias! Supongo que voy a probar una implementación muy básica de transmisión de video que no es adaptativa en absoluto, miraré los resultados y procederé en consecuencia; ¡Sin embargo, saber que esto es posible es bastante alentador! Tu tutorial también es muy útil.
SMiLE
1
Sí ... es una buena práctica comenzar con una aplicación simple. Tendrá que construir usted mismo la mayor parte de la tecnología necesaria para la transmisión en vivo, lo cual probablemente no sea una opción cuando: A. acaba de comenzar y B. está solo. Buena suerte.
Wouter Dorgelo
@ Mr.Pallazzo, ¿para qué está creando la aplicación? ¿Un negocio? ¿Alguna posibilidad de que pueda ponerme en contacto contigo sobre cómo lo estás haciendo?
Alistair
@WouterDorgelo, ¿cuál es el rendimiento de su aplicación cuando realiza transmisión HD a través de websockets?
quarks
¿Podemos grabar video CCTVy mostrarlo en vivo en una página web usando Javascript?
shaijut
1

Se han propuesto las extensiones de fuente de medios que permitirían implementaciones de transmisión de velocidad de bits adaptativa.

Nick Desaulniers
fuente
¿Hay un proyecto ws2video.js o algo así que muestre qué tan rápido va esto? Esta publicación de blog menciona que causa 5 segundos
Thaddee Tyl
0

Para responder a la pregunta:

¿Cuál es la forma más rápida de transmitir videos en vivo usando JavaScript? ¿WebSockets sobre TCP es un protocolo lo suficientemente rápido para transmitir un video de, digamos, 30 fps?

Sí, Websocket se puede usar para transmitir más de 30 fps e incluso 60 fps.

El problema principal con Websocket es que es de bajo nivel y debe lidiar con otros problemas además de la transmisión de fragmentos de video. En general, es un gran medio de transporte para video y audio.

quarks
fuente
Entonces, ¿qué pasa con WebRTC? (Como w3c) está funcionando en una conexión UDP y si tenemos alguna pérdida de paquetes, no sería un problema. Por otro lado, WebSocket está orientado a la conexión y puede molestar a los usuarios debido a la latencia que se produciría.
M. Rostami
-1

Definitivamente es concebible, pero no estoy seguro de que estemos allí todavía. Mientras tanto, recomendaría usar algo como Silverlight con IIS Smooth Streaming . Silverlight está basado en complementos, pero funciona en Windows / OSX / Linux. Algún día, el elemento HTML5<video> será el camino a seguir, pero carecerá de soporte por un tiempo.

Josh Stodola
fuente
Gracias por su respuesta. Estoy de acuerdo en que Silverlight y Flash son probablemente mejores opciones en este momento. Supongo que estoy interesado en la transmisión de Javascript porque abre más posibilidades de interactividad entre el usuario y el servidor (de transmisión de video).
SMiLE
Tengo que estar de acuerdo con Josh ... Si necesitas desesperadamente un contenido multimedia en tiempo real, no vayas por HTML5.
Wouter Dorgelo
6
En caso de que alguien todavía esté leyendo esto: First of Silverlight nunca fue compatible con Linux o sistemas móviles. El soporte para Linux Silverlight simplemente nunca existió. En segundo lugar, como las respuestas más recientes señalan correctamente, la transmisión de video HTML5 / MSE ahora es muy posible en los navegadores modernos y debería preferirse en casi todos los casos sobre cualquier tipo de enfoque basado en complementos.
ntninja
3
Y si alguien sigue leyendo esto, ese día ha llegado. Por el amor de Dios, no uses
Silverlight