My (failed) Jigasi transcription review - maybe it helps someone

Hi everyone,

it seems many struggle to install and setup jigasi, just like me.
My goal is to use jigasi for transcription of meetings.

I will summarise my steps here, maybe it helps someone. For me nothing works and I am totally lost.

My current errors:

  • No transcription (neither clicking CC button, nor when I try to add URI jitsi_meet_transcribe via + button)
Jicofo 2020-05-06 18:39:02.546 SEVERE: [64] org.jitsi.jicofo.jigasi.TranscriberManager.log() Error finding room for null
Jicofo 2020-05-06 18:39:02.547 INFO: [64] org.jitsi.jicofo.jigasi.TranscriberManager.log() Attempting to invite transcriber
  • SIP invitation fails, UI error with “Failed to invite participants”

Docu used

Main documentation is the official GitHub docu at: https://github.com/jitsi/jigasi

Server setup:

  • Everything on one server (Jitsi, prosody, video bridge, jicofo, jagsi)

Versions:

  • Unstable repo
  • Ubuntu LTS 18.04 on Digital Ocean

Jigasi install:

  • I decided to install jigasi via apt.
  • integrated with systemctl
  • Jigasi as component

Authentication:

  • Prosody and jicofo are configured for authentication

SIP:

  • Created linphone SIP account

Steps:

Install Jigasi

apt-get -y install jigasi

Register new user for jigs

(Using Jigasi to transcribe a Jitsi Meet conference)

prosodyctl register jigasi.service meet.my.tld secret.pass.123

Add jigasi user to config.

I added the password in cleartext. Somewhere in the forum it says PASSWORD is base64, PASS is cleartext. (I tried both, doesn’t work).

Do I need a different domain here for USER_ID?!

vi /etc/jitsi/jigasi/sip-communicator.properties
org.jitsi.jigasi.xmpp.acc.USER_ID=jigasi.service@meet.my.tld
org.jitsi.jigasi.xmpp.acc.PASS=secret.pass.123
org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=false

Verify component pass

vi /etc/prosody/conf.d/meet.my.tld.cfg.lua
 
Component "callcontrol.meet.my.tld" component_secret = "1234"

###########################################################

vi /etc/jitsi/jigasi/config

JIGASI_SIPUSER=user@sip.linphone.org
JIGASI_SIPPWD=123455=
JIGASI_SECRET=1234
JIGASI_OPTS=""
JIGASI_HOSTNAME=meet.my.tld
JIGASI_HOST=localhost

Enable callcontrol

vi /etc/jitsi/meet/meet.my.tld-config.js

        // Call control component (Jigasi).
        call_control: 'callcontrol.meet.my.tld',

Enable transcription

Configuring SIP and Transcription

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

org.jitsi.jigasi.ENABLE_TRANSCRIPTION=true
org.jitsi.jigasi.ENABLE_SIP=true

# delivering final transcript
org.jitsi.jigasi.transcription.DIRECTORY=/var/lib/jigasi/transcripts
org.jitsi.jigasi.transcription.BASE_URL=https://meet.my.tld/
org.jitsi.jigasi.transcription.jetty.port=-1
org.jitsi.jigasi.transcription.ADVERTISE_URL=false

# save formats
org.jitsi.jigasi.transcription.SAVE_JSON=false
org.jitsi.jigasi.transcription.SAVE_TXT=true

# send formats
org.jitsi.jigasi.transcription.SEND_JSON=true
org.jitsi.jigasi.transcription.SEND_TXT=false
vi /etc/jitsi/meet/meet.my.tld-config.js
 
    // Transcription (in interface_config,
    // subtitles and buttons can be configured)
    // transcribingEnabled: false,
    transcribingEnabled: true,

Install Google SDK

Google documentation Google Cloud SDK documentation
Jitsi documentation on GitHub: Using Jigasi to transcribe a Jitsi Meet conference

echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

sudo apt-get install apt-transport-https ca-certificates gnupg

curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg 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

Link google json for jigsi config

Jigasi Transcribe Installation and Steps, Jigasi Transcriber and
How to config transcrption?

cp /root/.config/gcloud/application_default_credentials.json /etc/jitsi/jigasi/TranslatorApiDemo.json && \
chown jigasi:jitsi TranslatorApiDemo.json && \
chmod o+r TranslatorApiDemo.json && \
chmod g+r TranslatorApiDemo.json

Add it to jigsi config:

vi /etc/jitsi/jigasi/config

GOOGLE_APPLICATION_CREDENTIALS="/etc/jitsi/jigasi/TranslatorApiDemo.json"

This is it. I try to come back to this as I find out more.

I hope you have more luck

Cheers
Tom

Some errors, not sure if others encounter them or if they are related (really lost here now)

/var/log/jitsi/jigasi.log

Some info from the logs, not really sure if this is important

2020-05-06 19:02:41.903 INFO: [10] org.jitsi.impl.configuration.ConfigurationServiceImpl.log() failed to find jitsi-default-overrides.properties with class loader, will continue without it.
2020-05-06 19:02:41.946 SEVERE: [10] impl.configuration.ConfigurationActivator.log() Error creating c lib instance for fixing file permissions
java.nio.file.FileSystemException: /etc/jitsi/jigasi: Operation not permitted
        at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
        at sun.nio.fs.UnixFileAttributeViews$Posix.setMode(UnixFileAttributeViews.java:238)
        at sun.nio.fs.UnixFileAttributeViews$Posix.setPermissions(UnixFileAttributeViews.java:260)
        at java.nio.file.Files.setPosixFilePermissions(Files.java:2045)
        at net.java.sip.communicator.impl.configuration.ConfigurationActivator.fixPermissions(ConfigurationActivator.java:167)
        at net.java.sip.communicator.impl.configuration.ConfigurationActivator.start(ConfigurationActivator.java:88)
        at org.jitsi.impl.osgi.framework.BundleImpl.start(BundleImpl.java:307)
        at org.jitsi.impl.osgi.framework.launch.FrameworkImpl.startLevelChanged(FrameworkImpl.java:472)
        at org.jitsi.impl.osgi.framework.startlevel.FrameworkStartLevelImpl$Command.run(FrameworkStartLevelImpl.java:137)
        at org.jitsi.impl.osgi.framework.AsyncExecutor.runInThread(AsyncExecutor.java:122)
        at org.jitsi.impl.osgi.framework.AsyncExecutor.access$000(AsyncExecutor.java:28)
        at org.jitsi.impl.osgi.framework.AsyncExecutor$1.run(AsyncExecutor.java:231)
2020-05-06 19:02:45.369 SEVERE: [10] 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)
        at org.jitsi.impl.neomedia.jmfext.media.renderer.audio.PulseAudioRenderer.<init>(PulseAudioRenderer.java:136)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at org.jitsi.impl.neomedia.device.DeviceConfiguration.registerCustomRenderers(DeviceConfiguration.java:1047)
        at org.jitsi.impl.neomedia.device.DeviceConfiguration.<init>(DeviceConfiguration.java:366)
        at org.jitsi.impl.neomedia.MediaServiceImpl.<init>(MediaServiceImpl.java:162)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at org.jitsi.impl.libjitsi.LibJitsiImpl$ServiceLock.initializeService(LibJitsiImpl.java:196)
        at org.jitsi.impl.libjitsi.LibJitsiImpl$ServiceLock.getService(LibJitsiImpl.java:131)
        at org.jitsi.impl.libjitsi.LibJitsiImpl.getService(LibJitsiImpl.java:91)
        at org.jitsi.impl.libjitsi.LibJitsiOSGiImpl.getService(LibJitsiOSGiImpl.java:95)
        at org.jitsi.service.libjitsi.LibJitsi.invokeGetServiceOnImpl(LibJitsi.java:172)
        at org.jitsi.service.libjitsi.LibJitsi.getMediaService(LibJitsi.java:124)
        at net.java.sip.communicator.impl.neomedia.NeomediaActivator.start(NeomediaActivator.java:391)
        at org.jitsi.impl.osgi.framework.BundleImpl.start(BundleImpl.java:307)
        at org.jitsi.impl.osgi.framework.launch.FrameworkImpl.startLevelChanged(FrameworkImpl.java:472)
        at org.jitsi.impl.osgi.framework.startlevel.FrameworkStartLevelImpl$Command.run(FrameworkStartLevelImpl.java:137)
        at org.jitsi.impl.osgi.framework.AsyncExecutor.runInThread(AsyncExecutor.java:122)
        at org.jitsi.impl.osgi.framework.AsyncExecutor.access$000(AsyncExecutor.java:28)
        at org.jitsi.impl.osgi.framework.AsyncExecutor$1.run(AsyncExecutor.java:231)
2020-05-06 19:02:45.427 INFO: [10] impl.neomedia.NeomediaActivator.start().542 Audio Notifier Service ...[REGISTERED]
2020-05-06 19:02:48.339 INFO: [54] org.jitsi.jigasi.SipGateway.registrationStateChanged().120 REG STATE CHANGE ProtocolProviderServiceSipImpl(SIP:temp.science@sip.linphone.org) -> RegistrationStateChangeEvent[ oldState=Registering; newState=RegistrationState=Registered; userRequest=false; reasonCode=-1; reason=null]

