Git Product home page Git Product logo

jitsilocalscreenrecorder's Introduction

Local Jitsi Meet Screen Recorder

Description

Quick hack to record your self hosted Jitsi Meet session locally, just using your browser without Jibri. Uses getDisplayMedia just to capture user selected screen and local Jitsi audio streams from each participants. Captures the audio stream of the current user from the selected microphone in the Jitsi interface. Thus, if the microphone is muted, then the user's sound will be muted. When new participants are connected to conference, the recorder also captures theirs audio streams.

Installation

Installation assumes Jitsi Meet's web files are located in /usr/share/jitsi-meet/index.html. Simply need to insert recorder.js in the head section:

<head>
    ...
    <script src="libs/app.bundle.min.js?v=5056"></script>
    <script src="static/recorder.js"></script>
    ...
<head>

Integration

Last checked version: docker-jitsi-meet stable-7001

The recorder implementation does not provide an additional interface. In any case, you can add the interface yourself. It is recommended to use the Jitsi Iframe API. Communication with the recorder takes place using Cross-window communication jitsiIframeApi.getIFrame().contentWindow.postMessage(command, '*');. Before initializing Jitsi Iframe API it is required to subscribe to window event message for listening commands from the recorder.

Commands for the recorder:

  • {type: 'recorder_start', data: {external_save: boolean}} starts recording and prompts the user to select a screen to record; external_save allows to save recording data yourself and passes chunks to the parent window every second
  • {type: 'recorder_stop'} stops recording and prompts the user to save the file or saves the file without notification depending on the browser settings

Commands from the recorder:

  • {type: 'recorder_ready'} the recorder is initialized and ready to receive commands to record the screen
  • {type: 'recorder_start'} notification that recording was started. Obviously that after user will choose video stream
  • {type: 'recorder_stop'} recording stopped unexpectedly and prompted to save the file. This can happen if the user has stopped capture of the screen through the browser interface
  • {type: 'recorder_error'} errors have occurred on the recorder side. it is recommended to perform the same actions in your interface as when stopping recording. The recorder will display an error in the console
  • {type: 'recorder_data', data: Blob} chunks of data received if the parameter external_save is enabled

It is recommended to start screen recording only after all the conditions are met:

  • recorder announced that it is ready to receive commands through the recorder_ready command
  • videoConferenceJoined event occurred in Jitsi Iframe API

Browser compatibility

Latest versions of all popular desktop browsers

Electron support

Yes. The solution uses the JitsiMeetScreenObtainer.openDesktopPicker for the electron.

jitsilocalscreenrecorder's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

jitsilocalscreenrecorder's Issues

JitsiLocalScreenRecorder can it handle the new participants' audio stream?

First of all, this JitsiLocalScreenRecorder has been very helpful as it provides some important ideas that are integral to the part of a local conference recorder.

Pardon me as I don't have the chance to test it yet, but can this code support the audio streams of a new participant that is joined after the recording has been started? I checked the code and didn't see that use case handled, but I could be very wrong (and I will be delete this thread if that happens).

If this code doesn't handle the case of new participants joining, can you provide some suggestion whether I can add some audio stream of the new participant when a recording session is ongoing (and without stopping the recording session)?

Thanks.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.