提交 8a1cb140 authored 作者: Seven Du's avatar Seven Du 提交者: Michael Jerris

FS-7499: trying to fix rtp data len when rtp extension is used

duplicated some code from 4943~4953, but that code has it's own problem, it forget to reset *bytes results to
larger frame->datalen could read beyond the buffer, and it also makes stats not accurate. But if we reset *bytes
at that place, then later the switch_vb_put_packet has problem because it depends that *bytes. this patch should
fix the datalen at least buf still leaves duplicated code and inaccurate stats.
上级 ff076afa
...@@ -5234,6 +5234,24 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t ...@@ -5234,6 +5234,24 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
} }
} }
/* recalculate body length in case rtp extension used */
if (!rtp_session->flags[SWITCH_RTP_FLAG_PROXY_MEDIA] && !rtp_session->flags[SWITCH_RTP_FLAG_UDPTL] &&
rtp_session->recv_msg.header.version == 2 && rtp_session->recv_msg.header.x) { /* header extensions */
uint16_t length;
rtp_session->recv_msg.ext = (switch_rtp_hdr_ext_t *) rtp_session->recv_msg.body;
length = ntohs((uint16_t)rtp_session->recv_msg.ext->length);
if (length < SWITCH_RTP_MAX_BUF_LEN_WORDS) {
rtp_session->recv_msg.ebody = rtp_session->recv_msg.body + (length * 4) + 4;
if (*bytes > (length * 4 + 4)) {
*bytes -= (length * 4 + 4);
} else {
*bytes = 0;
}
}
}
return status; return status;
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论