Python 3.x Pygame网络摄像头流媒体客户端可以';t使用python 3.4执行

Python 3.x Pygame网络摄像头流媒体客户端可以';t使用python 3.4执行,python-3.x,pygame,video-streaming,Python 3.x,Pygame,Video Streaming,我使用pygame和python3.4在Odroid板上传输网络摄像头。服务器是这样的(摘自这篇文章:): 服务器在python和python 3.4中工作正常。 但是,当我使用python 3.4执行客户端时,会出现以下错误: 回溯(最近一次呼叫最后一次): 文件“client.py”,第30行,在 image=pygame.image.fromstring(数据集,(320240),“RGB”)#从字符串转换接收到的图像 TypeError:必须是字节,而不是str 客户是: #!/usr/

我使用pygame和python3.4在Odroid板上传输网络摄像头。服务器是这样的(摘自这篇文章:):

服务器在python和python 3.4中工作正常。 但是,当我使用python 3.4执行客户端时,会出现以下错误:

回溯(最近一次呼叫最后一次): 文件“client.py”,第30行,在 image=pygame.image.fromstring(数据集,(320240),“RGB”)#从字符串转换接收到的图像 TypeError:必须是字节,而不是str

客户是:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import socket
import pygame
import sys



host = "192.168.45.103"
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)
    dataset = ','.join(str(v) for v in 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()
我更改了dataset='.join(received)for dataset='','.join(str(v)for v in received)行,因为我读取了python3.x中的som,它的mst是这个。 现在的错误行是:image=pygame.image.fromstring(数据集,(320240),“RGB”)


谢谢

这两行显然是错误的:

dataset = ','.join(received)
image = pygame.image.fromstring(dataset,(320,240),"RGB") # convert received 
如果
dataset
包含二进制pxel数据,则不应将接收到的字节与“,”:它只需在像素数据中添加一个丢失的“,”(十进制44)字节作为垃圾-前一行使用带有空字符串的“join”(在Python 2.x中)将起作用,因为调用了空字符串,join只是连接您想要的各种数据段

在Python3中,二进制数据(例如您正在接收的像素数据)的处理与文本处理分离,并且您使用的“'”空字符串是表示空文本的对象,这与Python2.x中的空字节不同,但是您可以简单地在它前面加一个
b
来表示字节字符串(这就是你想要的)

总之,请尝试使用:

dataset = b''.join(str(v) for v in received)
image = pygame.image.fromstring(dataset,(320,240),"RGB")

好的,现在错误是:序列项0:预期字节、bytearray或具有缓冲区接口的对象,str找到。因此问题持续存在。抱歉,在我急于发布更正的答案时,我复制了您的行,并仅在两个位置中的一个位置进行了修复。当然,必须删除对“v”的
str
调用。如上所述已修复。
dataset = b''.join(str(v) for v in received)
image = pygame.image.fromstring(dataset,(320,240),"RGB")