[SOLVED] Jibri won't record [Failed to send start Jibri IQ]

Had to uninstall my previously working full installation (Jitsi + Jibri) and then reinstall. However, now, Jibri won’t record. I get a “Failed to send start Jibri IQ” error (Jicofo log).

Jicofo 2020-09-21 01:36:53.330 SEVERE: [35] org.jitsi.jicofo.recording.jibri.JibriSession.log() Unexpected status received in response to the start IQ:
Jicofo 2020-09-21 01:36:53.332 SEVERE: [35] org.jitsi.jicofo.recording.jibri.JibriSession.log() Failed to send start Jibri IQ: org.jitsi.jicofo.recording.jibri.JibriSession$StartException: Unexpected response

I don’t get any log at all for Jibri (which makes me wonder if there’s a permission issue somewhere). Jibri status check shows active, but has an interesting error:

Any help on what I could be doing wrong?

Any help, anyone?

Sent you a PM.

This could be Jibri timing out and not sending a response (can’t tell for sure from that snippet), it can happen if the page loading takes a long time.

@bbaldino, it fails immediately though - as soon as I click recording, I get the “can’t start recording” error message.

Here’s my full jicofo log attached:

jicofo.log (165.8 KB)

Looks like there was an error on the Jibri side, you sure you don’t see any logs on Jibri?

Jicofo 2020-09-21 01:18:25.839 SEVERE: [35] org.jitsi.jicofo.recording.jibri.JibriSession.log() Unexpected status received in response to the start IQ: <iq to='focus@auth.live.conference.com/focus27068662609551' from='jibribrewery@internal.auth.live.conference.com/jibri-nickname' id='4i3NG-138' type='result'><jibri xmlns='http://jitsi.org/protocol/jibri' status='off' failure_reason='error' should_retry='true'/></iq>

No, nothing at all - which is really weird. The Jibri log folder doesn’t even exist at all. Which is why I’m thinking maybe I have a permission issue somewhere. Could be a remnant from my previous uninstall.

Can you please tell me what the owner and permissions are for the/var/log/jitsi/ and /var/log/jitsi/jibri/ folders? Perhaps that’s where the issue is.

Make sure the jibri user has access to write to them.

When does that jibri log folder get created - on install or when there’s a jibri event? Wondering if I should create it manually.

On install

Ah, something went wrong then. Ok, I’ll create it and see if that helps. Will report back. Thanks.

@bbaldino, turns out I was right - it was indeed a permissions error. Created the jibri folder manually and granted jibri access; boom, problem solved!

Thanks so much!

Hi,
I am also getting Recording Failed to start error. How you resolve this?

That error could be due to any of several reasons. In my case here, it was because the Jibri log folder did not exist, so I created it manually to solve it. This may not be your issue. I recommend creating a new post outlining the specific issue you’re having and posting your Jibri logs. That will help the community to assist in debugging and figuring out your problem.

Please include the full Jibri log

java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:499)
java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:486)
java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:531)
org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:126)
org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:73)
org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:543)
org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:207)
org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:130)
org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:181)
org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:168)
org.jitsi.jibri.selenium.JibriSelenium.(JibriSelenium.kt:149)
org.jitsi.jibri.selenium.JibriSelenium.(JibriSelenium.kt:119)
org.jitsi.jibri.service.impl.FileRecordingJibriService.(FileRecordingJibriService.kt:101)
org.jitsi.jibri.JibriManager.startFileRecording(JibriManager.kt:140)
org.jitsi.jibri.api.xmpp.XmppApi.handleStartService(XmppApi.kt:294)
org.jitsi.jibri.api.xmpp.XmppApi.handleStartJibriIq(XmppApi.kt:195)
org.jitsi.jibri.api.xmpp.XmppApi.handleJibriIq(XmppApi.kt:168)
org.jitsi.jibri.api.xmpp.XmppApi.handleIq(XmppApi.kt:150)
org.jitsi.xmpp.mucclient.MucClient.handleIq(MucClient.java:569)
org.jitsi.xmpp.mucclient.MucClient.access$800(MucClient.java:50)
org.jitsi.xmpp.mucclient.MucClient$2.handleIQRequest(MucClient.java:533)
org.jivesoftware.smack.AbstractXMPPConnection$4.run(AbstractXMPPConnection.java:1188)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)

2020-10-27 18:05:26.621 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-27 18:06:26.621 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-27 18:07:26.621 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-27 18:08:26.621 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-27 18:09:26.621 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-27 18:10:26.621 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-27 18:11:26.621 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-27 18:12:26.621 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-27 18:13:26.621 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status

This does not look to be the complete Jibri log.

2020-10-28 04:23:12.599 INFO: [1] org.jitsi.jibri.Main.handleCommandLineArgs() Jibri run with args [–config, /etc/jitsi/jibri/config.json]
2020-10-28 04:23:12.714 INFO: [1] org.jitsi.jibri.Main.setupLegacyConfig() Checking legacy config file /etc/jitsi/jibri/config.json
2020-10-28 04:23:12.714 INFO: [1] org.jitsi.jibri.Main.setupLegacyConfig() Legacy config file /etc/jitsi/jibri/config.json doesn’t exist
2020-10-28 04:23:13.651 INFO: [1] org.jitsi.jibri.webhooks.v1.JwtInfo.Companion.fromConfig() got jwtConfig: {}

2020-10-28 04:23:13.652 INFO: [1] org.jitsi.jibri.webhooks.v1.JwtInfo.Companion.fromConfig() Unable to create JwtInfo: com.typesafe.config.ConfigException$Missing: reference.conf @ jar:file:/opt/jitsi/jibri/jibri.jar!/reference.conf: 52: No configuration setting found for key ‘signing-key-path’
2020-10-28 04:23:13.841 INFO: [1] org.jitsi.jibri.Main.main() Using port 8001 for internal HTTP API
2020-10-28 04:23:13.856 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-28 04:23:14.459 INFO: [1] org.jitsi.jibri.api.xmpp.XmppApi.updatePresence() Jibri reports its status is now JibriStatus(busyStatus=IDLE, health=OverallHealth(healthStatus=HEALTHY, details={})), publishing presence to connections
2020-10-28 04:23:14.477 INFO: [1] org.jitsi.jibri.api.xmpp.XmppApi.start() Connecting to
Command duration or timeout: 1.17 seconds
Build info: version: ‘unknown’, revision: ‘unknown’, time: ‘unknown’
System info: host: ‘ip-172-31-18-153’, ip: ‘172.31.18.153’, os.name: ‘Linux’, os.arch: ‘amd64’, os.version: ‘4.15.0-122-generic’, java.version: ‘1.8.0_265’
Driver info: driver.version: ChromeDriver with stack:
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.lang.reflect.Constructor.newInstance(Constructor.java:423)
org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:214)
org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:166)
org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$new$0(JsonWireProtocolResponse.java:53)
org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$getResponseFunction$2(JsonWireProtocolResponse.java:91)
org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:123)
java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:499)
java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:486)
java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:531)
org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:126)
org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:73)
org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:543)
org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:207)
org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:130)
org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:181)
org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:168)
org.jitsi.jibri.selenium.JibriSelenium.(JibriSelenium.kt:149)
org.jitsi.jibri.selenium.JibriSelenium.(JibriSelenium.kt:119)
org.jitsi.jibri.service.impl.FileRecordingJibriService.(FileRecordingJibriService.kt:101)
org.jitsi.jibri.JibriManager.startFileRecording(JibriManager.kt:140)
org.jitsi.jibri.api.xmpp.XmppApi.handleStartService(XmppApi.kt:294)
org.jitsi.jibri.api.xmpp.XmppApi.handleStartJibriIq(XmppApi.kt:195)
org.jitsi.jibri.api.xmpp.XmppApi.handleJibriIq(XmppApi.kt:168)
org.jitsi.jibri.api.xmpp.XmppApi.handleIq(XmppApi.kt:150)
org.jitsi.xmpp.mucclient.MucClient.handleIq(MucClient.java:569)
org.jitsi.xmpp.mucclient.MucClient.access$800(MucClient.java:50)
org.jitsi.xmpp.mucclient.MucClient$2.handleIQRequest(MucClient.java:533)
org.jivesoftware.smack.AbstractXMPPConnection$4.run(AbstractXMPPConnection.java:1188)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)

2020-10-28 04:24:13.836 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-28 04:25:13.835 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-28 04:26:13.835 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-28 04:27:13.835 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-28 04:28:13.835 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status

Hi @bbaldino,

I am still fighting on Jibri.

Regards,
Subodh

It seems to me your jibri is not seeing the chromewebdriver binary … but I maybe wrong