Найти - Пользователи
Полная версия: Не отображается видео в нормальном виде
Начало » Python для новичков » Не отображается видео в нормальном виде
1
sanodin
Сервер ждет подключения клиента, при подключении принимает данные и отображает видео, но картинка постоянно скачет, делится на несколько частей и тд, как нормализовать картинку?

сервер
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
Сейчас почти не скачет, но иногда зависает картинка
не пойму как отрегулировать входящие данные для нормального отображения картинки
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
Не знаю, правильной ли дорогой иду, изначально есть сервер передающий видео при подключении клиента, работает нормально, но если сервер за NAT, то как попасть к нему ?
Думал сделать наоборот, сервер у меня, а клиент(съем сигнала с вэбкамеры) запускается через джабер-бота в аргументах указан мой ip, тогда все нормально, но это если я сам не за NAT, а если у меня адрес тоже внутренний, то думаю повесить сервер на хостинг и по id соединять клиентов, то есть на удаленном компьютере клиент(по команде бота), передает данные на сервер, сервер определяет его id, и если еще подсоединяется клиент с таким же id, то переправляет данные ему, а там уже преобразуется в видео…?Или так не получится?
mgk
Если сервер не для внутренней сети, то он должен быть доступен извне
Если он находится в NAT, то единственное решение - пробросить прослушивающий порт на внешний IP (делается на роутере).
Как вариант, можно использовать костыль в виде внешнего двустороннего прокси-сервера, к которому постоянно подключен сервер и при подключении клиента трафик тупо пробрасывается, но это очень ущербное решение, которое может вызывать дополнительные лаги.
В общем, открывай сервер наружу
sanodin
Проброс портов не пойдет, если дома на модеме я это могу сделать то в другом месте мне этого не разрешат
Я и думал, сервер разместить на хост, что бы его видели клиенты, что бы он был как перевалочная база
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB