Jitsi Transcription

Hello Jitsi community,

I’m seeking for a setup guide for Jitsi transcription using Google Speech to text. I have followed every post that I could find but none of them enabled the transcription. I can see the button but nothing happens when clicked.

Configurations done for Ubuntu(18) package based setup as follows,

sudo apt install jigasi

Google installation

"export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | 
sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - 
sudo apt-get update && sudo apt-get install google-cloud-sdk google-cloud-sdk-app-engine-java gcloud init gcloud auth application-default login"

Added google app configuration json path as follows in /etc/jitsi/jigasi/config

GOOGLE_APPLICATION_CREDENTIALS=/etc/jitsi/jigasi/app-config.json

Google app config file

{
  "type": "service_account",
  "project_id": "sssss",
  "private_key_id": "ddddddddddddddddddd",
  "private_key": "-----BEGIN PRIVATE KEY-----\nsssssssssssssss\n-----END PRIVATE KEY-----\n",
  "client_email": "ssssss@ssssssss.iam.gserviceaccount.com",
  "client_id": "xxxxxxxxxxxxxxxxxxx",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/ssssss"
}

Edited /etc/jitsi/jigasi/sip-communicator.properties

org.jitsi.jigasi.ENABLE_TRANSCRIPTION=true
org.jitsi.jigasi.ENABLE_SIP=false
org.jitsi.jigasi.transcription.DIRECTORY=/var/lib/jigasi/transcripts
org.jitsi.jigasi.transcription.BASE_URL=http://localhost/
org.jitsi.jigasi.transcription.jetty.port=1
org.jitsi.jigasi.transcription.ADVERTISE_URL=true
org.jitsi.jigasi.transcription.SAVE_TXT=true
org.jitsi.jigasi.transcription.SEND_JSON=false
org.jitsi.jigasi.transcription.SEND_TXT=true

Logs

2020-12-18 10:04:58.283 SEVERE: [12] impl.configuration.ConfigurationActivator.log() Error creating c lib instance for fixing file permissions
java.nio.file.FileSystemException: /etc/jitsi/jigasi: Operation not permitted
        at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:100)
org.jitsi.impl.neomedia.device.DeviceConfiguration.log() Failed to register custom Renderer org.jitsi.impl.neomedia.jmfext.media.renderer.audio.PulseAudioRenderer with JMF.
java.lang.IllegalStateException: audioSystem
        at org.jitsi.impl.neomedia.jmfext.media.renderer.audio.PulseAudioRenderer.<init>(PulseAudioRenderer.java:156)
org.jitsi.jigasi.JigasiBundleActivator.start().223 skipped initialization of SipGateway
org.jitsi.rest.AbstractJettyBundleActivator.log() Failed to initialize and/or start a new Jetty HTTP(S) server instance.
java.net.SocketException: Permission denied

 org.jitsi.impl.osgi.framework.BundleImpl.start() Error starting bundle: org.jitsi.jigasi.rest.TranscriptServerBundleActivator@48de9826
java.net.SocketException: Permission denied
org.jitsi.impl.osgi.framework.launch.FrameworkImpl.startLevelChanged() Error changing start level
org.osgi.framework.BundleException: BundleActivator.start
java.net.SocketException: Permission denied
WARNING: [12] org.jitsi.jigasi.xmpp.CallControlMucActivator.start().99 MUC call control disabled.
org.jitsi.meet.ComponentMain.log() java.net.ConnectException: Connection refused (Connection refused), host:test.com, port:5347
org.xmpp.component.ComponentException: java.net.ConnectException: Connection refused

this is your problem. The jigasi instance is not configured to connect to the shard using muc control room. Follow the readme to configure it.

Hello,

Thanks for the reply.

Added following in /etc/jitsi/jigasi/sip-communicator.properties

org.jitsi.jigasi.xmpp.acc.USER_ID=email@email.com
org.jitsi.jigasi.xmpp.acc.PASS=PASS
org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=false

Registered jigasi again

prosodyctl register jigasi auth.meet.test.com

Following changes are already exists in “/etc/prosody/conf.d/test.com.cfg.lua”
Are there any changes to be done in “/etc/prosody/prosody.cfg.lua”?

