0

I am trying to send video stream from server to client using python sockets but facing errors. Here is my server side and client side code.There is some problem with sending frame from server to client ,

Here is my SERVER SIDE code

    #!/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()

And **CLIENT SIDE CODE **

#!/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()
0

2 Answers 2

4

You can only send a string or a buffer on a socket. Frame is a numpy array. You have to convert it to string first. Use the following code to convert it to string.

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

Send data across the network

On the other side use

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

to convert it back to a frame that you can pass to cv2.imshow()

I would suggest using UDP instead of TCP as you will have a lower latency.

Sign up to request clarification or add additional context in comments.

Comments

1

1) The Server closes the connection after 1 send, but the clients seems to expect more than one frame

2) SOCK_STREAM (TCP) only supports a stream without delimiting packets. you need to build the delimiting parts yourself.

3) recvall isn't even a function

maybe you should try implementing it with remote multiprocessing: https://docs.python.org/2/library/multiprocessing.html#using-a-remote-manager

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.