48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
import os
|
|
import cv2
|
|
|
|
|
|
class RtspClient:
|
|
|
|
def __init__(self, ip, username, password, port=554, profile="main", use_udp=True, **kwargs):
|
|
"""
|
|
|
|
:param ip: Camera IP
|
|
:param username: Camera Username
|
|
:param password: Camera User Password
|
|
:param port: RTSP port
|
|
:param profile: "main" or "sub"
|
|
:param use_upd: True to use UDP, False to use TCP
|
|
:param proxies: {"host": "localhost", "port": 8000}
|
|
"""
|
|
capture_options = 'rtsp_transport;'
|
|
self.ip = ip
|
|
self.username = username
|
|
self.password = password
|
|
self.port = port
|
|
self.proxy = kwargs.get("proxies")
|
|
self.url = "rtsp://" + self.username + ":" + self.password + "@" + \
|
|
self.ip + ":" + str(self.port) + "//h264Preview_01_" + profile
|
|
if use_udp:
|
|
capture_options = capture_options + 'udp'
|
|
else:
|
|
capture_options = capture_options + 'tcp'
|
|
|
|
os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = capture_options
|
|
|
|
def preview(self):
|
|
""" Blocking function. Opens OpenCV window to display stream. """
|
|
win_name = self.ip
|
|
cap = cv2.VideoCapture(self.url, cv2.CAP_FFMPEG)
|
|
ret, frame = cap.read()
|
|
|
|
while ret:
|
|
cv2.imshow(win_name, frame)
|
|
|
|
ret, frame = cap.read()
|
|
if (cv2.waitKey(1) & 0xFF == ord('q')):
|
|
break
|
|
|
|
cap.release()
|
|
cv2.destroyAllWindows()
|