> Interesting idea. That sounds more feasible, but I still need to figure out: 1. How to avoid bombarding the player with download requests, 2. Performance, and 3. How to stitch together the recordings. I'll see what I can do.
I don't think you need to bombard the player - I was thinking that you might be able to use the AJAX plugin to read the recorded video via its URL. From that plugin's page:
> Binary data
> The AJAX object can receive resources as binary, and also post binary data, using the Binary Data object. This is also useful to fetch local resources like canvas snapshot URLs or video recording URLs, and load them in to a Binary Data object to do something else with them, like save it to storage or upload it to a server.
So:
- Create an array with 30 entries
- Record 1 second
- Store its URL in the array
- Delete the last entry (i.e. the 31st) every time a new video is logged
- Player clicks the download button
- Loop through the 30 entries in the array
- Use the AJAX plugin to retrieve each clip via its URL
- Some magic here to stitch all the clips together (might need raw JavaScript)
- Serve the resulting 30 clip to the user as a download
That might solve the problem of not wanting to prompt the user to download every video, but you might have a similar problem requesting permission to start the recording. This is from the Video Recorder manual:
> For security reasons, browsers will prompt the user before the recording starts. To avoid the prompt annoying users, this action may only be allowed in a user input trigger, e.g. On button clicked, On touch start etc.
And I'm not exactly sure what that implies!
>
Thanks for the feedback. I used the list to make a system in a test project that downloads all of the last 30 second clips, but it keeps giving "check internet access" errors, and I still need a way to stich them together (both issues may be related, as the constant downloads may be causing the error while only downloading one file may not).
I've looked around a bit and I think your best bet is to go the javascript route. It might not be as hard as it seems at first.
Use the mediarecorder api, which I assume is what the plugin also uses under the hood
https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder
Specifically note this part
> MediaRecorder.start()
> Begins recording media; this method can optionally be passed a timeslice argument with a value in milliseconds. If this is specified, the media will be captured in separate chunks of that duration, rather than the default behavior of recording the media in a single large chunk.
So you can specifiy to automatically record chunks of 1 second. Every second from then on will fire the dataavailable event.
Within this event you can store the created data chunks however you please (e.g. an array of 30 for 30 seconds of recording)
Then when the user requests the highlight you can combine them like so (and I think this should generate a blob url that you can then invoke a download on)
> function play() {
var superBuffer = new Blob(recordedChunks);
}
It's basically what citron2010 suggested but handling it in js is going to be much easier than doing some roundabout way in events.
EDIT: It should also avoid the issue with requesting permission. This should only request permission once, when the recording starts. After that it's just a continous recording, that you can tap in at any given moment to extract the last 30 seconds from.
Yeah I feared that the use of JS may be inevitable. I have very little experience with text-based coding, but I suppose I can try. I think that if I can use both event sheets (for the main code) and JS (for stitching the files together) I may be able to make it work.
If anyone wants to see what I have or try a solution themselves here is the sample file: drive.google.com/file/d/1q1x6LwLyEeOzNXZGZTuas6cDnQT5RUMS/view