Skip to content

Commit

Permalink
MT#55283 trigger rekernel for SSRC-less streams
Browse files Browse the repository at this point in the history
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 #1855

Change-Id: I51b82d3cf79cf66780fdde154bebe56e0f43174b
  • Loading branch information
rfuchs committed Sep 4, 2024
1 parent 2acf5a6 commit a0b705e
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 1 deletion.
1 change: 1 addition & 0 deletions daemon/media_socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion kernel-module/xt_RTPENGINE.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
1 change: 1 addition & 0 deletions kernel-module/xt_RTPENGINE.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit a0b705e

Please sign in to comment.