Хм.Я нашел это, которое кажется многообещающим:
http://sourceforge.net/projects/mjpg-streamer/
Хорошо.Я постараюсь объяснить, что я пытаюсь сделать, ясно и более подробно.
У меня есть маленький человекоподобный робот с камерой и wifi-картой ( это робот ).Средняя скорость передачи 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