Livestream YouTube Audio Crackling like jack contact sound, solutions?

Hi there, we’ve been successfully using Jitsi Meet for a couple of livestreams on YouTube and we’ve been pretty happy with the result. The only trick you have to learn is to use the “everyone follows me” option to control what the YouTube audience sees, and streaming with the tiles layout is pretty cool.

We only have one issue, and it’s about the audio. We haven’t done extended testing but in our experience the audio is crackling during the livestream on the two youtube modes with lower latency, and no crackling on the standard mode (30 sec delay though!).

With the realtime mode the crackling goes away after a day or so, when the video gets processed by YouTube (it takes a lot more than what we were used to coming from Hangouts On Air but that’s not an issue).

With the intermediate mode, which we tried the last time hoping for the audio to improve, even after youtube processing the audio seems to still crackle. Here’s proof.

So I’m curious as to why this issue is there and what is the best solution to solve it, because it’s literally the only issue we have run into so far, the product is great otherwise!

2 Likes

Hi cad0p,

In the old messages I saw that the activating disableAudioLevels improves the audio. This property is in the /etc/jitsi/meet/YOUR_HOST-config.js file. Change its value to true

This will affect the blue dots when someone talks

this of course if you are hosting it yourself I imagine

Yes this is on self hosted. But it does not seem to help at all :frowning:

Same problem here! Even I using meet.jit.si… Audio on youtube live is crackling.

When you were configuring the YouTube event did you use low bandwidth mode, if so, don’t as we had reports it brings some audio problems.

Thanks for your fast reply @damencho! I’ve been using jitsi with jibri for a month without any issues. This started to happen on Monday, even without me doing any change in my settings.
When I created the stream key, I set this with the variable bitrate.
I’ve just tested with 720p bitrate, but the same problem happened. I believe that Youtube changed (or updated) some parameter in the audio processing, and this change affected the streaming experience using jitsi/jibri. NOTE: Youtube removed several configuration options for live events, there is no more “low bandwidth mode”.

Same problem recently here: Crackle and pop in YouTube

I think what Damyan meant to ask about was “low latency mode”–that setting seems to be correlated with a more frequent occurrence of this issue. We have seen issues, though, even when not using that value in YouTube. We’ve also found that the crackling will disappear if you view the video again later, so this seems to be on YouTube’s side :confused:

@bbaldino Thanks for your reply! Crackling remains even in the video recorded after live. This only happens using jitsi/jibri, I’ve tested with zoom and other software, I didn’t have this problem. I use normal latency mode. I was wondering if there would be a need for any adjustments to the parameters of ffmpeg (maybe your version?) of the jibri.

Maybe the problem could be in the version of chrome used by Jibri to capture the sound? I guess that youtube changed something on their side that affected jibri.

I super highly doubt it is related to youtube. Possibly some audio latency on machine, maybe could be fixed with some kernel setting or similar, or maybe ffmpeg parameter.

I might test it later, but some things prevent me from testing it, maybe someone else can do that. What I wanted to do:
stream from my machine using obs, lowest latency of course, check the stream, no noise as kinda expected
install docker jitsi and jibri on local machine, stream from it (same machine just other software). Well was unable to do that for now as docker jibri expects particular sound card numbering and on my machine it is different

So if someone wants to give it a shot, very welcome! :slight_smile:

So just as I finished my prevous post remembered that I have laptop, and did the same test there, stream from obs, stream from docker jitsi stack installed there, and obs stream had perfect quality, while jibri was quite bad. Now of course whole jitsi stack has way more overhead than obs, but still this pretty conclusively shows that problem is not on youtubes end.

Also crackling audio using jibri on ubuntu20.04 and latest ffmpeg :frowning: Not when recording, only when streaming (to youtube, having “normal latency”). Been fiddling with ffmpeg options but not found a solution yet :frowning:

We’ve seen some instances of this too, but haven’t investigated too much. A couple things we have noticed:

  1. The problem appeared to be more prevalent when using ‘low latency’ streaming modes on YouTube
  2. Even when the issue did occur during the live stream, we’ve seen that it disappeared when re-viewing the video after the initial stream.

The second point made us think this was something on YouTube’s side, but if anyone finds anything about how to improve this that would be great.

I already posted above - this is 100% not youtube problem. Please read my previous posts.
2. It disappears since likely youtube re-encodes video behind the sciences into more space efficient format, and I would guess does some low/hi pass/noise filtering in that process, which eliminates that. But that does not really matter. Live stream is live stream and in some cases nobody cares about recorded live stream, just about actual live stream (which is the situation with my use case), so we should have options to tune it. Very likely tuning via ffmpeg params should allow fixing it, though possibly some kernel tuning might be needed. I’ll also try bumping priority for ffmpeg during live-streaming when I have the time to set it up again.

In any case, since other software (obs) can stream to same youtube settings without problem on same hw, there clearly is some tuning to be done.

1 Like

