5 from __future__
import print_function
12 from BaseHTTPServer
import BaseHTTPRequestHandler
13 from BaseHTTPServer
import HTTPServer
14 from SocketServer
import ThreadingMixIn
21 html_suffix = [
'.html']
22 mjpg_suffix = [
'.mjpg',
'.avi',
'.mov']
28 path, ext = os.path.splitext(self.path)
30 self.send_response(200)
36 self.send_response(404)
39 self.send_header(
'Content-type',
'text/html')
46 <img src="http://127.0.0.1:8080/camera.mjpg"/> 52 'Content-type',
'multipart/x-mixed-replace; boundary=--jpgboundary')
56 self.
capture = cv2.VideoCapture(VIDEO_PATH)
58 nframes = self.capture.get(cv2.CAP_PROP_FRAME_COUNT)
63 ok, img = self.capture.read()
69 self.capture.open(VIDEO_PATH)
70 ok, img = cv2.imencode(
'.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, self.
jpeg_quality])
74 self.wfile.write(
'--jpgboundary')
75 self.wfile.write(os.linesep)
76 self.send_header(
'Content-type',
'image/jpeg')
77 self.send_header(
'Content-length', str(len(jpg)))
80 self.wfile.write(os.linesep)
82 except KeyboardInterrupt:
92 p = argparse.ArgumentParser()
93 p.add_argument(
'video_path')
94 p.add_argument(
'--port', default=8080, type=int)
96 if rospy.myargv() == sys.argv:
100 rospy.init_node(
'mjpg_server')
101 argv = rospy.myargv()
102 loginfo = rospy.loginfo
105 args = p.parse_args(argv[1:])
107 VIDEO_PATH = args.video_path
108 if not os.path.exists(VIDEO_PATH):
109 raise OSError(
'video not found: {}'.format(VIDEO_PATH))
113 server = ThreadedHTTPServer((
'localhost', args.port), MJPGStreamHandler)
114 loginfo(
'Server Started')
115 server.serve_forever()
116 except Exception
as ex:
117 loginfo(
'Got exception: {}'.format(str(ex)))
120 server.socket.close()
121 loginfo(
'Server Ended')
124 if __name__ ==
'__main__':