a guest May 20th, 2019 9 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Web streaming example                                                                                                                                # Source code from the official PiCamera package                                                                                                       #                                                                                                                                                                                                                                        import io                                                                                                                                              import picamera                                                                                                                                        import logging                                                                                                                                         import socketserver                                                                                                                                    from threading import Condition                                                                                                                        from http import server                                                                                                                                                                                                                                                                                       PAGE="""\                                                                                                                                              <html>                                                                                                                                                 <head>                                                                                                                                                 <title>Raspberry Pi - Surveillance Camera</title>                                                                                                      </head>                                                                                                                                                <body>                                                                                                                                                 <center><img src="stream.mjpg" width="1280" height="720"></center>                                                                                     </body>                                                                                                                                                </html>                                                                                                                                                """                                                                                                                                                                                                                                                                                                           class StreamingOutput(object):                                                                                                                             def __init__(self):                                                                                                                                        self.frame = None                                                                                                                                      self.buffer = io.BytesIO()                                                                                                                             self.condition = Condition()                                                                                                                                                                                                                                                                              def write(self, buf):                                                                                                                                      if buf.startswith(b'\xff\xd8'):                                                                                                                            # New frame, copy the existing buffer's content and notify all                                                                                         # clients it's available                                                                                                                               self.buffer.truncate()                                                                                                                                 with self.condition:                                                                                                                                       self.frame = self.buffer.getvalue()                                                                                                                    self.condition.notify_all()                                                                                                                                                                                                                                              return self.buffer.write(buf)                                                                                                                                                                                                                                                                         class StreamingHandler(server.BaseHTTPRequestHandler):                                                                                                     def do_GET(self):                                                                                                                                          if self.path == '/':                                                                                                                                       self.send_response(301)                                                                                                                                self.send_header('Location', '/index.html')                                                                                                            self.end_headers()                                                                                                                                 elif self.path == '/index.html':                                                                                                                           content = PAGE.encode('utf-8')                                                                                                                         self.send_response(200)                                                                                                                                self.send_header('Content-Type', 'text/html')                                                                                                          self.send_header('Content-Length', len(content))                                                                                                       self.end_headers()                                                                                                                                     self.wfile.write(content)                                                                                                                          elif self.path == '/stream.mjpg':                                                                                                                          self.send_response(200)                                                                                                                                self.send_header('Age', 0)                                                                                                                             self.send_header('Cache-Control', 'no-cache, private')                                                                                                 self.send_header('Pragma', 'no-cache')                                                                                                                 self.send_header('Content-Type', 'multipart/x-mixed-replace; boundary=FRAME')                                                                          self.end_headers()                                                                                                                                     try:                                                                                                                                                       while True:                                                                                                                                                with output.condition:                                                                                                                                     output.condition.wait()                                                                                                                                frame = output.frame                                                                                                                               self.wfile.write(b'--FRAME\r\n')                                                                                                                       self.send_header('Content-Type', 'image/jpeg')                                                                                                         self.send_header('Content-Length', len(frame))                                                                                                         self.end_headers()                                                                                                                                     self.wfile.write(frame)                                                                                                                                self.wfile.write(b'\r\n')                                                                                                                      except Exception as e:                                                                                                                                     logging.warning(                                                                                                                                           'Removed streaming client %s: %s',                                                                                                                     self.client_address, str(e))                                                                                                               else:                                                                                                                                                      self.send_error(404)                                                                                                                                   self.end_headers()                                                                                                                                                                                                                                                                                class StreamingServer(socketserver.ThreadingMixIn, server.HTTPServer):                                                                                     allow_reuse_address = True                                                                                                                             daemon_threads = True                                                                                                                                                                                                                                                                                     with picamera.PiCamera(resolution='1280x720', framerate=24) as camera:                                                                                     output = StreamingOutput()                                                                                                                             #Uncomment the next line to change your Pi's Camera rotation (in degrees)                                                                              #camera.rotation = 90                                                                                                                                  camera.start_recording(output, format='mjpeg')                                                                                                         try:                                                                                                                                                       address = ('', 8090)                                                                                                                                   server = StreamingServer(address, StreamingHandler)                                                                                                    server.serve_forever()                                                                                                                             finally:                                                                                                                                                   camera.stop_recording()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand