On 21/05/2019 11.48, Carsten Bock wrote:
Hi,
I want to implement selective transcoding, e.g. avoiding Transcoding
between a HD codec (G722) and a non HD Codec (G711).
In case the caller does offer HD codecs, this is fine, e.g.
if(sdp_with_codecs_by_name("G722,OPUS")) {
rtpengine_offer("codec-transcode=OPUS codec-transcode=G722
codec-transcode=PCMA");
} else {
rtpengine_manage("codec-transcode=PCMA");
}
Now I have the issue, if the callee only sends me G711, I don't want
to offer G722 or Opus to the caller. However, rtpengine_answer() does
not seem to accept "codec-strip=G722 codec-strip=OPUS", e.g.:
onreply_route() {
if(!sdp_with_codecs_by_name("G722,OPUS")) {
rtpengine_ manage("codec-strip=OPUS codec-strip=G722");
}
}
As a result, the SDP always contains the transcoding options, e.g.
G722 and OPUS. I always end up in transcoding G722 to G711, which is
meaningless in that case.
Any ideas on how to solve that?
(above examples very simplified)
All transcoding options must be present in the `offer` - they're ignored
in the `answer`. (At least in newer versions - older versions did accept
them in an `answer`, but they didn't do what was expected, which is why
they were removed in later versions.)
The reason for this is that the callee may send media before the SDP
from the callee (the answer) is seen. Therefore all transcoding
decisions must be made at the time of the offer (otherwise you may end
up switching codecs whenever the answer is seen, which is undesirable).
So you'll have to figure out a way to decide what you want to do based
on what you know at the time of the offer.
I'm a bit confused by your example. If you want to avoid transcoding
between G.722 or Opus, and G.711, why do you want to offer PCMA when the
caller supports G.722 or Opus? Shouldn't you rather only offer other
"HD" codecs and strip all non-HD codecs in that case?
Cheers