2010-07-29 10 views
12

Estamos tratando de encontrar cualquier tecnología/librería disponible en .NET stack (incluso wrappers sobre dlls de terceros) que nos ayudará a construir un aplicación que puedeVideo Capturing + Uploading + Processing + Streaming back - .NET & C#

  • 1 - capturar una imagen desde el dispositivo de vídeo de un usuario
  • 2 - Subir que en tiempo real a un servidor
  • 3 - Procese la vídeo (en el servidor) - por ejemplo: adición de una marca de agua el video
  • 4 - Transmitir al usuario/otros usuarios

Preferiblemente, el retardo de tiempo/latencia entre step2 y 4 deben ser mínimos

El primer requisito (captura) parece bastante sencillo. El desafío es identificar una forma adecuada de cargar, procesar y transmitir de nuevo. ¿Alguna sugerencia o idea válida?

Recientemente vino acrsoss FFmpeg library, y tiene un contenedor C#. ¿FFmpeg se puede usar para procesar el lado?

Respuesta

13

me gustaría ir de esta manera:

  1. uso de Silverlight o Flash para capturar la entrada de cámara de vídeo, por ejemplo, como detailed here.
  2. Puede enviar el byte-stream más allá de a socket que esté escuchando su servidor.
  3. En el extremo receptor, simplemente use el programa de aceptación de socket como un programa enrutador con un número de trabajadores de escucha conectados. Entre los trabajadores y el programa enrutador, p. AMQP con RabbitMQ. Enviar mensajes asíncronos (por ejemplo, con extensiones reactivas) con, p. el stream encoding al nodo de conejo, que luego puede enviar todos los mensajes a una sola computadora como parte de una conversación/sesión de usuario o intercalarse entre los trabajadores disponibles. Aquí está the manual. Como el video está codificado, se transmite de forma asíncrona por el bus de mensajes. De acuerdo con las pruebas de Intel, el bus en sí debería funcionar bien a altos rendimientos, pero tuvieron que usar el modo de canal tcp intercalado (lo probaron en un lan de gigabits). Otros usuarios aquí han sugerido FFlib. También puede considerar hacer que los trabajadores se conviertan en webM, pero si FFlib funciona, podría ser mucho más fácil. Cada trabajador publica sobre AMQP la siguiente pieza de video codificada. Un programa que ejecuta el servidor, p. el programa de enrutador del que hablé antes, comienza a enviarlo al cliente (vea el n. ° 4)
  4. Tenga un programa cliente, p. silverlight/flash connect (por ejemplo, sobre el mismo socket que abrió para los datos del cliente-> servidor, o sobre HTTP), y lea el byte-stream con un decodificador. Renderiza la salida.
+0

Actualización: Codificación de flujo => un URI en su mensaje con un zócalo ZeroMQ sobre el que recibe los datos de video. – Henrik

2

Parece que Empalmador puede procesar vídeo estático y convertirlo - No estoy seguro sobre el procesamiento de un vídeo en tiempo real subida - http://splicer.codeplex.com/

3

VideoLab de MITOV puede lograr todo esto y es gratuito para uso personal (no tan gratis para uso comercial, pero el precio no es demasiado alto).

He comprado y uso la versión Delphi y sé que funciona muy bien, así que estoy bastante seguro de que la versión .NET hará lo que necesita.

Este tipo de tarea no es trivial (como se ve por la falta de respuestas aquí), por lo que esperan que luchar mucho con DirectX/Microsoft Media Codificador pero con este kit de herramientas y un poco de ayuda por parte del autor, que se finalmente tener éxito.

http://www.mitov.com/html/videolab.html

1

La pregunta es una especie de resumen de los detalles (es este un servidor web, lo que OS es el servidor? Etc) pero voy a tomar una puñalada en base a lo que creo que estamos tratando de hacer .

Una cosa que podría considerar es realizar la captura y el proceso al mismo tiempo. Si el usuario ejecuta su aplicación cliente, haga que la captura y el procesamiento se realicen a través de DirectShow. Entonces, todo lo que tiene que hacer es subir el video y puede omitir todo el proceso del servidor. Esto supone que el "usuario" está bajo su control, que esta no es una persona aleatoria que está subiendo videos, sino un empleado o alguien de confianza.

Si este no es el caso, entonces ffmpeg ciertamente se puede usar para filmar videos en su servidor. Realmente no necesitas 'envoltorios' para eso. Puede llamarlo como una aplicación de línea de comando desde su aplicación de servidor y esperar a que termine.

El proceso realmente no es tan complejo ... son los detalles los que van a importar (por ejemplo, ¿qué significa 'stream' para usted? ¿Realmente quiere decir 'stream', o es a través de http?Eso es un tema enorme allí mismo)

2

Eche un vistazo a Video.Show en Vertigo. Es un sitio web de código abierto para contenido de video generado por el usuario. Utiliza el codificador de expresiones para manejar la edición de compresión/video. No es exactamente lo que necesitas, ¡pero es un buen comienzo!

2

Puede usar Silverlight para captura como se mencionó anteriormente, y luego usar Expression Encoder para enviarlo directamente a un servidor de transmisión o transmisión desde allí.

Se debe tener todo lo que necesita:

inteligente de codificación/recompresión inteligente para WMV si la fuente es también WMV y no hay operaciones de bastidor se realiza [4], cortes edición, lote serie de codificación, codificación en vivo de webcams y cámaras de vídeo DV

formato de decodificación/importación apoyo porque de DirectShow

Smooth Streaming (720p + vídeo utilizando HTTP) con el cliente optimizado (Silverlight) y el servidor (IIS con suave streaming) la publicación

WebDAV, plugins publicación para Silverlight Streaming, Amazon S3

superposiciones Importar XAML creadas en Expression Design y personalizar su oportunidad, la animación, la opacidad, la colocación y el bucle

eventos de activación de JavaScript

Windows Media 11 SDK y VC-1 SDK integración, nativo decodificador MPEG-2

Adición de subtítulos a los vídeos utilizando SAMI o en formato de texto W3C temporizado

preliminar y comparación de codificación ajustes en tiempo real

captura

modelo de objetos

de pantalla para el motor de codificación, SDK descargable por separado