Hi, I found an audio filter example for ffmpeg to reduce noise (https://stackoverflow.com/questions/46025867/ffmpeg-input-8k-aac-aac-flv-youtube-streaming-noise). If I add this option (-af "equalizer=f=100:t=h:width=200:g=-64") to my ffmpeg-stream from jibri to youtube the cracks are gone! :slight_smile:

1 Like

Super, but to use this you probably needed to recompile jibri? Or maybe wrapped ffmpeg into a script?

I was sending a recording with ffmpeg to youtube from the command line and the audio filter worked.

Now I compiled this -af option into jibri and when jibri starts I see the -af option:

020-06-10 14:40:43.419 INFO: [72] org.jitsi.jibri.util.JibriSubprocess.ffmpeg.launch() Starting ffmpeg with command ffmpeg -y -v info -f x11grab -draw_mouse 0 -r 30 -s 1280x720 -thread_queue_size 4096 -i :0.0+0,0 -f alsa -thread_queue_size 4096 -i plug:cloop -acodec aac -strict -2 -ar 44100 -c:v libx264 -preset veryfast -maxrate 2976k -bufsize 5952k -pix_fmt yuv420p -r 30 -crf 25 -g 60 -tune zerolatency -f flv rtmp://a.rtmp.youtube.com/live2/xxx-xxxx-xxx-xxxx -af equalizer=f=100:t=h:width=200:g=-64

(btw: I scrambled my key using xxxx-xxx…)
But the cracks are back…?? :frowning:

Diff change in source:

diff org/jibri/src/main/kotlin/org/jitsi/jibri/capture/ffmpeg/Commands.kt jibri/src/main/kotlin/org/jitsi/jibri/capture/ffmpeg/Commands.kt
32c32
<         "-i", "plug:bsnoop",
---
>         "-i", "plug:cloop",
38c38,39
<         "-f", sink.format, sink.path
---
>         "-f", sink.format, sink.path,
>         "-af", "equalizer=f=100:t=h:width=200:g=-64"

Note: “plug:bsnoop” did not work and I saw “plug:cloop” in my original stream hence the change.

Conclusion: with the -af option added on the command-line and send an mp4 with ffmpeg to youtube I hear no cracks. with the -af option build into jibri I still hear the cracks.

About my building skills (never used mvn…):
I only did “mvn clean verify package” in the rootdir of the git clone. The build went succesfull. Then I copied target/jibri-8.0-SNAPSHOT-jar-with-dependencies.jar to jibri.jar on my jibri server…

In the netherlands we say: “schiet mij maar lek…” (“shoot me…”) :wink:
I guess 'll leave it up to the developers to implement the noise filter…

Interesting, thanks for your input! I’ll try via shell script wrapper for ffmpeg when I get the time as I do not want to get involved with building java monsters :slight_smile: And also will not have code outside of mainline this way.

No worries. A little follow up:

I noticed the argument -af came after the rtmp://…
Checking on the command-line the option -af needs to be before rtmp://… :
This cmdline works (no cracks):

ffmpeg -y -v info -r 30 -i test.mp4 -f alsa -acodec aac -strict -2 -ar 44100 -c:v libx264 -preset veryfast -maxrate 2976k -bufsize 5952k -pix_fmt yuv420p -r 30 -crf 25 -g 60 -tune zerolatency -f flv -af “equalizer=f=100:t=h:width=200:g=-64” rtmp://a.rtmp.youtube.com/live2/xxxx-xxxx…

And this one does not (cracks):

ffmpeg -y -v info -r 30 -i test.mp4 -f alsa -acodec aac -strict -2 -ar 44100 -c:v libx264 -preset veryfast -maxrate 2976k -bufsize 5952k -pix_fmt yuv420p -r 30 -crf 25 -g 60 -tune zerolatency -f flv rtmp://a.rtmp.youtube.com/live2/xxxx-xxxx… -af "equalizer=f=100:t=h:width=200:g=-64"

So, I put the option a bit higher in the list in the srcfile (src/main/kotlin/org/jitsi/jibri/capture/ffmpeg/Commands.kt) and rebuild…
Now I see in the jibri log:

Starting ffmpeg with command ffmpeg -y -v info -f x11grab -draw_mouse 0 -r 30 -s 1280x720 -thread
_queue_size 4096 -i :0.0+0,0 -f alsa -thread_queue_size 4096 -af equalizer=f=100:t=h:width=200:g=-64 -i plug:cloop -acodec aac -strict -2 -ar 44100 -c:v libx264 -preset veryfast -maxrate 2976k -bufsize 5952k -pix_fmt yuv420p -r 30 -crf 25 -g 60 -tune zerolatency -f flv rtmp://a.rtmp.youtube.com/live2/xxxx-xxx…

But now I also get an error when I try to start a stream… :frowning: :

rg.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.onFfmpegProcessUpdate() Ffmpeg quit abruptly. Last output line: Error opening input files: Invalid argument

As said: I leave it up to the developers…