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

@@ -44,7 +44,8 @@ struct ast_frame;
enum {
AST_JB_ENABLED = (1 << 0),
AST_JB_FORCED = (1 << 1),
AST_JB_LOG = (1 << 2)
AST_JB_LOG = (1 << 2),
AST_JB_SYNC_VIDEO = (1 << 3)
};
enum ast_jb_type {
@@ -89,6 +90,7 @@ struct ast_jb_conf
#define AST_JB_CONF_TARGET_EXTRA "targetextra"
#define AST_JB_CONF_IMPL "impl"
#define AST_JB_CONF_LOG "log"
#define AST_JB_CONF_SYNC_VIDEO "syncvideo"
/* Hooks for the abstract jb implementation */
/*! \brief Create */

View File

@@ -2800,6 +2800,17 @@ struct ast_json *ast_rtp_convert_stats_json(const struct ast_rtp_instance_stats
*/
struct ast_json *ast_rtp_instance_get_stats_all_json(struct ast_rtp_instance *instance);
/*!
* \brief Retrieve the sample rate of a format according to RTP specifications
* \since 16.7.0
* \since 17.1.0
*
* \param format The media format
*
* \retval The sample rate
*/
int ast_rtp_get_rate(const struct ast_format *format);
/*!
* \since 12
* \brief \ref stasis topic for RTP and RTCP related messages