Component "internal.auth.meet.example.com" "muc"
   storage = "memory"
   modules_enabled = {
     "ping";
   }
   admins = { "focus@auth.meet.example.com", "jigasi@auth.meet.example.com" }
   muc_room_locking = false
   muc_room_default_public_jids = true ```

But still no luck! Same error comes up. Are there any steps to follow beyond https://github.com/jitsi/jigasi?

You may wanna take a look here.

After modifying jigasi config do you restart it?

Yes I restarted the service

As I don’t see it in your script.

Attach the complete logs after a restart of jigasi, there must be something about it…

Attached logs link

There are 11 restart of jigasi in the log and I don’t see jigasi to use the muc config, that is visible in the logs what props it uses so you can validate that. Also your jigasi is still configured to use component.

You can switch installing it from unstable, there the component code is totally dropped and it auto-configures itself to use mucs.
In the old code there was a param --no-component or something like that to disable the component and skip all those exceptions in the logs …
So basically your jigasi is mis-configured

Hey,

Thanks again for the explanation.

Should the user be already created in prosody before installing Jigasi?

Yeah, I installed directly from ubuntu packages. So for the unstable version, should I build from source? Or can I get the specific version from packages?

Will a purge revert the Jigasi based config in other components?

Also, appreciate if you can share any steps that I should follow to activate Google speech to text for Jitsi. Transcription should work without SIP gateway connection right?

Yes. New one do it as part of the installation. https://github.com/jitsi/jigasi/blob/fe7fc5f32acec373c97c7695779cb04fd1a81d17/debian/postinst#L157

There is a repo: deb https://download.jitsi.org unstable/

We will be pushing the latest jigasi version to stable on next jitsi-meet release.

Only the control.yourdomain part will be left in prosody config, I think.

Yes. https://github.com/jitsi/jigasi#using-jigasi-to-transcribe-a-jitsi-meet-conference

I’ll try that!

I followed the guide you’ve posted here and a few comments from you only. Hope the unstable version fixes the same.

Thank you for the support!

Hey @damencho

I have purged started the setup fresh in another instance. Installed Jigasi from unstable repo.

Logs after starting Jigasi

2020-12-22 06:23:27.053 INFO: [1] org.jitsi.impl.configuration.ConfigurationServiceImpl.log() org.jitsi.jigasi.transcription.SEND_TXT=false
2020-12-22 06:23:27.054 INFO: [1] org.jitsi.impl.configuration.ConfigurationServiceImpl.log() org.jitsi.jigasi.xmpp.acc.AUTO_DISCOVER_STUN=false
2020-12-22 06:23:27.054 INFO: [1] org.jitsi.impl.configuration.ConfigurationServiceImpl.log() net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.H264/90000=0
2020-12-22 06:23:27.054 INFO: [1] org.jitsi.impl.configuration.ConfigurationServiceImpl.log() net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.PCMU/8000=0
2020-12-22 06:23:27.054 INFO: [1] org.jitsi.impl.configuration.ConfigurationServiceImpl.log() net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.red/90000=0
2020-12-22 06:23:27.054 INFO: [1] org.jitsi.impl.configuration.ConfigurationServiceImpl.log() org.jitsi.jigasi.transcription.jetty.port=-1
2020-12-22 06:23:27.054 INFO: [1] org.jitsi.impl.configuration.ConfigurationServiceImpl.log() net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.Encodings.GSM/8000=0
2020-12-22 06:23:27.054 INFO: [1] org.jitsi.impl.configuration.ConfigurationServiceImpl.log() org.jitsi.jigasi.transcription.DIRECTORY=/var/lib/jigasi/transcripts
2020-12-22 06:23:27.055 INFO: [1] org.jitsi.impl.configuration.ConfigurationServiceImpl.log() net.java.sip.communicator.impl.protocol.sip.acc1403273890647.Encodings.SILK/12000=0
2020-12-22 06:23:27.055 INFO: [1] org.jitsi.impl.configuration.ConfigurationServiceImpl.log() org.jitsi.jigasi.MUC_SERVICE_ADDRESS=conference.meet.example.com
2020-12-22 06:23:27.055 INFO: [1] org.jitsi.impl.configuration.ConfigurationServiceImpl.log() net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.DOMAIN_BASE=meet.example.com
2020-12-22 06:23:27.055 INFO: [1] org.jitsi.impl.configuration.ConfigurationServiceImpl.log() net.java.sip.communicator.impl.notifications.eventType1608618206703.actions.actionType1608618206703.enabled=true
2020-12-22 06:23:27.055 INFO: [1] org.jitsi.impl.configuration.ConfigurationServiceImpl.log() net.java.sip.communicator.impl.protocol.jabber.acc-xmpp-1.AUTO_DISCOVER_JINGLE_NODES=false
2020-12-22 06:23:27.478 INFO: [39] impl.protocol.jabber.ProtocolProviderServiceJabberImpl.authenticated().2423 Authenticated: false
2020-12-22 06:23:27.483 INFO: [39] org.jitsi.jigasi.xmpp.CallControlMucActivator.joinCommonRoom().286 Joining call control room: JigasiBrewery@internal.auth.meet.example.com pps:ProtocolProviderServiceJabberImpl(Jabber:jigasi@auth.meet.example.com)
2020-12-22 06:23:27.517 INFO: [44] impl.protocol.jabber.ChatRoomJabberImpl.joined().1322 jigasibrewery@internal.auth.meet.example.com/focus has joined the jigasibrewery@internal.auth.meet.example.com chat room.

Logs after “CC” button was clicked

2020-12-22 06:27:58.804 INFO: [61] org.jitsi.jigasi.xmpp.CallControl.handleDialIq().195 [ctx=16086184788011991184687] Got dial request null -> jitsi_meet_transcribe room: test1234@conference.meet.example.com
2020-12-22 06:27:59.024 INFO: [61] org.jitsi.jigasi.JvbConference.start().447 [ctx=16086184788011991184687] Starting JVB conference room: test1234@conference.meet.example.com
2020-12-22 06:27:59.037 INFO: [61] org.jitsi.jigasi.JvbConference.setXmppProvider().590 [ctx=16086184788011991184687] Using ProtocolProviderServiceJabberImpl(Jabber:38a1c701@meet.example.com/38a1c701)
2020-12-22 06:27:59.078 INFO: [63] org.igniterealtime.jbosh.BOSHClient.init() Starting with 1 request processors
2020-12-22 06:27:59.168 WARNING: [64] org.jivesoftware.smack.bosh.XMPPBOSHConnection.shutdown() shutdown
java.lang.NullPointerException
        at org.igniterealtime.jbosh.BOSHClient.send(BOSHClient.java:494)
        at org.igniterealtime.jbosh.BOSHClient.disconnect(BOSHClient.java:586)
        at org.igniterealtime.jbosh.BOSHClient.disconnect(BOSHClient.java:567)
        at org.jivesoftware.smack.bosh.XMPPBOSHConnection.shutdown(XMPPBOSHConnection.java:266)
        at org.jivesoftware.smack.bosh.XMPPBOSHConnection.notifyConnectionError(XMPPBOSHConnection.java:417)
        at org.jivesoftware.smack.bosh.XMPPBOSHConnection$BOSHConnectionListener.connectionEvent(XMPPBOSHConnection.java:464)
        at org.igniterealtime.jbosh.BOSHClient.fireConnectionClosedOnError(BOSHClient.java:1684)
        at org.igniterealtime.jbosh.BOSHClient.dispose(BOSHClient.java:713)
        at org.igniterealtime.jbosh.BOSHClient.processExchange(BOSHClient.java:1138)
        at org.igniterealtime.jbosh.BOSHClient.processMessages(BOSHClient.java:999)
        at org.igniterealtime.jbosh.BOSHClient.access$300(BOSHClient.java:100)
        at org.igniterealtime.jbosh.BOSHClient$RequestProcessor.run(BOSHClient.java:1728)
        at java.lang.Thread.run(Thread.java:748)
2020-12-22 06:27:59.169 WARNING: [64] org.jivesoftware.smack.AbstractXMPPConnection.callConnectionClosedOnErrorListener() Connection XMPPBOSHConnection[not-authenticated] (1) closed with error
org.igniterealtime.jbosh.BOSHException: Could not obtain response
        at org.igniterealtime.jbosh.ApacheHTTPResponse.awaitResponse(ApacheHTTPResponse.java:251)
        at org.igniterealtime.jbosh.ApacheHTTPResponse.getBody(ApacheHTTPResponse.java:192)
        at org.igniterealtime.jbosh.BOSHClient.processExchange(BOSHClient.java:1123)
        at org.igniterealtime.jbosh.BOSHClient.processMessages(BOSHClient.java:999)
        at org.igniterealtime.jbosh.BOSHClient.access$300(BOSHClient.java:100)
        at org.igniterealtime.jbosh.BOSHClient$RequestProcessor.run(BOSHClient.java:1728)
        at java.lang.Thread.run(Thread.java:748)
Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.ssl.Alert.createSSLException(Alert.java:131)
        at sun.security.ssl.TransportContext.fatal(TransportContext.java:324)
        at sun.security.ssl.TransportContext.fatal(TransportContext.java:267)
        at sun.security.ssl.TransportContext.fatal(TransportContext.java:262)
        at sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:654)
        at sun.security.ssl.CertificateMessage$T12CertificateConsumer.onCertificate(CertificateMessage.java:473)
        at sun.security.ssl.CertificateMessage$T12CertificateConsumer.consume(CertificateMessage.java:369)
        at sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:377)
        at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)
        at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:422)
        at sun.security.ssl.TransportContext.dispatch(TransportContext.java:182)
        at sun.security.ssl.SSLTransport.decode(SSLTransport.java:149)
        at sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1143)
        at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1054)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:394)
        at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:543)
        at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:409)
        at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:479)
        at org.apache.http.conn.scheme.SchemeSocketFactoryAdaptor.connectSocket(SchemeSocketFactoryAdaptor.java:66)
        at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177)
        at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144)
        at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:131)
        at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:611)
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:446)
        at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:882)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
        at org.igniterealtime.jbosh.ApacheHTTPResponse.awaitResponse(ApacheHTTPResponse.java:235)
        ... 6 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:456)
        at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:323)
        at sun.security.validator.Validator.validate(Validator.java:271)
        at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:315)
        at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:223)
        at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:129)
        at sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:638)
        ... 29 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
        at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
        at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:451)
        ... 35 more
2020-12-22 06:27:59.177 INFO: [63] impl.protocol.jabber.OperationSetBasicTelephonyJabberImpl.registrationStateChanged().127 Jingle : ON 
2020-12-22 06:27:59.178 INFO: [63] org.jitsi.jigasi.JvbConference.registrationStateChanged().641 [ctx=16086184788011991184687] Registering XMPP.
2020-12-22 06:27:59.178 WARNING: [63] org.jivesoftware.smack.SASLAuthentication.selectMechanism() Server did not report any SASL mechanisms
2020-12-22 06:27:59.179 SEVERE: [63] impl.protocol.jabber.ProtocolProviderServiceJabberImpl.connectAndLogin().1003 Failed to connect to XMPP service
org.jivesoftware.smack.SmackException: No supported and enabled SASL Mechanism provided by server. Server announced mechanisms: []. Registered SASL mechanisms with Smack: [SASL Mech: GSSAPI, Prio: 100, SASL Mech: SCRAM-SHA-1-PLUS, Prio: 100, SASL Mech: SCRAM-SHA-1, Prio: 110, SASL Mech: DIGEST-MD5, Prio: 200, SASL Mech: CRAM-MD5, Prio: 300, SASL Mech: PLAIN, Prio: 400, SASL Mech: X-OAUTH2, Prio: 410, SASL Mech: EXTERNAL, Prio: 500, SASL Mech: ANONYMOUS, Prio: 500]. Enabled SASL mechanisms for this connection: [ANONYMOUS]. Blacklisted SASL mechanisms: [SCRAM-SHA-1-PLUS].
        at org.jivesoftware.smack.SASLAuthentication.selectMechanism(SASLAuthentication.java:361)
        at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:192)
        at org.jivesoftware.smack.bosh.XMPPBOSHConnection.loginInternal(XMPPBOSHConnection.java:222)
        at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:491)
        at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:448)
        at net.java.sip.communicator.impl.protocol.jabber.AnonymousLoginStrategy.login(AnonymousLoginStrategy.java:84)
        at net.java.sip.communicator.impl.protocol.jabber.ProtocolProviderServiceJabberImpl.connectAndLogin(ProtocolProviderServiceJabberImpl.java:1371)
        at net.java.sip.communicator.impl.protocol.jabber.ProtocolProviderServiceJabberImpl.connectAndLogin(ProtocolProviderServiceJabberImpl.java:970)
        at net.java.sip.communicator.impl.protocol.jabber.ProtocolProviderServiceJabberImpl.initializeConnectAndLogin(ProtocolProviderServiceJabberImpl.java:795)
        at net.java.sip.communicator.impl.protocol.jabber.ProtocolProviderServiceJabberImpl.register(ProtocolProviderServiceJabberImpl.java:500)
        at org.jitsi.jigasi.util.RegisterThread.run(RegisterThread.java:59)
2020-12-22 06:27:59.180 SEVERE: [63] org.jitsi.jigasi.JvbConference.registrationStateChanged().645 [ctx=16086184788011991184687] XMPP Connection failed.
2020-12-22 06:27:59.181 WARNING: [63] org.jitsi.jigasi.JvbConference.leaveConferenceRoom().1052 [ctx=16086184788011991184687] MUC room is null
2020-12-22 06:28:04.038 SEVERE: [61] org.jitsi.jigasi.xmpp.CallControlMucActivator.processIQ().589 Error processing RayoIq
java.lang.Exception: Fail to join muc!
        at org.jitsi.jigasi.xmpp.CallControlMucActivator$WaitToJoinRoom.waitToJoinRoom(CallControlMucActivator.java:688)
        at org.jitsi.jigasi.xmpp.CallControlMucActivator$DialIqHandler.setDialResponseAndRegisterHangUpHandler(CallControlMucActivator.java:621)
        at org.jitsi.jigasi.xmpp.CallControlMucActivator$DialIqHandler.processIQ(CallControlMucActivator.java:578)
        at org.jitsi.jigasi.xmpp.CallControlMucActivator$DialIqHandler.processIQ(CallControlMucActivator.java:556)
        at org.jitsi.jigasi.xmpp.CallControlMucActivator$RayoIqHandler.handleIQRequest(CallControlMucActivator.java:741)
        at org.jivesoftware.smack.AbstractXMPPConnection$4.run(AbstractXMPPConnection.java:1188)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748) 

FYI
I have added the following line as well

net.java.sip.communicator.service.gui.ALWAYS_TRUST_MODE_ENABLED=true

Thanks in advance

Solved. The SSL certificate was the issue. Self signed certificate does not work. Once I added the certificate result was this,

Before I end the thread I have two questions

  1. Is it possible to hide transcriber as a user in call?
  2. Is it possible to show closed caption for everyone in meeting? (Only moderator can see closed captions now)
  1. For the user connection settings use a domain that is set as hidden domain in config.js.
    jigasi/sip-communicator.properties at f020438ffbef9c7d17e0bd4977e3a4ec920eae00 · jitsi/jigasi · GitHub
    jitsi-meet/config.js at master · jitsi/jitsi-meet · GitHub

  2. Yes, that is fixed in the latest unstable packages of jitsi-meet.

Alright. I’ll check it out.

Thanks Damian, for your constant support.

Hello @sahan_gjs
I have a Follow so many Documentations for setup the Jigasi with Google speech to text but not working any Solutions.
can you guide me or provide steps how you can configure Jigasi for your Projects!

Thanks in Advance:)

For the record, I’m using Ubuntu 18.04 with Jitsi-meet stable packages. I’ve switched to unstable only for Jigasi. Check your logs at the time of restart to see if Jigasi was able to join. If not, there’s something wrong with configuration. So, I did below,

Make sure Google account is initialized and a new project is created for speech to text. Select that project at the time of initializing google. Also remember to download the json file. Copy that file into the machine. I copied the same under following path

/etc/jitsi/jigasi/google.json

Purge Jigasi if you have it already installed.

sudo apt purge jigasi

Switch to unstable packages of Jigasi

curl https://download.jitsi.org/jitsi-key.gpg.key | sudo sh -c 'gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg'
echo 'deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org unstable/' | sudo tee /etc/apt/sources.list.d/jitsi-unstable.list > /dev/null

Update apt

sudo apt update

Install it again

sudo apt install jigasi

You must follow every step of this guide (Pay close attention to every line). Especially section related to transcription.

https://github.com/jitsi/jigasi

**Prosody registration can be skipped if it is already registered. If not, register Jigasi and make sure to replace password in sip-communicator of Jigasi in XMP section.

Add google json file location under /etc/jitsi/jigasi/config

GOOGLE_APPLICATION_CREDENTIALS=/etc/jitsi/jigasi/google.json

Enable CC in interface-config of Jitsi meet.

If you followed all the steps correctly, you should see a user called ‘Transcriber’ joining the call when you press CC button.