/var/log/jitsi/jvb.log

2020-05-06 19:02:37.061 WARNING: [30] org.jivesoftware.smack.AbstractXMPPConnection.callConnectionClosedOnErrorListener: Connection XMPPTCPConnection[jvb@auth.meet.my.tld/1b54c784-799f-4c91-bd23-bbbfe8770028] (0) closed with error
org.jivesoftware.smack.XMPPException$StreamErrorException: system-shutdown You can read more about the meaning of this stream error at http://xmpp.org/rfcs/rfc6120.html#streams-error-conditions
<stream:error><system-shutdown xmlns='urn:ietf:params:xml:ns:xmpp-streams'/><text>Received SIGTERM</text></stream:error>
        at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1064)
        at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:1000)
        at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:1016)
        at java.lang.Thread.run(Thread.java:748)
2020-05-06 19:02:37.062 WARNING: [30] [hostname=localhost id=shard] MucClient$1.connectionClosedOnError#295: Closed on error:
org.jivesoftware.smack.XMPPException$StreamErrorException: system-shutdown You can read more about the meaning of this stream error at http://xmpp.org/rfcs/rfc6120.html#streams-error-conditions
<stream:error><system-shutdown xmlns='urn:ietf:params:xml:ns:xmpp-streams'/><text>Received SIGTERM</text></stream:error>
        at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1064)
        at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:1000)
        at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:1016)
        at java.lang.Thread.run(Thread.java:748)
2020-05-06 19:02:40.095 INFO: [1] NewConfig$1.invoke#88: Loaded NewConfig with origin: merge of system properties,system properties,reference.conf @ jar:file:/usr/share/jitsi-videobridge/jitsi-videobridge.jar!/reference.conf: 1,reference.conf @ jar:file:/usr/share/jitsi-videobridge/lib/jitsi-media-transform-1.0-155-gb6af7e9.jar!/reference.conf: 1

/var/log/jitsi/jicofo.log

Jicofo 2020-05-06 19:02:37.082 WARNING: [19] org.jivesoftware.smack.AbstractXMPPConnection.callConnectionClosedOnErrorListener() Connection XMPPTCPConnection[focus@auth.meet.my.tld/focus84313535008639] (0) closed with error
org.jivesoftware.smack.XMPPException$StreamErrorException: system-shutdown You can read more about the meaning of this stream error at http://xmpp.org/rfcs/rfc6120.html#streams-error-conditions
<stream:error><system-shutdown xmlns='urn:ietf:params:xml:ns:xmpp-streams'/><text>Received SIGTERM</text></stream:error>
        at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1064)
        at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:1000)
        at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:1016)
        at java.lang.Thread.run(Thread.java:748)
Jicofo 2020-05-06 19:02:37.090 SEVERE: [19] org.jitsi.impl.protocol.xmpp.XmppProtocolProvider.connectionClosedOnError().543 XMPP connection closed on error: system-shutdown You can read more about the meaning of this stream error at http://xmpp.org/rfcs/rfc6120.html#streams-error-conditions
<stream:error><system-shutdown xmlns='urn:ietf:params:xml:ns:xmpp-streams'/><text>Received SIGTERM</text></stream:error>
Jicofo 2020-05-06 19:02:37.114 INFO: [19] org.jitsi.jicofo.bridge.BridgeSelector.log() Removing JVB: jvbbrewery@internal.auth.meet.my.tld/b850fa4a-b255-4426-b72f-dd401fb6cf9c
Jicofo 2020-05-06 19:02:37.120 INFO: [19] org.jitsi.jicofo.ComponentsDiscovery.log() Connection lost - component offline: guest.meet.my.tld
Jicofo 2020-05-06 19:02:37.121 INFO: [19] org.jitsi.jicofo.ComponentsDiscovery.log() Connection lost - component offline: auth.meet.my.tld
Jicofo 2020-05-06 19:02:37.121 INFO: [19] org.jitsi.jicofo.ComponentsDiscovery.log() Connection lost - component offline: conference.meet.my.tld
Jicofo 2020-05-06 19:02:37.121 WARNING: [19] org.jitsi.jicofo.JitsiMeetServices.log() MUC component went offline: conference.meet.my.tld
Jicofo 2020-05-06 19:02:37.121 INFO: [19] org.jitsi.jicofo.FocusManager.log() XMPP provider reg state: RegistrationState=Unregistered
Jicofo 2020-05-06 19:02:37.121 WARNING: [19] org.jitsi.impl.protocol.xmpp.PacketDebugger.log().121 Smack: XMPPConnection closed due to an exception (XMPPTCPConnection[focus@auth.meet.my.tld/focus84313535008639] (0))
org.jivesoftware.smack.XMPPException$StreamErrorException: system-shutdown You can read more about the meaning of this stream error at http://xmpp.org/rfcs/rfc6120.html#streams-error-conditions
<stream:error><system-shutdown xmlns='urn:ietf:params:xml:ns:xmpp-streams'/><text>Received SIGTERM</text></stream:error>
        at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1064)
        at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:1000)
        at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:1016)
        at java.lang.Thread.run(Thread.java:748)
