Action Sports Delayed Replay Stream

My local indoor skatepark has had some recent financial troubles (rent increase). So to help bring value to the space, I will be building them a delayed stream replay system.

The idea is this: There is a camera pointed at the airbag or foampit, and the stream is played on a near-by screen (or perhaps projected) with a ~20 second (configurable) delay. This allows the rider to perform their trick, and gives them time to get off the airbag or out of the foampit, and view their performance. This provides immediate feedback on what adjustments need to be made, which should help accelerate the learning process.

For example maybe the rider is over-rotating a back flip. The rider can then see that in the playback and make adjustments accordingly. Without relying on someone to film for them and having to check the footage between runs.

This is something I had always wanted at the facility ever since I saw the one at Woodward foampit in a Scotty Cranmer video. Woodward is one of the largest skateparks (or rather a collection of skateparks) in the world. I hope to one day to travel there and ride it! But until then my goal is to bring this tech to my local park, as well as provide a setup guide so any skatepark can replicate the set up. This could also provide value to other sports too, say figure skating?

Example at ~4:20:

And of course like everything I do it will be open source and leverage existing open source technology where possible.

To handle the steaming, the obvious choice is OBS which already supports delay. But there are some additional things I’d like to add that will require OpenCV. And luckily it seems there is already support for OBS + OpenCV with the ‘OBS Virtual Camera capture’ feature!


I have already discussed this project with the owner of the park, and one of the features they want is a dual-stream. One for the riders at the airbag, and one for the parents in the seating area. This will all be local/internal, not streamed on the internet.

To make it even better, I would also very much like a slow-motion playback view for better analysis, perhaps in a corner sub-view. To accomplish this should be relatively simple using OpenCV to detect motion in a given configurable area, and detecting a change in pixels to trigger the recording slow-motion start phase (or perhaps a small buffer before motion). Record a given configurable clip of say ~3-5 seconds (because you’re not in the air that long). Then slow it down and add it to the stream in a second smaller corner view.

I have used OpenCV before to play with facial recognition using LBPH (changes in lighting ended up always breaking the models/confidence), so this should be much simpler…

A final bonus feature would be to allow riders/parents to perhaps save copies of their own clips. Since the motion trigger would already handle the clipping process, could have all the clips of the day available on a local server, and wiped at the end of the day to avoid perpetually eating storage. Not sure what the privacy implications of this would be (they already have cameras for security/liability), but would probably only want riders having access to their own clips for example. (could perhaps be requested from and validated by staff). But this is maybe a v2 or v3 problem. The main goal is simply local delayed steam.

So the requirements are:

  1. local stream. doesn’t need to touch the outside internet.
  2. multiple viewing clients: only 2 for now
  3. configurable delay (already handled by OBS)
  4. bonus: OpenCV motion trigger for slow-mo subview
  5. extra bonus: auto clip generation for rider to obtain copies of.