Add extended properties to rtp_engine for RTP retransmission support.
authorBen Ford <bford@digium.com>
Thu, 22 Feb 2018 20:27:26 +0000 (14:27 -0600)
committerBenjamin Keith Ford <bford@digium.com>
Fri, 23 Feb 2018 18:56:00 +0000 (12:56 -0600)
A couple of additional properties are needed in rtp_engine to enable
support for packet retransmission: AST_RTP_PROPERTY_RETRANS_RECV and
AST_RTP_PROPERTY_RETRANS_SEND. These will both be enabled automatically
if an endpoint has the webrtc option enabled. While this adds no
functionality currently, it will serve as a building block for future
changes for RTP retransmission support.

For more information, refer to the wiki page:
https://wiki.asterisk.org/wiki/display/AST/WebRTC+User+Experience+Improvements

Change-Id: Ic598acd042a045f9d10e5bdccb66f4efc9e587cc

include/asterisk/rtp_engine.h
res/res_pjsip_sdp_rtp.c

index c77be45..3812cb1 100644 (file)
@@ -122,6 +122,10 @@ enum ast_rtp_property {
        AST_RTP_PROPERTY_RTCP,
        /*! Enable Asymmetric RTP Codecs */
        AST_RTP_PROPERTY_ASYMMETRIC_CODEC,
+       /*! Enable packet retransmission for received packets */
+       AST_RTP_PROPERTY_RETRANS_RECV,
+       /*! Enable packet retransmission for sent packets */
+       AST_RTP_PROPERTY_RETRANS_SEND,
 
        /*!
         * \brief Maximum number of RTP properties supported
index ce8ed82..9f0cdd3 100644 (file)
@@ -219,10 +219,13 @@ static int create_rtp(struct ast_sip_session *session, struct ast_sip_session_me
                        (session->endpoint->media.tos_audio || session->endpoint->media.cos_audio)) {
                ast_rtp_instance_set_qos(session_media->rtp, session->endpoint->media.tos_audio,
                                session->endpoint->media.cos_audio, "SIP RTP Audio");
-       } else if (session_media->type == AST_MEDIA_TYPE_VIDEO &&
-                       (session->endpoint->media.tos_video || session->endpoint->media.cos_video)) {
-               ast_rtp_instance_set_qos(session_media->rtp, session->endpoint->media.tos_video,
-                               session->endpoint->media.cos_video, "SIP RTP Video");
+       } else if (session_media->type == AST_MEDIA_TYPE_VIDEO) {
+               ast_rtp_instance_set_prop(session_media->rtp, AST_RTP_PROPERTY_RETRANS_RECV, session->endpoint->media.webrtc);
+               ast_rtp_instance_set_prop(session_media->rtp, AST_RTP_PROPERTY_RETRANS_SEND, session->endpoint->media.webrtc);
+               if (session->endpoint->media.tos_video || session->endpoint->media.cos_video) {
+                       ast_rtp_instance_set_qos(session_media->rtp, session->endpoint->media.tos_video,
+                                       session->endpoint->media.cos_video, "SIP RTP Video");
+               }
        }
 
        ast_rtp_instance_set_last_rx(session_media->rtp, time(NULL));