gpt4 book ai didi

python - 使用pygame流式传输python错误中的套接字

转载 作者:行者123 更新时间:2023-11-28 18:43:47 24 4
gpt4 key购买 nike

我正在使用我在 python 中从互联网上获得的网络摄像头脚本,我正在使用 pygame 模块,代码是

import socket

import pygame

import sys


port=5014


#create pygame screen

screen = pygame.display.set_mode((800,600),0)


while True:

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(("",port)) # server is available on the whole network by setting host to ""

s.listen(1)

connection, addr = s.accept()

received = []


# loop .recv, it returns empty string when done, then transmitted data is completely received

while True:

recvd_data = connection.recv(1440021)

if not recvd_data:

break

else:

received.append(recvd_data)



dataset = ''.join(received)

image = pygame.image.fromstring(dataset,(800,600),"RGB") # convert received image from string

#image = pygame.transform.scale(image,(800,600)) # scale image to 800*600

screen.blit(image,(0,0)) # "show image" on the screen

pygame.display.update()


# check for quit events

for event in pygame.event.get():

if event.type == pygame.QUIT:

pygame.quit()

sys.exit()

客户端代码是

    import socket

import pygame

import pygame.camera

import sys

import time




host = "localhost"

port = 5014



pygame.init()

pygame.camera.init()


cam_list = pygame.camera.list_cameras() # list available cameras

webcam = pygame.camera.Camera(cam_list[0],(800,600)) # use first camera in list and set resolution

webcam.start() # start camera


while True:

image = webcam.get_image() # capture image

data = pygame.image.tostring(image,"RGB") # convert captured image to string, use RGB color scheme

#print sys.getsizeof(data) # in case somebody wants to know the size of the captured image


# prepare for connection to server

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # TCP is used

s.connect((host, port))

s.sendall(data)

s.close()

time.sleep(0.1)

我在服务器上得到的错误是

    Traceback (most recent call last):
File "/root/Desktop/serv.py", line 29, in <module>
image = pygame.image.fromstring(dataset,(800,600),"RGB") # convert received image from string
ValueError: String length does not equal format and resolution size

我在客户端得到的错误是

Traceback (most recent call last):
File "/root/Desktop/cli.py", line 28, in <module>
s.sendall(data)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 104] Connection reset by peer

谁知道哪里出了问题

最佳答案

我使用相同的代码并遇到类似的错误,解决方案是降低网络摄像头的分辨率,因为我无法处理 800x600。

我还更改了“服务器”和“客户端”,因此摄像头服务器就像“套接字服务器”一样

尝试以下代码,确保您的视频是正确的,在我的示例“/dev/video0”中,您的视频可能会有所不同。首先启动网络摄像头服务器。

网络摄像头服务器:

import socket
import pygame
import pygame.camera
import sys
import time

port = 5000
pygame.init()

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(("",port))
serversocket.listen(1)

pygame.camera.init()
webcam = pygame.camera.Camera("/dev/video0",(320,240))
webcam.start()

while True:
connection, address = serversocket.accept()
image = webcam.get_image() # capture image
data = pygame.image.tostring(image,"RGB") # convert captured image to string, use RGB color scheme
connection.sendall(data)
time.sleep(0.1)
connection.close()

客户端服务器:

import socket
import pygame
import sys

host = "10.0.0.13"
port=5000
screen = pygame.display.set_mode((320,240),0)


while True:
clientsocket=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect((host, port))
received = []
# loop .recv, it returns empty string when done, then transmitted data is completely received
while True:
#print("esperando receber dado")
recvd_data = clientsocket.recv(230400)
if not recvd_data:
break
else:
received.append(recvd_data)

dataset = ''.join(received)
image = pygame.image.fromstring(dataset,(320,240),"RGB") # convert received image from string
screen.blit(image,(0,0)) # "show image" on the screen
pygame.display.update()

# check for quit events
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()

关于python - 使用pygame流式传输python错误中的套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22923840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com