Jigasi sip dialin has no audio for certain clients

Hi,

start to love jitsi meet. So first of all: many thanks for this great software!

I am nearly done with my setup but now I’m stuck since two days. I have a working setup resembling docker-compose.yml (I’m using podman not docker) plus second jvb. Now I try to add jigasi. SIP server is current freeswitch.

State is:

  • dial out from room works perfectly
  • dial in from my desktop phone (sip) via pstn -> freeswitch -> jits works
  • dial in from my mobile via pstn -> freeswitch -> jitsi works but audio is only oneway (from phone to room)

I tried

  • dialin via different sip accounts - no difference
  • dialin from desktop phone with codec forced to the same of the mobile call (PCMA/8000) -> works including audio
  • Also tried different mobile, also oneway audio (and checked volume settings…)

Because of freeswitch & jigasi are on different private LANs I tripple checked the NAT (and proxy media, and latching, and port forwarding) settings. Currently the freeswitch channel is set with inherit_codec and proxy_media set to true and all sip profiles have inbound-late-negotiation enabled. I do not see any difference with or without these settings. There is a fixed port forwarding to the freeswitch. So I always see the udp packets jigasi <–> freeswitch and freeswitch <–> the sip trunk during all calls. Even when there is no audio on my mobile I do see incoming and outgoing udp streams between freeswitch and my sip provider. I compared the INVITE/SDP between working and non working calls and did not find differences (though I’m not a SIP expert).

I’v been through all the recent and not so recent topics for nat/audio/jigasi… in the last two days. Compared config.js, interface_config.js, jigasi and prosody config with the default one generated on my laptop with docker and tried settings from this community. I tried the official container images and self generated ones yesterday with the new stable packages. I do not have errors in the jigasi packet logs. I don’t see any differences in jigasi log between calls with and without audio. Currently I do not have any warnings or errors (e.g. avatar errors), that do not show up on successfull calls as well.

Current setting: I reverted all the changes and besides some interface_config.js settings, I am back to the config of the docker-compose setup plus the jvb on LAN settings. I only had to add

net.java.sip.communicator.impl.protocol.sip.SKIP_REINVITE_ON_FOCUS_CHANGE_PROP=true

to get the dialin working. Otherwise the call was answered and immediately dropped.

Now I’m out of ideas. Any help how to debug this would be greatly appreciated.

I’m not sure what configs/logs to include. I do not want to bomb this forum with all I did check. But I will provide everything necessary to debug this.

Axel

jigasi sip-communicator.properties:

net.java.sip.communicator.impl.protocol.SingleCallInProgressPolicy.enabled=false

# Adjust opus encoder complexity
net.java.sip.communicator.impl.neomedia.codec.audio.opus.encoder.COMPLEXITY=10

# Disables packet logging
net.java.sip.communicator.packetlogging.PACKET_LOGGING_ENABLED=false

# SIP account
net.java.sip.communicator.impl.protocol.sip.acc1=acc1

net.java.sip.communicator.impl.protocol.sip.acc1.PROXY_ADDRESS=...
net.java.sip.communicator.impl.protocol.sip.acc1.PROXY_AUTO_CONFIG=false
net.java.sip.communicator.impl.protocol.sip.acc1.PROXY_PORT=5060
net.java.sip.communicator.impl.protocol.sip.acc1.PREFERRED_TRANSPORT=UDP


net.java.sip.communicator.impl.protocol.sip.acc1.ACCOUNT_UID=SIP\:jitsi@sip.domain
net.java.sip.communicator.impl.protocol.sip.acc1.PASSWORD=...
net.java.sip.communicator.impl.protocol.sip.acc1.PROTOCOL_NAME=SIP
net.java.sip.communicator.impl.protocol.sip.acc1.SERVER_ADDRESS=sip.domain
net.java.sip.communicator.impl.protocol.sip.acc1.USER_ID=jitsi@sip.domain
net.java.sip.communicator.impl.protocol.sip.acc1.KEEP_ALIVE_INTERVAL=25
net.java.sip.communicator.impl.protocol.sip.acc1.KEEP_ALIVE_METHOD=OPTIONS
net.java.sip.communicator.impl.protocol.sip.acc1.VOICEMAIL_ENABLED=false
net.java.sip.communicator.impl.protocol.sip.acc1.JITSI_MEET_ROOM_HEADER_NAME=X-Room-Name
net.java.sip.communicator.impl.protocol.sip.acc1.JITSI_MEET_DOMAIN_BASE_HEADER_NAME=X-Domain-Base
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.AMR-WB/16000=750
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.G722/8000=700
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.GSM/8000=0
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.H263-1998/90000=0
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.H264/90000=0
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.PCMA/8000=600
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.PCMU/8000=650
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.SILK/12000=0
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.SILK/16000=0
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.SILK/24000=0
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.SILK/8000=0
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.VP8/90000=0
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.iLBC/8000=10
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.opus/48000=1000
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.red/90000=0
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.speex/16000=0
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.speex/32000=0
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.speex/8000=0
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.telephone-event/8000=1
net.java.sip.communicator.impl.protocol.sip.acc1.Encodings.ulpfec/90000=0
net.java.sip.communicator.impl.protocol.sip.acc1.OVERRIDE_ENCODINGS=false
net.java.sip.communicator.impl.protocol.sip.acc1.DOMAIN_BASE=meet.jitsi

