[SOLVED] Video Empty - Null discard all samples (playback) or generate zero samples (capture)

Hi again.

This morning I installed Jibri in my own server (With Ubuntu 18.04 LTS) but, when I do a record, the record is empty (the duration is 00:00:00). So, I remember when I was following the tutorial that when you install ffmpeg codec or something, if you do a sudo arecord -L you have to see a list of devices or similar.

Well, my result is null discard all samples (playback) or generate zero samples (capture) and a list of something. Look at this:

I did a sudo apt install pulseaudio and reboot but the error persists.

Any ideas?

Some news… I think that the error of empty record is that, in the jibri log (file log.0.txt) appears this:

2020-12-04 13:51:15.450 INFO: [61] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Finalizing the recording
2020-12-04 13:51:15.451 SEVERE: [61] org.jitsi.jibri.service.impl.FileRecordingJibriService.finalize() Failed to run finalize script: java.io.IOException: Cannot run program "/path/to/finalize_recording.sh": error=2, No such file or directory with stack:
java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)

So, I have to put any script or any code to finalize recording?

More test…

I created a dummy file called finalize_recording.sh and put it in /etc/jitsi/jibri with full permission. Then, I modified the config.json file of jibri to point the file in finalize_script_path.

Now, the log.0.txt don’t show the error and I think that’s correct, but the video stills empty (no duration, no image, no sound).

I put the log file:

log.0.txt (12.8 KB)

The finalize script is not the problem (you don’t necessarily have to specify one). You should be using Jibri.conf for your configuration, not config.json (this is being deprecated). Check out this tutorial to solve your issue - TUTORIAL: Jibri Overview, Troubleshooting Tips & Tricks - Solve your Jibri Problems, Quickly!

EDIT: Don’t worry Freddie, your tutorial answer this post

I followed the tutorial you posted and the problem persists, record begins, generate file but this is empty

The file size is 4MB

And if you see the information of file, appears this (the file don’t have video/audio codec):

And the log is this:

