diff --git a/daemon/media_socket.c b/daemon/media_socket.c index 025977b63d..177c8a090b 100644 --- a/daemon/media_socket.c +++ b/daemon/media_socket.c @@ -1495,6 +1495,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) diff --git a/kernel-module/xt_RTPENGINE.c b/kernel-module/xt_RTPENGINE.c index 0389aaa027..406493d010 100644 --- a/kernel-module/xt_RTPENGINE.c +++ b/kernel-module/xt_RTPENGINE.c @@ -5318,7 +5318,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); diff --git a/kernel-module/xt_RTPENGINE.h b/kernel-module/xt_RTPENGINE.h index 079dc6507c..4f87494068 100644 --- a/kernel-module/xt_RTPENGINE.h +++ b/kernel-module/xt_RTPENGINE.h @@ -123,6 +123,7 @@ struct rtpengine_target_info { dtls:1, stun:1, rtp:1, + ssrc_req:1, rtp_only:1, track_ssrc:1, rtcp:1,