func_jitterbuffer: Add audio/video sync support.

This change adds support to the JITTERBUFFER dialplan function
for audio and video synchronization. When enabled the RTCP SR
report is used to produce an NTP timestamp for both the audio and
video streams. Using this information the video frames are queued
until their NTP timestamp is equal to or behind the NTP timestamp
of the audio. The audio jitterbuffer acts as the leader deciding
when to shrink/grow the jitterbuffer when adaptive is in use. For
both adaptive and fixed the video buffer follows the size of the
audio jitterbuffer.

ASTERISK-28533

Change-Id: I3fd75160426465e6d46bb2e198c07b9d314a4492
This commit is contained in:
Joshua Colp
2019-09-06 13:18:55 +00:00
parent f9f17f3bfe
commit 6647be69ac
7 changed files with 237 additions and 24 deletions

View File

@@ -3956,3 +3956,12 @@ struct ast_json *ast_rtp_instance_get_stats_all_json(struct ast_rtp_instance *in
return ast_rtp_convert_stats_json(&stats);
}
int ast_rtp_get_rate(const struct ast_format *format)
{
/* For those wondering: due to a fluke in RFC publication, G.722 is advertised
* as having a sample rate of 8kHz, while implementations must know that its
* real rate is 16kHz. Seriously.
*/
return (ast_format_cmp(format, ast_format_g722) == AST_FORMAT_CMP_EQUAL) ? 8000 : (int)ast_format_get_sample_rate(format);
}