Transmisión de video en vivo en el servidor (PC) a partir de imágenes enviadas por el robot a través de UDP

Hmm Encontré esto que parece prometedor:

http://sourceforge.net/projects/mjpg-streamer/

Okay. Trataré de explicar lo que estoy tratando de hacer de manera clara y detallada.

Tengo un pequeño robot humanoide con cámara y dispositivo wifi (este es el robot) La velocidad promedio de transferencia wifi del dispositivo wifi del robot es de 1769 KB / s. El robot tiene una CPU de 500Mhz y 256MB de RAM, por lo que no es suficiente para ningún cálculo serio (además, ya hay un par de módulos ejecutándose en el robot para movimiento, visión, sonar, voz, etc.).

Tengo una PC desde la cual controlo el robot. Estoy tratando de que el robot camine por la habitación y vea un video en vivo de lo que el robot ve en la PC.

Lo que ya tengo trabajando. El robot camina como yo quiero que haga y toma imágenes con la cámara. Las imágenes se envían a través del protocolo UDP a la PC donde las estoy recibiendo (lo he verificado guardando las imágenes entrantes en el disco).

La cámara devuelve imágenes de 640 x 480 px en el espacio de color YUV442. Estoy enviando las imágenes con compresión con pérdida (JPEG) porque estoy tratando de obtener el mejor FPS posible en la PC. Estoy haciendo la compresión a JPEG en el robot con la biblioteca PIL.

Mis preguntas:

¿Podría alguien darme algunas ideas sobre cómo convertir las imágenes JPEG entrantes en una transmisión de video en vivo? Entiendo que necesitaré un codificador de video para eso. ¿Qué codificador de video me recomiendan? FFMPEG o algo más? Soy muy nuevo en la transmisión de video, así que quiero saber qué es lo mejor para esta tarea. Preferiría usar Python para escribir esto, así que preferiría algún codificador de video o biblioteca que tenga API de Python. Pero supongo que si la biblioteca tiene una buena API de línea de comandos, no tiene que estar en Python.

¿Cuál es el mejor FPS que podría sacar de esto? Dada la velocidad de transferencia wifi promedio de 1769 KB / s y las dimensiones de las imágenes? ¿Debo usar una compresión diferente a JPEG?

Estaré encantado de ver ejemplos de código. Los enlaces a artículos que explican cómo hacer esto también estarían bien.

Algunas muestras de código. Así es como envío imágenes JPEG desde el robot a la PC (fragmento simplificado acortado). Esto se ejecuta en el robot:

# lots of code here

UDPSock = socket(AF_INET,SOCK_DGRAM)

  while 1:
    image = camProxy.getImageLocal(nameId)
    size = (image[0], image[1])
    data = image[6]
    im = Image.fromstring("YCbCr", size, data)
    s = StringIO.StringIO()
    im.save(s, "JPEG")

    UDPSock.sendto(s.getvalue(), addr)

    camProxy.releaseImage(nameId)

  UDPSock.close()

  # lots of code here

Así es como recibo las imágenes en la PC. Esto se ejecuta en la PC:

  # lots of code here

  UDPSock = socket(AF_INET,SOCK_DGRAM)
  UDPSock.bind(addr)

  while 1:
    data, addr = UDPSock.recvfrom(buf)
    # here I need to create a stream from the data
    # which contains JPEG image

  UDPSock.close()

  # lots of code here

Respuestas a la pregunta(2)

Su respuesta a la pregunta