# XMPP account used for control
net.java.sip.communicator.impl.protocol.jabber.acc1=acc1
net.java.sip.communicator.impl.protocol.jabber.acc1.ACCOUNT_UID=Jabber:jigasi@auth.meet.jitsi
net.java.sip.communicator.impl.protocol.jabber.acc1.USER_ID=jigasi@auth.meet.jitsi
net.java.sip.communicator.impl.protocol.jabber.acc1.IS_SERVER_OVERRIDDEN=true
net.java.sip.communicator.impl.protocol.jabber.acc1.SERVER_ADDRESS=xmpp.meet.jitsi
net.java.sip.communicator.impl.protocol.jabber.acc1.PASSWORD=...
net.java.sip.communicator.impl.protocol.jabber.acc1.AUTO_GENERATE_RESOURCE=true
net.java.sip.communicator.impl.protocol.jabber.acc1.RESOURCE_PRIORITY=30
net.java.sip.communicator.impl.protocol.jabber.acc1.IS_CARBON_DISABLED=true
net.java.sip.communicator.impl.protocol.jabber.acc1.DEFAULT_ENCRYPTION=true
net.java.sip.communicator.impl.protocol.jabber.acc1.IS_USE_ICE=true
net.java.sip.communicator.impl.protocol.jabber.acc1.IS_ACCOUNT_DISABLED=false
net.java.sip.communicator.impl.protocol.jabber.acc1.IS_PREFERRED_PROTOCOL=false
net.java.sip.communicator.impl.protocol.jabber.acc1.AUTO_DISCOVER_JINGLE_NODES=false
net.java.sip.communicator.impl.protocol.jabber.acc1.PROTOCOL=Jabber
net.java.sip.communicator.impl.protocol.jabber.acc1.IS_USE_UPNP=false
net.java.sip.communicator.impl.protocol.jabber.acc1.USE_DEFAULT_STUN_SERVER=true
net.java.sip.communicator.impl.protocol.jabber.acc1.ENCRYPTION_PROTOCOL.DTLS-SRTP=0
net.java.sip.communicator.impl.protocol.jabber.acc1.ENCRYPTION_PROTOCOL_STATUS.DTLS-SRTP=true
net.java.sip.communicator.impl.protocol.jabber.acc1.VIDEO_CALLING_DISABLED=true
net.java.sip.communicator.impl.protocol.jabber.acc1.OVERRIDE_ENCODINGS=false
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.G722/8000=705
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.GSM/8000=0
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.H263-1998/90000=0
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.H264/90000=0
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.PCMA/8000=0
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.PCMU/8000=0
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.SILK/12000=0
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.SILK/16000=0
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.SILK/24000=0
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.SILK/8000=0
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.VP8/90000=0
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.iLBC/8000=0
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.opus/48000=750
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.speex/16000=0
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.speex/32000=0
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.speex/8000=0
net.java.sip.communicator.impl.protocol.jabber.acc1.Encodings.telephone-event/8000=0
net.java.sip.communicator.impl.protocol.jabber.acc1.BREWERY=jigasibrewery@internal-muc.meet.jitsi
net.java.sip.communicator.impl.protocol.jabber.acc1.DOMAIN_BASE=meet.jitsi

org.jitsi.jigasi.BREWERY_ENABLED=true

org.jitsi.jigasi.HEALTH_CHECK_SIP_URI=
org.jitsi.jigasi.HEALTH_CHECK_INTERVAL=300000
org.jitsi.jigasi.HEALTH_CHECK_TIMEOUT=600000

org.jitsi.jigasi.xmpp.acc.IS_SERVER_OVERRIDDEN=true
org.jitsi.jigasi.xmpp.acc.SERVER_ADDRESS=xmpp.meet.jitsi
org.jitsi.jigasi.xmpp.acc.VIDEO_CALLING_DISABLED=true
org.jitsi.jigasi.xmpp.acc.JINGLE_NODES_ENABLED=false
org.jitsi.jigasi.xmpp.acc.AUTO_DISCOVER_STUN=false
org.jitsi.jigasi.xmpp.acc.IM_DISABLED=true
org.jitsi.jigasi.xmpp.acc.SERVER_STORED_INFO_DISABLED=true
org.jitsi.jigasi.xmpp.acc.IS_FILE_TRANSFER_DISABLED=true

