-
Notifications
You must be signed in to change notification settings - Fork 1
/
ipcamera.py
126 lines (115 loc) · 3.77 KB
/
ipcamera.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
from flask import Flask, Response, jsonify, request, abort
import cv2
class VideoCamera(object):
def __init__(self, address):
self.video = cv2.VideoCapture(address)
def __del__(self):
self.video.release()
def check_camera(self):
ret, frame = self.video.read()
if not ret:
return False
else:
return True
def get_frame(self):
if self.check_camera():
_, frame = self.video.read()
_, jpeg = cv2.imencode('.jpg', frame)
return jpeg.tobytes()
app = Flask(__name__)
def gen_frame(camera):
while True:
frame = camera.get_frame()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame)
@app.route("/")
def index():
return "IP Camera proxy"
@app.route('/live')
def live():
if 'source' in request.args:
source = request.args['source']
if source == '':
return "Invalid source parameter"
else:
CAMERA_URL = 'rtsp://user:password@ip_address:' + source + '/cam/realmonitor?channel=1&subtype=1'
camera = VideoCamera(f'{CAMERA_URL}')
if camera.check_camera():
return Response(gen_frame(camera),
mimetype='multipart/x-mixed-replace; boundary=frame')
else:
return "Camera error/invalid source"
else:
return "Invalid parameter"
@app.route('/live2')
def live2():
if 'source' in request.args:
source = request.args['source']
if source == '':
return "Invalid source parameter"
else:
CAMERA_URL = 'rtsp://user:password@ip_address:port/Streaming/Channels/' + source
camera = VideoCamera(f'{CAMERA_URL}')
if camera.check_camera():
return Response(gen_frame(camera),
mimetype='multipart/x-mixed-replace; boundary=frame')
else:
return "Camera error/invalid source"
else:
return "Invalid parameter"
@app.route('/status1')
def checkstatus1():
if 'source' in request.args:
source = request.args['source']
if source == '':
return "Invalid source parameter"
else:
CAMERA_URL = 'rtsp://user:password@ip_address:' + source + '/cam/realmonitor?channel=1&subtype=1'
camera = VideoCamera(f'{CAMERA_URL}')
if camera.check_camera():
result = {
"group" : 1,
"source" : source,
"device" : "Dahua",
"status" : "up"
}
return jsonify(result)
else:
result = {
"group" : 1,
"source" : source,
"device" : "Dahua",
"status" : "down"
}
return jsonify(result)
else:
return "Invalid parameter"
@app.route('/status2')
def checkstatus2():
if 'source' in request.args:
source = request.args['source']
if source == '':
return "Invalid source parameter"
else:
CAMERA_URL = 'rtsp://user:password@ip_address:port/Streaming/Channels/' + source
camera = VideoCamera(f'{CAMERA_URL}')
if camera.check_camera():
result = {
"group" : 2,
"source" : source,
"device" : "Hikvision",
"status" : "up"
}
return jsonify(result)
else:
result = {
"group" : 2,
"source" : source,
"device" : "Hikvision",
"status" : "down"
}
return jsonify(result)
else:
return "Invalid parameter"
if __name__ == '__main__':
app.run(host='0.0.0.0',debug=True)