Jicofo 2020-12-09 11:17:15.326 WARNING: [30] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() No jingle session yet for 000009@conference.videoservicio.com/f5145907
Jicofo 2020-12-09 11:17:15.743 INFO: [30] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Got session-accept from: 000009@conference.videoservicio.com/f5145907
Jicofo 2020-12-09 11:17:15.744 INFO: [30] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Received session-accept from 000009@conference.videoservicio.com/f5145907 with accepted sources:Sources{ video: [ssrc=813948285 ssrc=2223685041 ssrc=407680937 ssrc=897731085 ssrc=84187$
Jicofo 2020-12-09 11:17:15.745 INFO: [30] org.jitsi.protocol.xmpp.AbstractOperationSetJingle.log() Notify add SSRC 000009@conference.videoservicio.com/8017de4b SID: 4p1ccsfpb66uh Sources{ video: [ssrc=813948285 ssrc=2223685041 ssrc=407680937 ssrc=897731085 ssrc=841873885 s$
Jicofo 2020-12-09 11:17:15.750 INFO: [30] org.jitsi.protocol.xmpp.AbstractOperationSetJingle.log() Notify add SSRC 000009@conference.videoservicio.com/f5145907 SID: tme0cn8qddd0 Sources{ audio: [ssrc=3628896791 ] }@301137851 source_Groups{ }@2091193154
Jicofo 2020-12-09 11:17:17.168 INFO: [298] org.jitsi.jicofo.recording.jibri.JibriSession.log() Updating status from JIBRI: <iq to='focus@auth.videoservicio.com/focus36709433617' from='jibribrewery@internal.auth.videoservicio.com/jibri-nick' id='Zm9jdXNAYXV0aC52aWRlb3NlcnZp$
Jicofo 2020-12-09 11:17:17.169 INFO: [298] org.jitsi.jicofo.recording.jibri.JibriSession.log() Got Jibri status update: Jibri jibribrewery@internal.auth.videoservicio.com/jibri-nick has status on and failure reason null, current Jibri jid is jibribrewery@internal.auth.vide$
Jicofo 2020-12-09 11:17:17.169 INFO: [298] org.jitsi.jicofo.recording.jibri.JibriSession.log() Jibri is no longer pending, cancelling pending timeout task
Jicofo 2020-12-09 11:17:17.169 INFO: [298] org.jitsi.jicofo.recording.jibri.JibriSession.log() Jibri session started, notifying owner
Jicofo 2020-12-09 11:17:17.169 INFO: [298] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Got jibri status on and failure null
Jicofo 2020-12-09 11:17:17.170 INFO: [298] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Publishing new jibri-recording-status: <jibri-recording-status xmlns='http://jitsi.org/protocol/jibri' status='on' session_id='homovhadrejzfcrr' initiator='000009@conference.vid$
Jicofo 2020-12-09 11:17:56.092 INFO: [301] org.jitsi.jicofo.recording.jibri.JibriSession.log() Updating status from JIBRI: <iq to='focus@auth.videoservicio.com/focus36709433617' from='jibribrewery@internal.auth.videoservicio.com/jibri-nick' id='Zm9jdXNAYXV0aC52aWRlb3NlcnZp$
Jicofo 2020-12-09 11:17:56.098 INFO: [301] org.jitsi.jicofo.recording.jibri.JibriSession.log() Got Jibri status update: Jibri jibribrewery@internal.auth.videoservicio.com/jibri-nick has status off and failure reason error, current Jibri jid is jibribrewery@internal.auth.vi$
Jicofo 2020-12-09 11:17:56.098 INFO: [301] org.jitsi.jicofo.recording.jibri.JibriSession.log() Jibri failed, trying to fall back to another Jibri
Jicofo 2020-12-09 11:17:56.098 SEVERE: [301] org.jitsi.jicofo.recording.jibri.JibriSession.log() Unable to find an available Jibri, can't start
Jicofo 2020-12-09 11:17:56.100 INFO: [301] org.jitsi.jicofo.recording.jibri.JibriSession.log() Failed to fall back to another Jibri, this session has now failed: org.jitsi.jicofo.recording.jibri.JibriSession$StartException: All Jibri instances are busy
org.jitsi.jicofo.recording.jibri.JibriSession$StartException: All Jibri instances are busy
        at org.jitsi.jicofo.recording.jibri.JibriSession.startInternal(JibriSession.java:359)
        at org.jitsi.jicofo.recording.jibri.JibriSession.start(JibriSession.java:335)
        at org.jitsi.jicofo.recording.jibri.JibriSession.retryRequestWithAnotherJibri(JibriSession.java:649)
        at org.jitsi.jicofo.recording.jibri.JibriSession.handleJibriStatusUpdate(JibriSession.java:719)
        at org.jitsi.jicofo.recording.jibri.JibriSession.processJibriIqFromJibri(JibriSession.java:501)
        at org.jitsi.jicofo.recording.jibri.JibriSession.processJibriIqRequestFromJibri(JibriSession.java:482)
        at org.jitsi.jicofo.recording.jibri.CommonJibriStuff.handleIQRequest(CommonJibriStuff.java:247)
        at org.jitsi.jicofo.recording.jibri.OperationSetJibri.handleIQRequest(OperationSetJibri.java:98)
        at org.jivesoftware.smack.AbstractXMPPConnection$4.run(AbstractXMPPConnection.java:1188)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
Jicofo 2020-12-09 11:17:56.118 INFO: [301] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Got jibri status off and failure error
Jicofo 2020-12-09 11:17:56.118 INFO: [301] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Publishing new jibri-recording-status: <jibri-recording-status xmlns='http://jitsi.org/protocol/jibri' status='off' failure_reason='error' session_id='homovhadrejzfcrr' recordin$
Jicofo 2020-12-09 11:17:56.121 INFO: [301] org.jitsi.jicofo.recording.jibri.JibriSession.log() Cleaning up current JibriSession
Jicofo 2020-12-09 11:17:57.540 INFO: [30] org.jitsi.jicofo.ChatRoomRoleAndPresence.log() Chat room event ChatRoomMemberPresenceChangeEvent[type=MemberLeft sourceRoom=org.jitsi.impl.protocol.xmpp.ChatRoomImpl@40b54853 member=ChatMember[000009@conference.videoservicio.com/80$
Jicofo 2020-12-09 11:17:57.540 INFO: [30] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Member 000009@conference.videoservicio.com/8017de4b is leaving
Jicofo 2020-12-09 11:17:57.540 INFO: [30] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Terminating Participant[000009@conference.videoservicio.com/8017de4b]@1960587054, reason: gone, send st: false
Jicofo 2020-12-09 11:17:57.541 INFO: [30] org.jitsi.protocol.xmpp.AbstractOperationSetJingle.log() Terminate session: 000009@conference.videoservicio.com/8017de4b, reason: gone, send terminate: false
Jicofo 2020-12-09 11:17:57.541 INFO: [30] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Removing 000009@conference.videoservicio.com/8017de4b sources Sources{ audio: [ssrc=3628896791 ] }@257377112
Jicofo 2020-12-09 11:17:57.542 INFO: [30] org.jitsi.protocol.xmpp.AbstractOperationSetJingle.log() Notify remove SSRC 000009@conference.videoservicio.com/f5145907 SID: tme0cn8qddd0 Sources{ audio: [ssrc=3628896791 ] }@257377112 source_Groups{ }@737219166
Jicofo 2020-12-09 11:17:57.542 INFO: [30] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Region info, conference=40441 octo_enabled= false: [[null, null]]
Jicofo 2020-12-09 11:17:57.545 INFO: [30] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Expiring channels for: 000009@conference.videoservicio.com/8017de4b on: Bridge[jid=jvbbrewery@internal.auth.videoservicio.com/402d7299-f8db-485f-a0c6-791dea3fde15, relayId=null, region$
Jicofo 2020-12-09 11:17:57.545 INFO: [30] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Removed participant: true, 000009@conference.videoservicio.com/8017de4b
Jicofo 2020-12-09 11:17:57.990 INFO: [30] org.jitsi.jicofo.recording.jibri.JibriDetector.log() Received Jibri jibribrewery@internal.auth.videoservicio.com/jibri-nick status <jibri-status xmlns='http://jitsi.org/protocol/jibri'><busy-status xmlns='http://jitsi.org/protocol/$
Jicofo 2020-12-09 11:17:57.991 INFO: [30] org.jitsi.jicofo.recording.jibri.JibriDetector.log() Jibri: jibribrewery@internal.auth.videoservicio.com/jibri-nick available: true
Jicofo 2020-12-09 11:18:17.546 INFO: [103] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Timing out single participant: 000009@conference.videoservicio.com/f5145907
Jicofo 2020-12-09 11:18:17.547 INFO: [103] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Terminating Participant[000009@conference.videoservicio.com/f5145907]@1905595982, reason: expired, send st: true
Jicofo 2020-12-09 11:18:17.547 INFO: [103] org.jitsi.protocol.xmpp.AbstractOperationSetJingle.log() Terminate session: 000009@conference.videoservicio.com/f5145907, reason: expired, send terminate: true
Jicofo 2020-12-09 11:18:17.555 INFO: [103] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Removing 000009@conference.videoservicio.com/f5145907 sources Sources{ video: [ssrc=813948285 ssrc=2223685041 ssrc=407680937 ssrc=897731085 ssrc=841873885 ssrc=1194776193 ] audio: [ss$
Jicofo 2020-12-09 11:18:17.556 INFO: [103] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Region info, conference=40441 octo_enabled= false: [[null]]
Jicofo 2020-12-09 11:18:17.556 INFO: [103] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Expiring channels for: 000009@conference.videoservicio.com/f5145907 on: Bridge[jid=jvbbrewery@internal.auth.videoservicio.com/402d7299-f8db-485f-a0c6-791dea3fde15, relayId=null, regio$
Jicofo 2020-12-09 11:18:17.558 INFO: [103] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Removed participant: true, 000009@conference.videoservicio.com/f5145907

I don’t know what I have to do, please help me :frowning:

More information

I changed the java version in launch.sh (it point to java 11 and now to java 8), I restarted jibri and I got the same error than before (video empty and without codecs).

And the video stops 30 seconds later

Jicofo 2020-12-09 12:27:14.995 INFO: [318] org.jitsi.jicofo.recording.jibri.JibriSession.log() Updating status from JIBRI: <iq to='focus@auth.videoservicio.com/focus36709433617' from='jibribrewery@internal.auth.videoservicio.com/jibri-nick' id='Zm9jdXNAYXV0aC52aWRlb3NlcnZp$
Jicofo 2020-12-09 12:27:14.995 INFO: [318] org.jitsi.jicofo.recording.jibri.JibriSession.log() Got Jibri status update: Jibri jibribrewery@internal.auth.videoservicio.com/jibri-nick has status on and failure reason null, current Jibri jid is jibribrewery@internal.auth.vide$
Jicofo 2020-12-09 12:27:14.996 INFO: [318] org.jitsi.jicofo.recording.jibri.JibriSession.log() Jibri is no longer pending, cancelling pending timeout task
Jicofo 2020-12-09 12:27:14.996 INFO: [318] org.jitsi.jicofo.recording.jibri.JibriSession.log() Jibri session started, notifying owner
Jicofo 2020-12-09 12:27:14.996 INFO: [318] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Got jibri status on and failure null
Jicofo 2020-12-09 12:27:14.996 INFO: [318] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Publishing new jibri-recording-status: <jibri-recording-status xmlns='http://jitsi.org/protocol/jibri' status='on' session_id='igoocprxgnagaont' initiator='000009@conference.vid$
Jicofo 2020-12-09 12:27:37.753 INFO: [318] org.jitsi.jicofo.recording.jibri.JibriSession.log() Updating status from JIBRI: <iq to='focus@auth.videoservicio.com/focus36709433617' from='jibribrewery@internal.auth.videoservicio.com/jibri-nick' id='Zm9jdXNAYXV0aC52aWRlb3NlcnZp$
Jicofo 2020-12-09 12:27:37.772 INFO: [318] org.jitsi.jicofo.recording.jibri.JibriSession.log() Got Jibri status update: Jibri jibribrewery@internal.auth.videoservicio.com/jibri-nick has status off and failure reason error, current Jibri jid is jibribrewery@internal.auth.vi$
Jicofo 2020-12-09 12:27:37.772 INFO: [318] org.jitsi.jicofo.recording.jibri.JibriSession.log() Jibri failed, trying to fall back to another Jibri
Jicofo 2020-12-09 12:27:37.773 SEVERE: [318] org.jitsi.jicofo.recording.jibri.JibriSession.log() Unable to find an available Jibri, can't start
Jicofo 2020-12-09 12:27:37.778 INFO: [318] org.jitsi.jicofo.recording.jibri.JibriSession.log() Failed to fall back to another Jibri, this session has now failed: org.jitsi.jicofo.recording.jibri.JibriSession$StartException: All Jibri instances are busy
org.jitsi.jicofo.recording.jibri.JibriSession$StartException: All Jibri instances are busy
        at org.jitsi.jicofo.recording.jibri.JibriSession.startInternal(JibriSession.java:359)
        at org.jitsi.jicofo.recording.jibri.JibriSession.start(JibriSession.java:335)
        at org.jitsi.jicofo.recording.jibri.JibriSession.retryRequestWithAnotherJibri(JibriSession.java:649)
        at org.jitsi.jicofo.recording.jibri.JibriSession.handleJibriStatusUpdate(JibriSession.java:719)
        at org.jitsi.jicofo.recording.jibri.JibriSession.processJibriIqFromJibri(JibriSession.java:501)
        at org.jitsi.jicofo.recording.jibri.JibriSession.processJibriIqRequestFromJibri(JibriSession.java:482)
        at org.jitsi.jicofo.recording.jibri.CommonJibriStuff.handleIQRequest(CommonJibriStuff.java:247)
        at org.jitsi.jicofo.recording.jibri.OperationSetJibri.handleIQRequest(OperationSetJibri.java:98)
        at org.jivesoftware.smack.AbstractXMPPConnection$4.run(AbstractXMPPConnection.java:1188)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
Jicofo 2020-12-09 12:27:37.786 INFO: [318] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Got jibri status off and failure error
Jicofo 2020-12-09 12:27:37.786 INFO: [318] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Publishing new jibri-recording-status: <jibri-recording-status xmlns='http://jitsi.org/protocol/jibri' status='off' failure_reason='error' session_id='igoocprxgnagaont' recordin$
Jicofo 2020-12-09 12:27:37.787 INFO: [318] org.jitsi.jicofo.recording.jibri.JibriSession.log() Cleaning up current JibriSession

Please help me :frowning: :cry:

More tests

I looked that in the nano /etc/prosody/conf.avail/my.domain.com.cfg.lua exists the lines at the end of tile and yes. So, the difference was that in my internal.auth.mydomain I had another lines: internal_storage was none (now I updated to memory) and some lines like admins and another muc_room parameters. I deleted this lines and put it like the tutorial of @Freddie (I restarted everything: jicofo, prosody, jitsi-videobridge2, jibri).

And the problem persists (generates file but is empty and no video/audio codecs).

Let’s discard:

  • jibri.conf => I think that’s ok, I updated the file using the tutorial with the correct information :frowning:
  • Java => Ok (updated the launch.sh putting the correct path of java 8)
  • conf => Ok. “internal.auth.mydomain” “muc” and “recorder.mydomain” exists with correct params

Any ideas?

Can you post your full jibri.conf configuration?

Yes, take a look:

jibri {
  // A unique identifier for this Jibri
  // TODO: eventually this will be required with no default
  id = ""
  // Whether or not Jibri should return to idle state after handling
  // (successfully or unsuccessfully) a request.  A value of 'true'
  // here means that a Jibri will NOT return back to the IDLE state
  // and will need to be restarted in order to be used again.
  single-use-mode = false
  api {
    http {
      external-api-port = 2222
      internal-api-port = 3333
    }
    xmpp {
      // See example_xmpp_envs.conf for an example of what is expected here
      environments = [
                        {
                                // A user-friendly name for this environment
                                name = "prod environtment"

                                // A list of XMPP server hosts to which we'll connect
                                xmpp-server-hosts = ["mydomain.com"]

                                // The base XMPP domain
                                xmpp-domain = "mydomain.com"

                                // The MUC we'll join to announce our presence for
                                // recording and streaming services
                                control-muc {
                                        domain = "internal.auth.mydomain.com"
                                        room-name = "JibriBrewery"
                                        nickname = "jibri-nick"
                                }

                                // The login information for the control MUC
                                control-login {
                                        domain = "auth.mydomain.com"
                                        username = "jibri"
                                        password = "jibriauthpass"
                                }

                                // An (optional) MUC configuration where we'll
                                // join to announce SIP gateway services
                                sip-control-muc {
                                        domain = "domain"
                                        room-name = "room-name"
                                        nickname = "nickname"
                                }

                                // The login information the selenium web client will use
                                call-login {
                                        domain = "recorder.mydomain.com"
                                        username = "recorder"
                                        password = "jibrirecorderpass"
                                }

                                // The value we'll strip from the room JID domain to derive
                                // the call URL
                                strip-from-room-domain = ""

                                // How long Jibri sessions will be allowed to last before
                                // they are stopped.  A value of 0 allows them to go on
                                // indefinitely
                                usage-timeout = 0

                                // Whether or not we'll automatically trust any cert on
                                // this XMPP domain
                                trust-all-xmpp-certs = true
                        }
                ]
    }
  }
  recording {
    recordings-directory = "/srv/recordings"
    # TODO: make this an optional param and remove the default
    finalize-script = "/etc/jitsi/jibri/finalize_recording.sh"
  }
  streaming {
    // A list of regex patterns for allowed RTMP URLs.  The RTMP URL used
    // when starting a stream must match at least one of the patterns in
    // this list.
    rtmp-allow-list = [
      // By default, all services are allowed
      ".*"
    ]
  }
  chrome {
    // The flags which will be passed to chromium when launching
    flags = [
      "--use-fake-ui-for-media-stream",
      "--start-maximized",
      "--kiosk",
      "--enabled",
      "--disable-infobars",
      "--autoplay-policy=no-user-gesture-required"
    ]
  }
  stats {
    enable-stats-d = true
  }
  webhook {
    // A list of subscribers interested in receiving webhook events
    subscribers = []
  }
  jwt-info {
    // The path to a .pem file which will be used to sign JWT tokens used in webhook
    // requests.  If not set, no JWT will be added to webhook requests.
    # signing-key-path = "/path/to/key.pem"

    // The kid to use as part of the JWT
    # kid = "key-id"

    // The issuer of the JWT
    # issuer = "issuer"

    // The audience of the JWT
    # audience = "audience"

    // The TTL of each generated JWT.  Can't be less than 10 minutes.
    # ttl = 1 hour
  }
  call-status-checks {
    // If all clients have their audio and video muted and if Jibri does not
    // detect any data stream (audio or video) comming in, it will stop
    // recording after NO_MEDIA_TIMEOUT expires.
    no-media-timeout = 30 seconds

    // If all clients have their audio and video muted, Jibri consideres this
    // as an empty call and stops the recording after ALL_MUTED_TIMEOUT expires.
    all-muted-timeout = 10 minutes

    // When detecting if a call is empty, Jibri takes into consideration for how
    // long the call has been empty already. If it has been empty for more than
    // DEFAULT_CALL_EMPTY_TIMEOUT, it will consider it empty and stop the recording.
    default-call-empty-timeout = 30 seconds
  }
}

This line should be `

strip-from-room-domain = “conference.”

Just to be sure: you had your camera and microphone on (as in they were not muted, right)?

It works Freddie!!! I made 2 records and the 2 are perfect! The problem was the strip-from-room-domain :slight_smile:

Thank you so much, amazing!

Glad to hear. You’re welcome! :+1:t5:

1 Like