Jicofo 2020-05-06 19:02:37.122 WARNING: [60] org.jitsi.jicofo.bridge.JvbDoctor.log() Trying to remove a bridge that does not exist anymore: jvbbrewery@internal.auth.meet.my.tld/b850fa4a-b255-4426-b72f-dd401fb6cf9c
Jicofo 2020-05-06 19:02:44.054 INFO: [17] org.jitsi.jicofo.ProtocolProviderHandler.registrationStateChanged().144 XmppProtocolProvider(focus@auth.meet.my.tld/focus85774838445090 (Jabber)): RegistrationStateChangeEvent[ oldState=Unregistered; newState=RegistrationState=Registered; reasonCode=-1; reason=null]
Jicofo 2020-05-06 19:02:44.418 INFO: [17] org.jitsi.jicofo.xmpp.BaseBrewery.start().187 Joined brewery room: JvbBrewery@internal.auth.meet.my.tld
Jicofo 2020-05-06 19:02:44.478 SEVERE: [17] org.jitsi.impl.protocol.xmpp.OpSetSimpleCapsImpl.getFeatures().144 Failed to discover features for callcontrol.meet.my.tld: XMPP error reply received from callcontrol.meet.my.tld: XMPPError: service-unavailable - wait
Jicofo 2020-05-06 19:02:44.489 SEVERE: [17] org.jitsi.impl.protocol.xmpp.OpSetSimpleCapsImpl.getFeatures().144 Failed to discover features for focus.meet.my.tld: XMPP error reply received from focus.meet.my.tld: XMPPError: service-unavailable - wait
Jicofo 2020-05-06 19:02:44.496 SEVERE: [17] org.jitsi.impl.protocol.xmpp.OpSetSimpleCapsImpl.getFeatures().144 Failed to discover features for speakerstats.meet.my.tld: XMPP error reply received from speakerstats.meet.my.tld: XMPPError: service-unavailable - cancel
Jicofo 2020-05-06 19:02:44.500 SEVERE: [17] org.jitsi.impl.protocol.xmpp.OpSetSimpleCapsImpl.getFeatures().144 Failed to discover features for conferenceduration.meet.my.tld: XMPP error reply received from conferenceduration.meet.my.tld: XMPPError: service-unavailable - cancel

I found a reply from @damencho here: Jigasi transcripber stuck at "Attempting to invite transcriber"

EDIT: Another thread on this having MUC required by transcription: Jigasi quits randomly

Apparently transcription via Jigasi requires call control MUCs (brewery). The documentation is on GitHub: https://github.com/jitsi/jigasi#call-control-mucs-brewery

Yet it is unclear to me how the --nocomponent=true switch is handed over when systemctl handles jigasi.

EDIT 2: Just checked the systemctl for jigasi:

systemctl cat jigasi.service
# /lib/systemd/system/jigasi.service
[Unit]
Description=Jitsi Gateway for SIP
After=network.target

[Service]
EnvironmentFile=/etc/jitsi/jigasi/config
Environment=LOGFILE=/var/log/jitsi/jigasi.log
User=jigasi
RuntimeDirectory=jigasi
RuntimeDirectoryMode=0750
PIDFile=/var/run/jigasi/jigasi.pid
# more threads for this process
TasksMax=65000
# allow more open files for this process
LimitNPROC=65000
LimitNOFILE=65000
ExecStart=/bin/bash -c "exec /usr/share/jigasi/jigasi.sh --host=$${JIGASI_HOST:-localhost} --domain=${JIGASI_HOSTNAME} --subdomain=callcontrol --secret=${JIGASI_SECRET} --logdir=/var/log/jit
ExecStartPost=/bin/bash -c "echo $MAINPID > /var/run/jigasi/jigasi.pid"

[Install]
WantedBy=multi-user.target

I assume I can simply edit /lib/systemd/system/jigasi.service and add the --no-component switch

@HachimanSec, any luck to get this solved?

@HachimanSec Is this issues Resolved. I am a very newbie in this I have implemented the same from your steps and I am also facing the same issues again Did you have any solution regarding pls suggest to me it will very helpful. Thanks in advance.