MT#55283 trigger rekernel for SSRC-less streams

If a stream has been pushed to the kernel from anything other than RTP,
even though RTP is expected, we get a forwarding entries without any
SSRCs. This is valid, but once actual RTP is received, it needs to be
passed on to user space, so that SSRC contexts can be set up.

Possible fix for 

Change-Id: I51b82d3cf79cf66780fdde154bebe56e0f43174b
rfuchs/fixes
Richard Fuchs 8 months ago
parent 2acf5a6f85
commit a0b705eef9

@ -1513,6 +1513,7 @@ static const char *kernelize_one(struct rtpengine_target_info *reti, GQueue *out
if (proto_is_rtp(media->protocol)) {
reti->rtp = 1;
reti->ssrc_req = 1;
if (!MEDIA_ISSET(media, TRANSCODING)) {
reti->rtcp_fw = 1;
if (media->protocol->avpf)

@ -6374,7 +6374,7 @@ static unsigned int rtpengine46(struct sk_buff *skb, struct sk_buff *oskb,
// Look for matching SSRC index if any SSRC were given
ssrc_idx = target_find_ssrc(g, rtp.rtp_header->ssrc);
errstr = "SSRC mismatch";
if (ssrc_idx == -2)
if (ssrc_idx == -2 || (ssrc_idx == -1 && g->target.ssrc_req))
goto out_error;
pkt_idx = rtp_packet_index(&g->decrypt_rtp, &g->target.decrypt, rtp.rtp_header, ssrc_idx,

@ -102,6 +102,7 @@ struct rtpengine_target_info {
dtls:1,
stun:1,
rtp:1,
ssrc_req:1,
rtp_only:1,
track_ssrc:1,
rtcp:1,

Loading…
Cancel
Save