Commit ef88d201 authored by Adrien BERNARD's avatar Adrien BERNARD
Browse files

Upload New File

parent cc87f872
import io
import picamera
import socket
import logging
import socketserver
from threading import Condition
from http import server
#Récupération de l'ip de la raspberry
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
ip = s.getsockname()[0]
s.close()
print("Votre ip est : " + ip + "\n")
except:
print("Connexion internet non trouvé")
#initialisation de la page a charger en html
#la résolution de l'image ce change ici ainsi que le titre ou meme tout autre information que vous voudriez ajouter sur la page
PAGE="""\
<html>
<head>
<title>Raspberry Pi - Surveillance Camera</title>
</head>
<body>
<center><h1>Raspberry Pi - Surveillance Camera</h1></center>
<center><img src="stream.mjpg" width="1080" 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()
self.buffer.seek(0)
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): #serveur de stream
allow_reuse_address = True
daemon_threads = True
with picamera.PiCamera(resolution='1080x720', framerate=30) as camera:
output = StreamingOutput()
camera.rotation = 0 #changer cette variable pour effectuer une rotation de l'image (en degrés)
camera.start_recording(output, format='mjpeg')
try:
print("Demarrage du stream")
address = ('', 8000) #port utilisé
server = StreamingServer(address, StreamingHandler)
server.serve_forever() #le lancer pour toujours
finally:
camera.stop_recording()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment