2014-09-11 54 views
0

我想發送視頻流從服務器到客戶端使用python套接字,但面臨錯誤。 這裏是我的服務器端和客戶端code.There一些問題,從服務器到客戶端發送幀,發送視頻流從服務器到客戶端使用套接字編程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()

回答

3

只能發送一個字符串或插座上的緩衝。幀是一個numpy數組。你必須先將它轉換爲字符串。使用下面的代碼將其轉換爲字符串。

frame = frame.flatten() 
data = frame.tostring() 

通過網絡

發送數據在另一邊使用

frame = numpy.fromstring(data, dtype=numpy.uint8) 
frame = numpy.reshape(frame, (240,320,3)) 

將其轉換回一個框架,你可以傳遞給cv2.imshow()

我會建議使用UDP而不是TCP,因爲您將有較低的延遲。

相關問題