Ich hab folgendes Skript im www gefunden und wollte mal wissen, ob dies so in bottle auch geht. Hab leider nicht so viel Ahnung von Netzwerktechnik. Bis jetzt habe ich dieses Skript separat ausgeführt und per iFrame in meine bottle App eingebunden. Denke aber, dass dies nicht viel Sinn macht. Für ein paar Tipps wäre ich dankbar
Quellen:
picamera, PiCameraStream
Code: Alles auswählen
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import io
import time
import picamera
camera=None
class CamHandler(BaseHTTPRequestHandler):
def do_GET(self):
# wenn der request Pfad mit .mjpg endet
if self.path.endswith('.mjpg'):
self.send_response(200)
self.send_header('Content-type','multipart/x-mixed-replace; boundary=--jpgboundary')
self.end_headers()
stream=io.BytesIO()
try:
for foo in camera.capture_continuous(stream,'jpeg'):
self.wfile.write("--jpgboundary")
self.send_header('Content-type','image/jpeg')
self.send_header('Content-length',len(stream.getvalue()))
self.end_headers()
self.wfile.write(stream.getvalue())
stream.seek(0)
stream.truncate()
time.sleep(.5)
except KeyboardInterrupt:
exit()
return
else:
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
self.wfile.write("""<html><head></head><body>
<img src="/cam.mjpg"/>
</body></html>""")
return
def main():
global camera
camera = picamera.PiCamera()
camera.rotation = 180
camera.resolution = (640, 480)
try:
server = HTTPServer(('10.0.2.108',8080),CamHandler)
print "server started"
server.serve_forever()
except KeyboardInterrupt:
camera.close()
server.socket.close()
if __name__ == '__main__':
main()
Code: Alles auswählen
@route('/live-stream', method='GET')
def live_stream():
#response.content_type = 'multipart/x-mixed-replace; boundary=--jpgboundary'
my_stream = io.BytesIO()
with picamera.PiCamera() as camera:
camera.start_preview()
# Camera warm-up time
time.sleep(2)
camera.capture(my_stream, 'jpeg')
return '<img src="/cam.mjpg"/>'