diff --git a/main/bridge_channel.c b/main/bridge_channel.c
index 8566187cc1dbc6a9269097ac39ab912856f8046b..251dea7e356e71765f0a6e451110af6bf249fc28 100644
--- a/main/bridge_channel.c
+++ b/main/bridge_channel.c
@@ -1043,6 +1043,23 @@ int ast_bridge_channel_queue_frame(struct ast_bridge_channel *bridge_channel, st
 		return 0;
 	}
 
+	if ((fr->frametype == AST_FRAME_VOICE || fr->frametype == AST_FRAME_VIDEO ||
+		fr->frametype == AST_FRAME_TEXT || fr->frametype == AST_FRAME_IMAGE ||
+		fr->frametype == AST_FRAME_RTCP) && fr->stream_num > -1) {
+		int num = -1;
+
+		ast_bridge_channel_lock(bridge_channel);
+		if (fr->stream_num < (int)AST_VECTOR_SIZE(&bridge_channel->stream_map.to_channel)) {
+			num = AST_VECTOR_GET(&bridge_channel->stream_map.to_channel, fr->stream_num);
+		}
+		ast_bridge_channel_unlock(bridge_channel);
+
+		if (num == -1) {
+			/* We don't have a mapped stream so just discard this frame. */
+			return 0;
+		}
+	}
+
 	dup = ast_frdup(fr);
 	if (!dup) {
 		return -1;