org.jitsi.jigasi.xmpp.acc.USER_ID=jigasi@auth.meet.jitsi
org.jitsi.jigasi.xmpp.acc.PASS=...
org.jitsi.jigasi.xmpp.acc.ANONYMOUS_AUTH=false
org.jitsi.jigasi.xmpp.acc.ALLOW_NON_SECURE=true


# Activate this property if you are using self-signed certificates or other
# type of non-trusted certicates. In this mode your service trust in the
# remote certificates always.
net.java.sip.communicator.service.gui.ALWAYS_TRUST_MODE_ENABLED=true

net.java.sip.communicator.impl.protocol.sip.SKIP_REINVITE_ON_FOCUS_CHANGE_PROP=true

To isolate the problem, are you able to get two-way audio with mobile just with Freeswitch? Nothing to do with Jigasi at this point.

Have you tried with
net.java.sip.communicator.impl.protocol.sip.acc1.OVERRIDE_ENCODINGS=false
as true

Freeswitch works fine alone for several weeks now. No audio problems. Also I do get two way audio when I dial out from jigasi to mobile. But I’m still not sure which side is “wrong” here.

Tried the OVERRIDE_ENCODINGS=true but no change.

I currently also checking the codecs. I found, that if I dial out of jitsi (the case audio works), Jigasi/Freeswitch leg uses G722/16000 and Freeswitch/provider uses PCMA/8000. When I dial in (same phone, one way audio), both legs use PMCA/8000. I’m currently trying to systematically check different codecs freeswitch/jigasi leg.

BTW to simplify the setup I added a private net between jitsi/jigasi and freeswitch, so they can communicate via a local link without any NAT and without any firewall in between.

Another difference was UDP fragmentation of the INVITE of the dial in but I removed some header. Now there is also no difference here, especially with the direct link. Still no progress…

I believe in Freeswitch you can enforce what codecs to use. Have you tried that? Can you enforce codecs at your SIP provider?

Some providers let you choose what codecs to use.

I don’t know how many times I thought “I’m getting closer”…

Forced the codec of the connection to be the same as in the dial out case, but still only one way audio when I dial in from my mobile…

One other thing I can think of is encryption. Are you using encryption either in Freeswitch or Jiagsi? Try without if you are.

I have not changed the docker-jitsi-meet config regarding encryption and not activated in freeswitch. But I’m not sure how to check this.

Driving me nuts.

Tried other mobiles and landlines. Always the same. LL works, mobile on silence.

net.java.sip.communicator.impl.protocol.jabber.acc1.USE_DEFAULT_STUN_SERVER=true
net.java.sip.communicator.impl.protocol.jabber.acc1.ENCRYPTION_PROTOCOL_STATUS.DTLS-SRTP=true

try with false

Really: thanks for your time and thoughts!

I set both to false, jigasi restart. But no change. Double checked dial out. Still working.

I guess I need a break. Three days without any progress just before the finish line … I guess land line “only” dial in for the few without headset is acceptable for the moment

I know that feeling. I’ve been there many more times than I would like to recall

I hope someone else from the community chimes in here.

I meant to post this earlier but copied the stun line instead

Try this with false.

What version of Jigasi are you using? Have your tried an earlier version … this one seems to work well within the community

apt-get install jigasi=1.0-235

Tried DEFAULT_ENCRYPTION=false, still not working.

No it gets mysterious. I had twice a successful call: Remove everything, recreate container from official docker images and let them generate the default from my .env, put jvb config for LAN in place and restart jvb, put jigasi config (just add the SKIP_REINVITE_ON_FOCUS_CHANGE_PROP=true). Start a meeting, dial in from mobile and it worked once. Repeated the exact steps and it does not work.

I tried different combinations: all from official docker images (stable/4101), self created images from docker-jitsi-meet master with the new stable packages and some combinations of them. All identical in terms of this dial in one way audio problem. I don’t know the exact versions in the official docker images.

Reason still unknown. But when I record the calls in freeswitch, the missing audio is there in all calls. So currently it looks it gets lost later.

sorry to post to such an old thread but i’ve been experiencing a dial-in issue: 1 participant dials in, is audible to every1 else but me:-\ wtf? i can hear every1 else…

To fix this issue, I had to put this in Jigasi configuration

org.jitsi.impl.neomedia.transform.csrc.CsrcTransformEngine.DISCARD_CONTRIBUTING_SOURCES=true

Found the solution here : Add ability to Jigasi's sip-communicator.properties to avoid one-way communication with (cell) phones · Issue #1052 · jitsi/docker-jitsi-meet · GitHub