rtp: Add REMB RTP property and set it on PJSIP video RTP.
authorJoshua Colp <jcolp@digium.com>
Sun, 18 Mar 2018 15:16:40 +0000 (15:16 +0000)
committerJoshua Colp <jcolp@digium.com>
Mon, 19 Mar 2018 13:48:47 +0000 (07:48 -0600)
This change adds a property to RTP instances to indicate that
REMB support is enabled and that sending/receiving should be
passed through.

This also enables it on video RTP instances in PJSIP if
WebRTC support is enabled.

Finally the goog-remb extension is added to the SDP using
the rtcp-fb attribute to indicate our support for it.

Details about REMB can be found on the draft document for it:
https://tools.ietf.org/html/draft-alvestrand-rmcat-remb-03

Change-Id: I1902dda1c0882bd1a0d71b2f120684b44b97e789

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

index 3812cb1..4e32d6b 100644 (file)
@@ -126,6 +126,8 @@ enum ast_rtp_property {
        AST_RTP_PROPERTY_RETRANS_RECV,
        /*! Enable packet retransmission for sent packets */
        AST_RTP_PROPERTY_RETRANS_SEND,
+       /*! Enable REMB sending and receiving passthrough support */
+       AST_RTP_PROPERTY_REMB,
 
        /*!
         * \brief Maximum number of RTP properties supported
index 9f0cdd3..03d3765 100644 (file)
@@ -222,6 +222,7 @@ static int create_rtp(struct ast_sip_session *session, struct ast_sip_session_me
        } 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);
+               ast_rtp_instance_set_prop(session_media->rtp, AST_RTP_PROPERTY_REMB, 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");
@@ -1092,6 +1093,9 @@ static void add_rtcp_fb_to_stream(struct ast_sip_session *session,
         */
        attr = pjmedia_sdp_attr_create(pool, "rtcp-fb", pj_cstr(&stmp, "* ccm fir"));
        pjmedia_sdp_attr_add(&media->attr_count, media->attr, attr);
+
+       attr = pjmedia_sdp_attr_create(pool, "rtcp-fb", pj_cstr(&stmp, "* goog-remb"));
+       pjmedia_sdp_attr_add(&media->attr_count, media->attr, attr);
 }
 
 /*! \brief Function which negotiates an incoming media stream */