我正在尝试使用python套接字将视频流从服务器发送到客户端,但遇到了错误。 这是我的服务器端和客户端代码。从服务器向客户端发送帧时出现问题
这是我的服务器端代码
#!/usr/bin/env python
import socket
import cv2
import json
host = ' '
port = 50058
backlog = 5
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
**strong text**s.bind((host,port))
s.listen(backlog)
vc=cv2.VideoCapture(0)
if vc.isOpened():
rval, frame = vc.read()
while 1:
client, address = s.accept()
rval, frame = vc.read()
#data = client.recv(size)
if rval:
#print "recieved data " + str(data)
#print "sending data to %s" % str(address)
#p=json.dumps(frame)
client.send(frame)
client.close()
和**客户端代码**
#!/usr/bin/env python
"""
A simple echo client
"""
import socket
import cv2
import json
host = '169.254.132.51'
port = 50058
size = 1024000000
cv2.namedWindow("preview")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
while True:
data = s.recv()
#frame=json.loads(data)
cv2.imshow("preview", data)
s.close()
只能在套接字上发送字符串或缓冲区。帧是一个numpy数组。你必须先把它转换成字符串。使用以下代码将其转换为字符串。
通过网络发送数据
在另一边使用
将其转换回可以传递给cv2.imshow()的帧
我建议您使用UDP而不是TCP,因为您将有一个较低的延迟。
1)服务器在1次发送后关闭连接,但客户端似乎期望有多个帧
2)SOCK_STREAM(TCP)只支持流而不限制数据包。你需要自己建立划界部分。
3)recvall甚至不是一个函数
也许你应该尝试用远程多处理来实现它: https://docs.python.org/2/library/multiprocessing.html#using-a-remote-manager
相关问题 更多 >
编程相关推荐