Hello Daniel,
there are RPC commands to easily drain a rtpengine node, there is no need for fancy re-INVITE sending logic etc.. Have also a look to the “rtpengine_allow_op” parameter.
Regarding the keydb, I think you did not look much into it. It’s a clustered redis basically, without the need for key space notifications and the like. You can have even master-master replication. It has some maintenance issues, though, but people are using it. Its supported from rtpengine.
Cheers,
Henning
From: Daniel Donoghue via sr-users <sr-users@lists.kamailio.org>
Sent: Montag, 16. September 2024 11:09
To: Kamailio (SER) - Users Mailing List <sr-users@lists.kamailio.org>
Cc: Daniel Donoghue <oneofsomany@hotmail.com>
Subject: [SR-Users] Re: rtpengine module
Hi Henning, thank you for your reply.
The problem I see with using a b2bua for sending the reinvite is that kamailio selects the rtpengine node for the offer and answer to both parties involved in the call because it, and rtpengine, sit in the middle. As such, one b2bua telling the other it is changing its media stream location is only relevant to rtpengine which means the other party shouldnt get new media information. The b2bua can only change its own local session setup.
This idea might work, i suppose, if the rtpengine in question is actually down and kamailio has detected it as being down but it does not work in cases where i want to rebalance calls across multiple rtpengine nodes or move a call to another node for debugging purposes or simply to drain a node ready to shut it down.
As i understand it, keydb is redis compatible which indicates it works the same way as rtpengine's current redis functionality which i dont think will do what i want as i dont believe it can share tls encrypted rtp sessions across nodes and has a noisy, keyspace notifications and 1 database per node, pre defined. This is not a workable solution for us.
opensips has an rtp_relay module specifically for this purpose: https://blog.opensips.org/2021/06/09/media-re-anchoring-using-opensips-3-2/.
Blessings,
--
Daniel
From: Henning Westerholt <hw@gilawa.com>
Sent: Monday, September 16, 2024 10:49 AM
To: Kamailio (SER) - Users Mailing List <sr-users@lists.kamailio.org>
Cc: Daniel Donoghue <oneofsomany@hotmail.com>
Subject: RE: rtpengine module
Hello,
Kamailio does not provide B2BUA functionality which would be needed for this to work. There are some modules that implement some functionality in this area, like the rtp_media_server module, you can have a look there. Have a look at this old discussion for more details: https://sr-users.sip-router.narkive.com/BWdc8gsd/kamailio-users-re-invite-mid-call
If you want to do a re-invite on a call, usually you should rely on a B2BUA component in your architecture.
As you are having issues scaling rtpengine, maybe it makes sense to concentrate on this topic. Some people are using something like keydb which provides an easier scaling for this particular NoSQL storage.
Cheers,
Henning
--
Henning Westerholt – https://skalatan.de/blog/
Kamailio services – https://gilawa.com
From: Daniel Donoghue via sr-users <sr-users@lists.kamailio.org>
Sent: Montag, 16. September 2024 09:36
To: sr-users@lists.kamailio.org
Cc: Daniel Donoghue <oneofsomany@hotmail.com>
Subject: [SR-Users] rtpengine module
Hello,
I am using rtpengine to encrypt and decrypt DTLS and SDES audio streams for my calls. I have a set of rtpengine instances running, configured using a database, such that it is easy to scale up on demand. This works well for initiating a call and balancing load across multiple instances but I want to be able to recover from rtpengine failure.
I have looked at configuring rtpengine with a redis service but do not believe that to be helpful in this case as im using encrypted media and because the configuration of rtpengine with redis has a lot of overheads, limits scaling and requires non standard configuration of a redis cluster.
I would like to be able to re-anchor media streams instead of relying on rtpengine to synchronise itself across a redis cluster. For this to work, i believe i would have to use the uac module to send a reINVITE and I speculate that i would need to use an xhttp event to trigger this remotely when a failure is detected.
I am unclear, though, how to get to a specific call within kamailio from the xhttp route in order to do anything to it, if i even need to, and i am nuclear how to make the rtpengine module select a new node for sdp for the reinvite?
How can i achieve my goal?
Perhaps it would be possible to modify the rtpengine module itself to support generating a reinvite and selecting a new node on receipt of an rpc request?
Hoping someone can help me find a way forward
With every blessing,
Daniel