-
Notifications
You must be signed in to change notification settings - Fork 5.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Recording: replace Kurento as the recording adapter #13999
Comments
Thanks Paulo for (as usual) a very well written issue that provides a model for others. |
Any update on this? Thank you |
SFU/Recorder integration draft
Recorder API (draft)startRecording (SFU -> Recorder){
id: 'startRecording',
recordingSessionId: 'aebcdf', // <String>, requester-defined - error out if collision
sdp: 'base64offer', // <String>, Base64 SDP offer ({ type: 'offer', sdp })
fileName: 'screenshare/meetingId/etc.webm', // <String>, file name INCLUDING format (e.g.: .webm), relative
} startRecordingResponse (Recorder -> SFU)Notes
{
id: 'startRecordingResponse',
recordingSessionId: 'aebcdf',
fileName: '/var/recorder/screenshare/meetingId/etc.webm', // <String | undefined>, *absolute file name*
status: 'ok|failed',
sdp: 'base64answer', // <String | undefined>, Base64 SDP answer ({ type: 'answer', sdp })
error: 'etc', // <String | undefined>, implementer-defined
} recordingRtpStatusChanged (Recorder -> SFU)Notes
{
id: 'recordingRtpStatusChanged', // media started or stopped flowing
status: 'flowing|not_flowing',
recordingSessionId: 'aebcdf',
timestampUTC: '1676487150880', // last written frame timestamp, UTC, wall clock
timestampHR: '22668783783' // last written frame timestamp, system, high resolution
} stopRecording (SFU -> Recorder){
id: 'stopRecording',
recordingSessionId: 'aebcdf',
} recordingStopped (Recorder -> SFU){
id: 'recordingStopped',
recordingSessionId: 'aebcdf',
reason: 'SOME_TERMINATION_REASON', // implementer-defined
timestampUTC: '1676487150880', // last written frame timestamp, UTC, wall clock
timestampHR: '22668783783' // last written frame timestamp, system, high resolution
} Example sequence diagrams |
For tracking, a few things I'll looking into currently in the new recorder - a few benign, others breaking:
Things I plan on looking into afterwards, shortest term:
|
The replacement is already usable under a feature flag in 2.7 and is the default in the 3.0 branch. |
Is your feature request related to a problem? Please describe.
Kurento is being used as a recorder for mediasoup as an intermediate solution.
It needs to be replaced by something else that is 1) lightweight/low footprint 2) mantained 3) portable
Describe the solution you'd like
There are few options. Those that I have in mind revolve around using an "external" RTP endpoint provider
that would receive streams from mediasoup and then mux those into media containers (always preferably webm or mkv).
Being an RTP endpoint means it would handle packet loss/jitter/et al. The inner workings of such an endpoint provider largely
depends on which platform is chosen (ie.: would it be a decoupled, controllable service with an HTTP interface? would it
be controlled by webrtc-sfu via processes or FFIs? ...)
The alternative would be to extend mediasoup itself to do that. The problem is that mediasoup transports do not
act as endpoints (AFAIK), so it would not be just a straightforward "dump the producer's streams into a container" because
everything an endpoint does (packet loss/jitter/et al.) would need to be accounted for.
Describe alternatives you've considered
Focusing on the RTP endpoint approach:
be that much of pain to use via a Node.js application. That was prototyped and can currently be enabled in webrtc-sfu. It is controlled via ffmpeg processes, so high level and not that flexible. Very lightweight, though. There are a few problems with the ffmpeg prototype that might be not so straightforward to fix.
Additional information
Stems from #12894 (comment)
The text was updated successfully, but these errors were encountered: