Mercurial > code > home > repos > light9
annotate bin/vidref @ 2331:b09ff4b0094c
faders in pages now
author | drewp@bigasterisk.com |
---|---|
date | Fri, 02 Jun 2023 09:42:18 -0700 |
parents | 9aa046cc9b33 |
children |
rev | line source |
---|---|
729
b5efddd80dad
update more shbang lines
Drew Perttula <drewp@bigasterisk.com>
parents:
647
diff
changeset
|
1 #!bin/python |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
2 """ |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
3 Camera images of the stage. View live on a web page and also save |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
4 them to disk. Retrieve images based on the song and time that was |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
5 playing when they were taken. Also, save snapshot images to a place |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
6 they can be used again as thumbnails of effects. |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
7 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
8 bin/vidref main |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
9 light9/vidref/videorecorder.py capture frames and save them |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
10 light9/vidref/replay.py backend for vidref.js playback element- figures out which frames go with the current song and time |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
11 light9/vidref/index.html web ui for watching current stage and song playback |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
12 light9/vidref/setup.html web ui for setup of camera params and frame crop |
1941
0dc3715050cf
video recorder now makes mp4 per song
drewp@bigasterisk.com
parents:
1939
diff
changeset
|
13 light9/web/light9-vidref-live.js LitElement for live video frames |
0dc3715050cf
video recorder now makes mp4 per song
drewp@bigasterisk.com
parents:
1939
diff
changeset
|
14 light9/web/light9-vidref-playback.js LitElement for video playback |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
15 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
16 """ |
882 | 17 from run_local import log |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
18 |
1956 | 19 from typing import cast |
1951
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
20 import logging, optparse, json, base64, os, glob |
1956 | 21 |
2046
9aa046cc9b33
replace greplin with prometheus throughout (untested)
drewp@bigasterisk.com
parents:
2043
diff
changeset
|
22 from light9.metrics import metrics, metricsRoute |
9aa046cc9b33
replace greplin with prometheus throughout (untested)
drewp@bigasterisk.com
parents:
2043
diff
changeset
|
23 |
1956 | 24 from rdflib import URIRef |
25 from twisted.internet import reactor, defer | |
26 import cyclone.web, cyclone.httpclient, cyclone.websocket | |
27 | |
28 from cycloneerr import PrettyErrorHandler | |
29 from light9 import networking, showconfig | |
30 from light9.newtypes import Song | |
31 from light9.vidref import videorecorder | |
32 from rdfdb.syncedgraph import SyncedGraph | |
542
cfd5d5be1b50
vidref complete panels on each replay. replays load and delete pretty well
drewp@bigasterisk.com
parents:
541
diff
changeset
|
33 |
cfd5d5be1b50
vidref complete panels on each replay. replays load and delete pretty well
drewp@bigasterisk.com
parents:
541
diff
changeset
|
34 parser = optparse.OptionParser() |
1858 | 35 parser.add_option("-v", "--verbose", action="store_true", help="logging.DEBUG") |
542
cfd5d5be1b50
vidref complete panels on each replay. replays load and delete pretty well
drewp@bigasterisk.com
parents:
541
diff
changeset
|
36 (options, args) = parser.parse_args() |
cfd5d5be1b50
vidref complete panels on each replay. replays load and delete pretty well
drewp@bigasterisk.com
parents:
541
diff
changeset
|
37 |
1089
2ee97997ee56
vidref now reads from picamserve
Drew Perttula <drewp@bigasterisk.com>
parents:
1070
diff
changeset
|
38 log.setLevel(logging.DEBUG if options.verbose else logging.INFO) |
534
6f1eb6437c96
vidref refactor, start to add more widgets
drewp@bigasterisk.com
parents:
525
diff
changeset
|
39 |
1956 | 40 |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
41 class Snapshot(cyclone.web.RequestHandler): |
1858 | 42 |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
43 @defer.inlineCallbacks |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
44 def post(self): |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
45 # save next pic |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
46 # return /snapshot/path |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
47 try: |
1951
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
48 snapshotDir = 'todo' |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
49 outputFilename = yield self.settings.gui.snapshot() |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
50 |
1951
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
51 assert outputFilename.startswith(snapshotDir) |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
52 out = networking.vidref.path( |
1951
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
53 "snapshot/%s" % outputFilename[len(snapshotDir):].lstrip('/')) |
1858 | 54 |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
55 self.write(json.dumps({'snapshot': out})) |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
56 self.set_header("Location", out) |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
57 self.set_status(303) |
1866
3c523c71da29
pyflakes cleanups and some refactors
Drew Perttula <drewp@bigasterisk.com>
parents:
1858
diff
changeset
|
58 except Exception: |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
59 import traceback |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
60 traceback.print_exc() |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
61 raise |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
62 |
1858 | 63 |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
64 pipeline = videorecorder.GstSource( |
1976
df28c994365d
different camera and crop settings for prod
drewp@bigasterisk.com
parents:
1957
diff
changeset
|
65 #'/dev/v4l/by-id/usb-Bison_HD_Webcam_200901010001-video-index0' |
df28c994365d
different camera and crop settings for prod
drewp@bigasterisk.com
parents:
1957
diff
changeset
|
66 '/dev/v4l/by-id/usb-Generic_FULL_HD_1080P_Webcam_200901010001-video-index0') |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
67 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
68 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
69 class Live(cyclone.websocket.WebSocketHandler): |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
70 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
71 def connectionMade(self, *args, **kwargs): |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
72 pipeline.liveImages.subscribe(on_next=self.onFrame) |
2046
9aa046cc9b33
replace greplin with prometheus throughout (untested)
drewp@bigasterisk.com
parents:
2043
diff
changeset
|
73 metrics('live_clients').offset(1) |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
74 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
75 def connectionLost(self, reason): |
1955
9ee42b88299b
vidref now has some stats
Drew Perttula <drewp@bigasterisk.com>
parents:
1954
diff
changeset
|
76 #self.subj.dispose() |
2046
9aa046cc9b33
replace greplin with prometheus throughout (untested)
drewp@bigasterisk.com
parents:
2043
diff
changeset
|
77 metrics('live_clients').offset(-1) |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
78 |
1941
0dc3715050cf
video recorder now makes mp4 per song
drewp@bigasterisk.com
parents:
1939
diff
changeset
|
79 def onFrame(self, cf: videorecorder.CaptureFrame): |
0dc3715050cf
video recorder now makes mp4 per song
drewp@bigasterisk.com
parents:
1939
diff
changeset
|
80 if cf is None: return |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
81 |
2046
9aa046cc9b33
replace greplin with prometheus throughout (untested)
drewp@bigasterisk.com
parents:
2043
diff
changeset
|
82 with metrics('live_websocket_frame_fps').time(): |
9aa046cc9b33
replace greplin with prometheus throughout (untested)
drewp@bigasterisk.com
parents:
2043
diff
changeset
|
83 self.sendMessage( |
9aa046cc9b33
replace greplin with prometheus throughout (untested)
drewp@bigasterisk.com
parents:
2043
diff
changeset
|
84 json.dumps({ |
9aa046cc9b33
replace greplin with prometheus throughout (untested)
drewp@bigasterisk.com
parents:
2043
diff
changeset
|
85 'jpeg': base64.b64encode(cf.asJpeg()).decode('ascii'), |
9aa046cc9b33
replace greplin with prometheus throughout (untested)
drewp@bigasterisk.com
parents:
2043
diff
changeset
|
86 'description': f't={cf.t}', |
9aa046cc9b33
replace greplin with prometheus throughout (untested)
drewp@bigasterisk.com
parents:
2043
diff
changeset
|
87 })) |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
88 |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
89 |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
90 class SnapshotPic(cyclone.web.StaticFileHandler): |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
91 pass |
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
92 |
1369
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
93 |
1986
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
94 class Time(PrettyErrorHandler, cyclone.web.RequestHandler): |
1858 | 95 |
1369
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
96 def put(self): |
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
97 body = json.loads(self.request.body) |
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
98 t = body['t'] |
1986
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
99 for listener in TimeStream.time_stream_listeners: |
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
100 listener.sendMessage(json.dumps({ |
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
101 'st': t, |
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
102 'song': body['song'], |
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
103 })) |
1369
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
104 self.set_status(202) |
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
105 |
6b5e079b3dbe
timeline hover goes to vidref
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
106 |
1986
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
107 class TimeStream(cyclone.websocket.WebSocketHandler): |
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
108 time_stream_listeners = [] |
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
109 |
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
110 def connectionMade(self, *args, **kwargs): |
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
111 TimeStream.time_stream_listeners.append(self) |
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
112 |
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
113 def connectionLost(self, reason): |
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
114 TimeStream.time_stream_listeners.remove(self) |
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
115 |
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
116 |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
117 class Clips(PrettyErrorHandler, cyclone.web.RequestHandler): |
1951
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
118 |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
119 def delete(self): |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
120 clip = URIRef(self.get_argument('uri')) |
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
121 videorecorder.deleteClip(clip) |
1951
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
122 |
1956 | 123 |
1951
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
124 class ReplayMap(PrettyErrorHandler, cyclone.web.RequestHandler): |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
125 |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
126 def get(self): |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
127 song = Song(self.get_argument('song')) |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
128 clips = [] |
1956 | 129 videoPaths = glob.glob( |
130 os.path.join(videorecorder.songDir(song), b'*.mp4')) | |
1955
9ee42b88299b
vidref now has some stats
Drew Perttula <drewp@bigasterisk.com>
parents:
1954
diff
changeset
|
131 for vid in videoPaths: |
1951
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
132 pts = [] |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
133 for line in open(vid.replace(b'.mp4', b'.timing'), 'rb'): |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
134 _v, vt, _eq, _song, st = line.split() |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
135 pts.append([float(st), float(vt)]) |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
136 |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
137 url = vid[len(os.path.dirname(os.path.dirname(showconfig.root())) |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
138 ):].decode('ascii') |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
139 |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
140 clips.append({ |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
141 'uri': videorecorder.takeUri(vid), |
1951
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
142 'videoUrl': url, |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
143 'songToVideo': pts |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
144 }) |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
145 |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
146 clips.sort(key=lambda c: len(cast(list, c['songToVideo']))) |
1994
1b690005aabd
little vidref player inside timeline
Drew Perttula <drewp@bigasterisk.com>
parents:
1986
diff
changeset
|
147 clips = clips[-int(self.get_argument('maxClips', '3')):] |
1951
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
148 clips.sort(key=lambda c: c['uri'], reverse=True) |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
149 |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
150 ret = json.dumps(clips) |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
151 log.info('replayMap had %s videos; json is %s bytes', len(clips), |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
152 len(ret)) |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
153 self.write(ret) |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
154 |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
155 |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
156 graph = SyncedGraph(networking.rdfdb.url, "vidref") |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
157 outVideos = videorecorder.FramesToVideoFiles( |
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
158 pipeline.liveImages, os.path.join(showconfig.root(), b'video')) |
1096
087f6cbe4b22
vidrefsetup tool now prepares a url that vidref will use for rpi camera requests
Drew Perttula <drewp@bigasterisk.com>
parents:
1089
diff
changeset
|
159 |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
160 port = networking.vidref.port |
1858 | 161 reactor.listenTCP( |
162 port, | |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
163 cyclone.web.Application( |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
164 handlers=[ |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
165 (r'/()', cyclone.web.StaticFileHandler, { |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
166 'path': 'light9/vidref', |
1945 | 167 'default_filename': 'index.html' |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
168 }), |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
169 (r'/setup/()', cyclone.web.StaticFileHandler, { |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
170 'path': 'light9/vidref', |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
171 'default_filename': 'setup.html' |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
172 }), |
1945 | 173 (r'/live', Live), |
1954
3ae1e7f8db23
vidref playback smoothness, autodelete short clips, manual-delete clips, vidref keyboard shortcuts
Drew Perttula <drewp@bigasterisk.com>
parents:
1951
diff
changeset
|
174 (r'/clips', Clips), |
1951
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
175 (r'/replayMap', ReplayMap), |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
176 (r'/snapshot', Snapshot), |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
177 (r'/snapshot/(.*)', SnapshotPic, { |
1951
9f0f2b39ad95
vidref web is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1945
diff
changeset
|
178 "path": 'todo', |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
179 }), |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
180 (r'/time', Time), |
1986
c8f0d1b9a171
timeline scrubbing shows up on vidref (again)
drewp@bigasterisk.com
parents:
1976
diff
changeset
|
181 (r'/time/stream', TimeStream), |
2046
9aa046cc9b33
replace greplin with prometheus throughout (untested)
drewp@bigasterisk.com
parents:
2043
diff
changeset
|
182 metricsRoute(), |
1939
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
183 ], |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
184 debug=True, |
6f49dc917aa3
start vidref web version. v4l camera frames to web page is working
Drew Perttula <drewp@bigasterisk.com>
parents:
1866
diff
changeset
|
185 )) |
941
1d9547f90737
vidref can take snapshots and serve them back
drewp@bigasterisk.com
parents:
937
diff
changeset
|
186 log.info("serving on %s" % port) |
937 | 187 |
935 | 188 reactor.run() |