sanodin
Май 27, 2014 17:58:55
Сервер ждет подключения клиента, при подключении принимает данные и отображает видео, но картинка постоянно скачет, делится на несколько частей и тд, как нормализовать картинку?
сервер
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:26:08
Сейчас почти не скачет, но иногда зависает картинка
не пойму как отрегулировать входящие данные для нормального отображения картинки
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 09:14:45
Не знаю, правильной ли дорогой иду, изначально есть сервер передающий видео при подключении клиента, работает нормально, но если сервер за NAT, то как попасть к нему ?
Думал сделать наоборот, сервер у меня, а клиент(съем сигнала с вэбкамеры) запускается через джабер-бота в аргументах указан мой ip, тогда все нормально, но это если я сам не за NAT, а если у меня адрес тоже внутренний, то думаю повесить сервер на хостинг и по id соединять клиентов, то есть на удаленном компьютере клиент(по команде бота), передает данные на сервер, сервер определяет его id, и если еще подсоединяется клиент с таким же id, то переправляет данные ему, а там уже преобразуется в видео…?Или так не получится?
mgk
Май 28, 2014 09:41:06
Если сервер не для внутренней сети, то он должен быть доступен извне

Если он находится в NAT, то единственное решение - пробросить прослушивающий порт на внешний IP (делается на роутере).
Как вариант, можно использовать костыль в виде внешнего двустороннего прокси-сервера, к которому постоянно подключен сервер и при подключении клиента трафик тупо пробрасывается, но это очень ущербное решение, которое может вызывать дополнительные лаги.
В общем, открывай сервер наружу
sanodin
Май 28, 2014 17:46:23
Проброс портов не пойдет, если дома на модеме я это могу сделать то в другом месте мне этого не разрешат
Я и думал, сервер разместить на хост, что бы его видели клиенты, что бы он был как перевалочная база