Уведомления

Группа в Telegram: @pythonsu

#1 Май 27, 2014 17:58:55

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Не отображается видео в нормальном виде

Сервер ждет подключения клиента, при подключении принимает данные и отображает видео, но картинка постоянно скачет, делится на несколько частей и тд, как нормализовать картинку?

сервер

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)

Офлайн

#2 Май 28, 2014 06:26:08

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Не отображается видео в нормальном виде

Сейчас почти не скачет, но иногда зависает картинка
не пойму как отрегулировать входящие данные для нормального отображения картинки

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)

Офлайн

#3 Май 28, 2014 09:14:45

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Не отображается видео в нормальном виде

Не знаю, правильной ли дорогой иду, изначально есть сервер передающий видео при подключении клиента, работает нормально, но если сервер за NAT, то как попасть к нему ?
Думал сделать наоборот, сервер у меня, а клиент(съем сигнала с вэбкамеры) запускается через джабер-бота в аргументах указан мой ip, тогда все нормально, но это если я сам не за NAT, а если у меня адрес тоже внутренний, то думаю повесить сервер на хостинг и по id соединять клиентов, то есть на удаленном компьютере клиент(по команде бота), передает данные на сервер, сервер определяет его id, и если еще подсоединяется клиент с таким же id, то переправляет данные ему, а там уже преобразуется в видео…?Или так не получится?

Отредактировано sanodin (Май 28, 2014 14:33:38)

Офлайн

#4 Май 28, 2014 09:41:06

mgk
Зарегистрирован: 2014-05-27
Сообщения: 9
Репутация: +  1  -
Профиль   Отправить e-mail  

Не отображается видео в нормальном виде

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

Офлайн

#5 Май 28, 2014 17:46:23

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Не отображается видео в нормальном виде

Проброс портов не пойдет, если дома на модеме я это могу сделать то в другом месте мне этого не разрешат
Я и думал, сервер разместить на хост, что бы его видели клиенты, что бы он был как перевалочная база

Отредактировано sanodin (Май 28, 2014 18:42:52)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version