Форум сайта python.su
31
Сервер ждет подключения клиента, при подключении принимает данные и отображает видео, но картинка постоянно скачет, делится на несколько частей и тд, как нормализовать картинку?
сервер
import socket import pygame import Image host = "localhost" port = 44444 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((host, port)) s.listen(1) conn, addr = s.accept() print addr pygame.init() screen = pygame.display.set_mode((640,480)) pygame.display.set_caption('Remote Webcam Viewer') font = pygame.font.SysFont("Arial",14) clock = pygame.time.Clock() while 1: data = conn.recv(10240000) if data: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() try: image = Image.fromstring("RGB",(200,180),data) image = image.resize((640,480)) image = pygame.image.frombuffer(image.tostring(),(640,480),"RGB") except: pass screen.blit(image,(0,0)) clock.tick(60) pygame.display.flip()
from socket import * from VideoCapture import * HOST = "localhost" PORT = 44444 s = socket(AF_INET,SOCK_STREAM) s.connect((HOST, PORT)) print "Client running on %s port %s" % (HOST, PORT) camera = Device() while True: image = camera.getImage().convert("RGB") image = image.resize((200,180)) data = image.tostring() s.sendall(data)
Отредактировано sanodin (Май 28, 2014 06:28:49)
Офлайн
31
Сейчас почти не скачет, но иногда зависает картинка
не пойму как отрегулировать входящие данные для нормального отображения картинки
import socket import pygame import Image host = "localhost" port = 44444 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((host, port)) s.listen(1) conn, addr = s.accept() print addr pygame.init() screen = pygame.display.set_mode((640,480)) pygame.display.set_caption('Remote Webcam Viewer') #font = pygame.font.SysFont("Arial",14) clock = pygame.time.Clock() while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() data = conn.recv(3240000) try: image = Image.fromstring("RGB",(250,250),data)# на клиенте и сервере одинаковый размер image = image.resize((640,480)) image = pygame.image.frombuffer(image.tostring(),(640,480),"RGB") screen.blit(image,(0,0)) clock.tick(60) #pygame.display.flip() pygame.display.update() except: pass
Отредактировано sanodin (Май 28, 2014 06:29:42)
Офлайн
31
Не знаю, правильной ли дорогой иду, изначально есть сервер передающий видео при подключении клиента, работает нормально, но если сервер за NAT, то как попасть к нему ?
Думал сделать наоборот, сервер у меня, а клиент(съем сигнала с вэбкамеры) запускается через джабер-бота в аргументах указан мой ip, тогда все нормально, но это если я сам не за NAT, а если у меня адрес тоже внутренний, то думаю повесить сервер на хостинг и по id соединять клиентов, то есть на удаленном компьютере клиент(по команде бота), передает данные на сервер, сервер определяет его id, и если еще подсоединяется клиент с таким же id, то переправляет данные ему, а там уже преобразуется в видео…?Или так не получится?
Отредактировано sanodin (Май 28, 2014 14:33:38)
Офлайн
1
Если сервер не для внутренней сети, то он должен быть доступен извне 
Если он находится в NAT, то единственное решение - пробросить прослушивающий порт на внешний IP (делается на роутере).
Как вариант, можно использовать костыль в виде внешнего двустороннего прокси-сервера, к которому постоянно подключен сервер и при подключении клиента трафик тупо пробрасывается, но это очень ущербное решение, которое может вызывать дополнительные лаги.
В общем, открывай сервер наружу
Офлайн
31
Проброс портов не пойдет, если дома на модеме я это могу сделать то в другом месте мне этого не разрешат
Я и думал, сервер разместить на хост, что бы его видели клиенты, что бы он был как перевалочная база
Отредактировано sanodin (Май 28, 2014 18:42:52)
Офлайн