diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c
index a643ff6ba15e731963f2d8084a45347176945d5a..df42ae2577c6f352706f3760620d62485597a87e 100644
--- a/res/res_pjsip_session.c
+++ b/res/res_pjsip_session.c
@@ -5553,6 +5553,25 @@ static int add_sdp_streams(struct ast_sip_session_media *session_media,
 
 	handler_list = ao2_find(sdp_handlers, ast_codec_media_type2str(session_media->type), OBJ_KEY);
 	if (!handler_list) {
+		/* If there is no handler for this media, set port as 0 in m line and copy all media specific
+		 * attributes from the remote (offer) */
+		if ((ast_stream_get_state(stream) == AST_STREAM_STATE_REMOVED || !ast_stream_get_formats(stream) ||
+			!ast_format_cap_count(ast_stream_get_formats(stream))) && remote && remote->media[ast_stream_get_position(stream)]) {
+			pj_pool_t *pool = session->inv_session->pool_prov;
+			struct pjmedia_sdp_media *media = pjmedia_sdp_media_clone(pool, remote->media[ast_stream_get_position(stream)]);
+			if (media) {
+				/* Update port */
+				media->desc.port = 0;
+				media->desc.port_count = 1;
+
+				/* Add this media to the local SDP */
+				answer->media[answer->media_count++] = media;
+				ast_stream_set_state(stream, AST_STREAM_STATE_REMOVED);
+
+				SCOPE_EXIT_RTN_VALUE(0, "Add a rejected media stream and its attributes\n");
+			}
+		}
+
 		SCOPE_EXIT_RTN_VALUE(0, "No handlers\n");
 	}