Прямая трансляция видео на сервер (ПК) с изображений, отправленных роботом через UDP

Хм. Я нашел это, которое кажется многообещающим:

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

Хорошо. Я постараюсь объяснить, что я пытаюсь сделать, ясно и более подробно.

У меня маленький человекоподобный робот с камерой и вайфай (это робот). Средняя скорость передачи Wi-Fi робота робота составляет 1769 КБ / с. Робот имеет 500 МГц ЦП и 256 МБ ОЗУ, поэтому этого недостаточно для серьезных вычислений (более того, на роботе уже работает пара модулей для движения, зрения, сонара, речи и т. Д.).

У меня есть компьютер, с которого я управляю роботом. Я пытаюсь заставить робота ходить по комнате и смотреть прямую трансляцию того, что робот видит в ПК.

На что я уже работаю. Робот идет так, как я хочу, и снимает на камеру. Изображения отправляются по протоколу UDP на ПК, где я их получаю (я проверил это, сохранив входящие изображения на диск).

Камера возвращает изображения размером 640 x 480 пикселей в цветовом пространстве YUV442. Я отправляю изображения со сжатием с потерями (JPEG), потому что я пытаюсь получить наилучший FPS на ПК. Я делаю сжатие в JPEG на роботе с библиотекой PIL.

Мои вопросы:

Может, кто-нибудь подскажет, как конвертировать входящие изображения JPEG в потоковое видео? Я понимаю, что для этого мне понадобится видеокодер. Какой видеокодер вы рекомендуете? FFMPEG или что-то еще? Я очень плохо знаком с потоковым видео, поэтому я хочу знать, что лучше для этой задачи. Я бы предпочел использовать Python для написания этого, поэтому я бы предпочел некоторый видеокодер или библиотеку, которая имеет Python API. Но я думаю, что если у библиотеки есть хороший API для командной строки, это не обязательно должно быть в Python.

Каков лучший FPS, который я мог получить из этого? Учитывая среднюю скорость передачи Wi-Fi 1769 КБ / с и размеры изображений? Должен ли я использовать сжатие, отличное от JPEG?

Я буду рад видеть любые примеры кода. Ссылки на статьи, объясняющие, как это сделать, тоже подойдут.

Некоторые примеры кода. Вот как я отправляю изображения в формате JPEG от робота на ПК (сокращенный упрощенный фрагмент). Это работает на роботе:

# 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

Вот как я получаю изображения на ПК. Это работает на ПК:

  # 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

Ответы на вопрос(2)

Ваш ответ на вопрос