From bfe6d596932829b005b514ba9a1dd5c6c2e3433e Mon Sep 17 00:00:00 2001 From: Dennis Yurasov Date: Sat, 20 Mar 2021 12:04:08 +0300 Subject: [PATCH] SSRC change fix in kernelized stream --- daemon/media_socket.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/daemon/media_socket.c b/daemon/media_socket.c index 495e18581..b7e8ed76d 100644 --- a/daemon/media_socket.c +++ b/daemon/media_socket.c @@ -1449,7 +1449,7 @@ noop: // check and update SSRC pointers static void __stream_ssrc(struct packet_stream *in_srtp, struct packet_stream *out_srtp, u_int32_t ssrc_bs, - struct ssrc_ctx **ssrc_in_p, struct ssrc_ctx **ssrc_out_p, struct ssrc_hash *ssrc_hash) + struct ssrc_ctx **ssrc_in_p, struct ssrc_ctx **ssrc_out_p, struct ssrc_hash *ssrc_hash, struct packet_handler_ctx *phc) { u_int32_t in_ssrc = ntohl(ssrc_bs); u_int32_t out_ssrc; @@ -1471,6 +1471,10 @@ static void __stream_ssrc(struct packet_stream *in_srtp, struct packet_stream *o // ssrc_map_out. we don't need this if we're not transcoding if (!MEDIA_ISSET(in_srtp->media, TRANSCODE)) (*ssrc_in_p)->ssrc_map_out = in_ssrc; + + phc->unkernelize = 1; + ilog(LOG_DEBUG, ">>> in_ssrc changed for: %s%s:%d new: %x %s", + FMT_M(sockaddr_print_buf(&in_srtp->endpoint.address), in_srtp->endpoint.port, in_ssrc)); } mutex_unlock(&in_srtp->in_lock); @@ -1491,6 +1495,10 @@ static void __stream_ssrc(struct packet_stream *in_srtp, struct packet_stream *o // reverse SSRC mapping (*ssrc_out_p)->ssrc_map_out = in_ssrc; + + phc->unkernelize = 1; + ilog(LOG_DEBUG, ">>> out_ssrc changed for %s%s:%d new: %x %s", + FMT_M(sockaddr_print_buf(&out_srtp->endpoint.address), out_srtp->endpoint.port, out_ssrc)); } mutex_unlock(&out_srtp->out_lock); @@ -1602,7 +1610,7 @@ static void media_packet_rtp(struct packet_handler_ctx *phc) if (G_LIKELY(phc->out_srtp != NULL)) __stream_ssrc(phc->in_srtp, phc->out_srtp, phc->mp.rtp->ssrc, &phc->mp.ssrc_in, - &phc->mp.ssrc_out, phc->mp.call->ssrc_hash); + &phc->mp.ssrc_out, phc->mp.call->ssrc_hash, phc); // check the payload type // XXX redundant between SSRC handling and codec_handler stuff -> combine @@ -1631,7 +1639,7 @@ static void media_packet_rtp(struct packet_handler_ctx *phc) else if (phc->rtcp && !rtcp_payload(&phc->mp.rtcp, NULL, &phc->s)) { if (G_LIKELY(phc->out_srtp != NULL)) __stream_ssrc(phc->in_srtp, phc->out_srtp, phc->mp.rtcp->ssrc, &phc->mp.ssrc_in, - &phc->mp.ssrc_out, phc->mp.call->ssrc_hash); + &phc->mp.ssrc_out, phc->mp.call->ssrc_hash, phc); } }