Asterisk SFU Video Conferencing

I’m not surprised. Like I previously mentioned that’s just not a scenario that anyone has fully flushed out and made work with Asterisk.


I am not able to differentiate the different streams at the end points as the asterisk confbridge is modifying even the ssrc and cname values.

Lets say A endpoint is sending V1 and V2 two video streams , on the B end point i am not able identify which is V1 and V2 as none of the values on both ends are same. Even the ssrc , cname are not matching.

How can we co-relate the streams in such case ?

Thanks and Regards

There is no ability to do so besides the messaging support that was added[1], but that doesn’t provide low level information like the ssrc/cname on both sides.



Coming to my previous problem on [Jan 18 15:59:21] WARNING[23786][C-00000003]: res_srtp.c:493 ast_srtp_protect: SRTP protect: replay check failed (index too old). After reading , i understand that this problem can come because of SSRC and Seq num of new stream matching with old stream.

I think when the new client connects to confbridge, when sending the new Invite to other parties already connected in the conference probably SSRC is not set or created properly.

if i want to debug this which files in asterisk source code do i need to look into. Is there a way to understand the modules flows ?

i have compared Cisco libsrtp and asterisk libsrtp-2 codes and they look same. Now i wanted to check any possible error in the wrapper code of asterisk res_srtp .

which source file contains the sending of invite to other parties to review for this bug .

I am badly stuck with this error and video is not working after this error comes. When only 1 party is there in conference i dont see this error. Once the second party comes into conference this error starts coming immediately or sometimes after some interval…

Any pointers how to debug or review the files is highly appreciated.

thanks and regards

i have observed that it also recovers from this error and works fine and again it gives problem.

why this problem can come in between the call when the ssrc is not changing.

thanks and regards,

The modules involved would res_srtp and res_rtp_asterisk, as well as the external libsrtp library.

The module responsible for constructing/handling SDP Is res_pjsip_sdp_rtp.

Thanks will review the flow once…


What is the current version of libsrtp supported by asterisk ?
is it 2.2.0 ?

thanks and regards,

We only publish a minimum which is 1.5.4[1]. Newer versions in the 2.x range should work, and I’m not aware of any current filed issues in regards to it.



I have recently installed asterisk-16.2.0-rc1.
I can see SRTP code present in libsrtp-2 folder inside asterisk and also in pjproject SRTP folder.
Does the asterisk compilation does compilation of both codes ?
Does asterisk and pjproject use the same version of SRTP ?
Do i need to take any measures while compiling related to SRTP ?
What impact it can have if two different versions are used , only the additional functionality or even encryption and decryption will have problem.

Will one using 32bit and other using 64bit version create problem.

Sorry for my ignorance, i have not checked how the SRTP will work.

thanks and regards,

Asterisk doesn’t include libsrtp, and we don’t use the pjproject media stack so libsrtp is not built. We rely on the system provided libsrtp, or one manually specified when running the configure script. I’m not aware of anything special in regards to building it.


Is asterisk not supporting bundle policy “max-bundle” , it is working with “max-compat” when two video m= lines are sent from WebRTC client with address and port.

bundle-only is not working as per the WebRTC requirement.


Asterisk supports BUNDLE as of the time the support was written, but bundle has gone through something like 27 different revisions so it may have changed a bit and further changes are required for “max-bundle”. If properly configured with bundle enabled, though, the end result of the SDP negotiation is that all streams are bundled over a single transport.

Hi jcolp,

When bundle policy is set to max-bundle, only the first m= line with have address and port and rest m= lines will have port 0 with additional attribute a=“bundle-only” for streams under same bundle group. But as per the asterisk code i see it is checking if port is 0 and treating it as disabled media without even checking the attribute bundle-only. As per WebRTC if bundle-only is present then the media is not disabled even though port is zero and is under bundle group.


Then support for that would have to be added. The specification itself when BUNDLE was implemented never talked about or stated such things.


confBirdge is sending the refresh SDP only when the new participant joins or leaves the conference. It is not sending when any new stream is added by the existing participant. If i need to refresh the SDP to reflect the new stream to other participants i think i will have to send AST_CONTROL_STREAM_TOPOLOGY_SOURCE_CHANGED event.

Which part of the code requires changes…i am not able to understand how flow is happening across the modules.


That is a developer question. This is an end user forum. There are mailing lists and IRC channels for developers.

thank you…Will check in that forum…

All of this logic happens within bridge_softmix. It is what establishes the mappings, and requests a new stream topology (essentially a definition of all the streams that should exist on the channel). This then gets turned into a reinvite if allowed and sent out. If accepted the mapping is then put into place.

It would need to react to any changes on sources and do what is needed.

Does Asterisk support SimulCast ??