annotate bin/vidref @ 2144:0bc66003fa47

copy from DefinitelyTyped
author drewp@bigasterisk.com
date Wed, 17 May 2023 18:53:10 -0700
parents 9aa046cc9b33
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
d96c09669b40 vidref change logger
drewp@bigasterisk.com
parents: 729
diff changeset
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
ec816fd31c83 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1955
diff changeset
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
ec816fd31c83 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1955
diff changeset
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
ec816fd31c83 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1955
diff changeset
24 from rdflib import URIRef
ec816fd31c83 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1955
diff changeset
25 from twisted.internet import reactor, defer
ec816fd31c83 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1955
diff changeset
26 import cyclone.web, cyclone.httpclient, cyclone.websocket
ec816fd31c83 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1955
diff changeset
27
ec816fd31c83 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1955
diff changeset
28 from cycloneerr import PrettyErrorHandler
ec816fd31c83 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1955
diff changeset
29 from light9 import networking, showconfig
ec816fd31c83 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1955
diff changeset
30 from light9.newtypes import Song
ec816fd31c83 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1955
diff changeset
31 from light9.vidref import videorecorder
ec816fd31c83 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1955
diff changeset
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
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1692
diff changeset
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
ec816fd31c83 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1955
diff changeset
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
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1692
diff changeset
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
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1692
diff changeset
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
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1692
diff changeset
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
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1692
diff changeset
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
ec816fd31c83 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1955
diff changeset
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
ec816fd31c83 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1955
diff changeset
129 videoPaths = glob.glob(
ec816fd31c83 reformat
Drew Perttula <drewp@bigasterisk.com>
parents: 1955
diff changeset
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
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1692
diff changeset
161 reactor.listenTCP(
7772cc48e016 reformat all python
drewp@bigasterisk.com
parents: 1692
diff changeset
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
157985a971dc non-working WIP for vidref web
drewp@bigasterisk.com
parents: 1942
diff changeset
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
157985a971dc non-working WIP for vidref web
drewp@bigasterisk.com
parents: 1942
diff changeset
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
b0337e6f68f1 refactor to videorecorder.py
drewp@bigasterisk.com
parents: 935
diff changeset
187
935
89adbbb06bcd vidref run in twisted mainloop
drewp@bigasterisk.com
parents: 882
diff changeset
188 reactor.run()