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