I know this log emission from RTPEngine has been discussed here before:
[core] Received answer SDP with media ID ('0') when no media ID was offered
[core] Usage error: List of codecs empty. Restoring original list of codecs. Results may be unexpected.
But I don't think a clear conclusion was ever reached about what gives rise to it. In this case, the offending SDP answer stanza, coming from a browser endpoint (JsSIP), is:
You'll have to look at the signalling in more detail. If what you've posted was in fact the SDP going to the WebRTC client and the SDP coming from it, then this would indeed be unexpected, unless you have a mix-up in from/to-tags for example (i.e. rtpengine doesn't know that these relate to the same client). Using additional SDP manipulation options may also be an explanation.
Cheers
Do you know under what circumstances such a mix-up might occur, provided that Kamailio is the controlling instrument?
For what it's worth, here are the RTPEngine options used in the offer from Kamailio: replace-origin replace-session-connection ICE=force UDP/TLS/RTP/SAVP SDES-off rtcp-mux-offer direction=internal direction=external
And for the answer going back to the UDP endpoint: replace-origin replace-session-connection ICE=remove RTP/AVP rtcp-mux-demux codec-strip=all codec-offer=PCMU,telephone-event direction=external direction=internal
I'm not 100% positive off the top of my head but I don't believe
the comma syntax works for codec-offer. List them separately
(`codec-offer-PCMU codec-offer-telephone-event`). Check the debug
log to see what's actually in the message.
Cheers
The most common situation I know of is an extra answer from an unknown to-tag (i.e. offer from A, answer from B, then another answer from C). We don't currently support this without explicitly telling rtpengine ahead of time that another branch (the one to C) exists, using a second offer message.Would this be cured by using the via-branch parameter?
1) a=mid seems to be generated on offers and answers anyway, despite not being present on the incoming offer/answer from the plain UDP side, and without the `generate-mid` option.
2) Is RTCP-MUX pretty much universal now? I got the impression this was a Chrome-mandated thing. 3) Is the reason for `no-rtcp-attribute` that the RTCP attribute would conflict with RTCP-MUX? If I understand SDP correctly, it is a statement about what one is willing to accept, and it seems that it would be all right to accept both? Or am I mistaken?
RTCP-mux is mandated by WebRTC and so cannot be negotiated in that context, and for this reason some WebRTC stacks don't like to see an `a=rtcp` attribute as it's redundant (and especially not with a port different from the RTP port, as that would indicate that RTCP-mux is optional).
Cheers