Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

How do I VideoCapture from socket makefile?

Hi,

I am streaming video over a network through sockets. I am able to view the video with mplayer so I know it arrives correctly. What I would like to do is capture that video stream over the socket with cv2.VideoCapture. I have tried as shown below but it gives a TypeError (also shown below). Is there a way to capture this video through VideoCapture or some other opencv functionality?

Capture code:

import socket import cv2 import struct import io import numpy as np import traceback

def main(): try: server_socket = socket.socket() server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.bind(('0.0.0.0', 5001)) server_socket.listen(0) connection = server_socket.accept()[0].makefile('rb')

    cv2.namedWindow("test-h264", cv2.WINDOW_NORMAL)
    video = cv2.VideoCapture(connection)
    while True:
        ret,frame = video.read()           
        cv2.imshow("test-h264",frame)
except Exception as e:
    traceback.print_exc()
finally:
    connection.close()
    server_socket.close()

if __name__ == "__main__": main()

Error message:

camera$ python testh264.py <socket._fileobject object="" at="" 0x2b07cd0=""> init done opengl support available Traceback (most recent call last): File "testh264.py", line 23, in main video = cv2.VideoCapture(connection) TypeError: an integer is required camera$

The video stream is from a picamera, is 1080p and is in h.264 format. The code above is on a laptop with ubuntu 12.04 installed.

Any suggestions would be appreciated.

Thanks...

Mike

click to hide/show revision 2
trying to get the code blocks to show as code

How do I VideoCapture from socket makefile?

Hi,

I am streaming video over a network through sockets. I am able to view the video with mplayer so I know it arrives correctly. What I would like to do is capture that video stream over the socket with cv2.VideoCapture. I have tried as shown below but it gives a TypeError (also shown below). Is there a way to capture this video through VideoCapture or some other opencv functionality?

Capture code:

import socket import cv2 import struct import io import numpy as np import traceback

def main(): try: server_socket = socket.socket() server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.bind(('0.0.0.0', 5001)) server_socket.listen(0) connection = server_socket.accept()[0].makefile('rb')

 

cv2.namedWindow("test-h264", cv2.WINDOW_NORMAL) video = cv2.VideoCapture(connection) while True: ret,frame = video.read()
cv2.imshow("test-h264",frame) except Exception as e: traceback.print_exc() finally: connection.close() server_socket.close() server_socket.close()

if __name__ == "__main__": main()main()

Error message:

camera$ python testh264.py <socket._fileobject object="" at="" 0x2b07cd0=""> init done opengl support available Traceback (most recent call last): File "testh264.py", line 23, in main video = cv2.VideoCapture(connection) TypeError: an integer is required camera$

camera$ The video stream is from a picamera, is 1080p and is in h.264 format. The code above is on a laptop with ubuntu 12.04 installed.

Any suggestions would be appreciated.

Thanks...

Mike

click to hide/show revision 3
still trying to get code to be properly formatted

How do I VideoCapture from socket makefile?

Hi,

I am streaming video over a network through sockets. I am able to view the video with mplayer so I know it arrives correctly. What I would like to do is capture that video stream over the socket with cv2.VideoCapture. I have tried as shown below but it gives a TypeError (also shown below). Is there a way to capture this video through VideoCapture or some other opencv functionality?

My Capture code:

 import socket
import cv2
import struct
import io
import numpy as np
import traceback

traceback def main(): try: server_socket = socket.socket() server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.bind(('0.0.0.0', 5001)) server_socket.listen(0) connection = server_socket.accept()[0].makefile('rb')

server_socket.accept()[0].makefile('rb') cv2.namedWindow("test-h264", cv2.WINDOW_NORMAL) video = cv2.VideoCapture(connection) while True: ret,frame = video.read()
cv2.imshow("test-h264",frame) except Exception as e: traceback.print_exc() finally: connection.close() server_socket.close()

server_socket.close() if __name__ == "__main__": main()

Error

The error message:

 camera$ python testh264.py
<socket._fileobject object="" at="" 0x2b07cd0="">
object at 0x2b07cd0>
init done
opengl support available
Traceback (most recent call last):
File "testh264.py", line 23, in main
video = cv2.VideoCapture(connection)
TypeError: an integer is required
camera$
 

The video stream is from a picamera, is 1080p and is in h.264 format. The code above is on a laptop with ubuntu 12.04 installed.

Any suggestions would be appreciated.

Thanks...

Mike

How do I VideoCapture from socket makefile?makefile() call?

Hi,

I am streaming video over a network through sockets. I am able to view the video with mplayer so I know it arrives correctly. What I would like to do is capture that video stream over the socket with cv2.VideoCapture. I have tried as shown below but it gives a TypeError (also shown below). Is there a way to capture this video through VideoCapture or some other opencv functionality?

My Capture code:

import socket
import cv2
import struct
import io
import numpy as np
import traceback

def main():
    try:
        server_socket = socket.socket()
        server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        server_socket.bind(('0.0.0.0', 5001))
        server_socket.listen(0)
        connection = server_socket.accept()[0].makefile('rb')

        cv2.namedWindow("test-h264", cv2.WINDOW_NORMAL)
        video = cv2.VideoCapture(connection)
        while True:
            ret,frame = video.read()           
            cv2.imshow("test-h264",frame)
    except Exception as e:
        traceback.print_exc()
    finally:
        connection.close()
        server_socket.close()

if __name__ == "__main__":
    main()

The error message:

camera$ python testh264.py 
<socket._fileobject object at 0x2b07cd0>
init done 
opengl support available 
Traceback (most recent call last):
  File "testh264.py", line 23, in main
    video = cv2.VideoCapture(connection)
TypeError: an integer is required
camera$

The video stream is from a picamera, is 1080p and is in h.264 format. The code above is on a laptop with ubuntu 12.04 installed.

Any suggestions would be appreciated.

Thanks...

Mike