Ignore:
Timestamp:
Jul 17, 2018 8:11:17 AM (12 months ago)
Author:
nanang
Message:

Re #2126: Implemented incoming RTCP-FB handling, i.e: parse and notify application via PJMEDIA event framework.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/include/pjmedia/rtcp_fb.h

    r5820 r5825  
    4444 
    4545/** 
    46  * Enumeration of RTCP Feedback types. 
     46 * Enumeration of RTCP Feedback types. Each feedback type may have subtypes, 
     47 * which should be specified in feedback parameters. 
    4748 */ 
    4849typedef enum pjmedia_rtcp_fb_type 
    4950{ 
    50     PJMEDIA_RTCP_FB_ACK,     /**< Positive acknowledgement feedbacks.       */ 
    51     PJMEDIA_RTCP_FB_NACK,    /**< Negative acknowledgement feedbacks.       */ 
    52     PJMEDIA_RTCP_FB_TRR_INT, /**< Minimum interval between two regular RTCP 
    53                                   packets.                                  */ 
    54     PJMEDIA_RTCP_FB_OTHER    /**< Other feedback type.                      */ 
     51    /** 
     52     * Positive acknowledgement feedbacks. Sample subtypes are Reference Picture 
     53     * Selection Indication (RPSI) and application layer feedbacks. 
     54     */ 
     55    PJMEDIA_RTCP_FB_ACK, 
     56 
     57    /** 
     58     * Negative acknowledgement feedbacks. Sample subtypes are generic NACK, 
     59     * Picture Loss Indication (PLI), Slice Loss Indication (SLI), Reference 
     60     * Picture Selection Indication (RPSI), and application layer feedbacks. 
     61     */ 
     62    PJMEDIA_RTCP_FB_NACK, 
     63 
     64    /** 
     65     * Minimum interval between two regular RTCP packets. 
     66     */ 
     67    PJMEDIA_RTCP_FB_TRR_INT, 
     68 
     69    /** 
     70     * Other feedback types. 
     71     */ 
     72    PJMEDIA_RTCP_FB_OTHER 
     73 
    5574} pjmedia_rtcp_fb_type; 
    5675 
     
    8099 
    81100    /** 
    82      * Specify the RTCP Feedback parameters. 
     101     * Specify the RTCP Feedback parameters. Feedback subtypes should be 
     102     * specified in this field, e.g: 
     103     * - 'pli' for Picture Loss Indication feedback, 
     104     * - 'sli' for Slice Loss Indication feedback, 
     105     * - 'rpsi' for Reference Picture Selection Indication feedback, 
     106     * - 'app' for specific/proprietary application layer feedback. 
    83107     */ 
    84108    pj_str_t                param; 
     
    135159 
    136160/** 
     161 * This structure declares RTCP Feedback Generic NACK message. 
     162 */ 
     163typedef struct pjmedia_rtcp_fb_nack 
     164{ 
     165    pj_int32_t           pid;           /**< Packet ID (RTP seq)    */ 
     166    pj_uint16_t          blp;           /**< Bitmask of following lost 
     167                                             packets                */ 
     168} pjmedia_rtcp_fb_nack; 
     169 
     170 
     171/** 
     172 * This structure declares RTCP Feedback Slice Loss Indication (SLI) message. 
     173 */ 
     174typedef struct pjmedia_rtcp_fb_sli 
     175{ 
     176    pj_uint16_t          first;         /**< First lost macroblock      */ 
     177    pj_uint16_t          number;        /**< The number of lost macroblocks 
     178                                             packets                    */ 
     179    pj_uint8_t           pict_id;       /**< Picture ID (temporal ref)  */ 
     180} pjmedia_rtcp_fb_sli; 
     181 
     182 
     183/** 
     184 * This structure declares RTCP Feedback Reference Picture Selection 
     185 * Indication (RPSI) message. 
     186 */ 
     187typedef struct pjmedia_rtcp_fb_rpsi 
     188{ 
     189    pj_uint8_t           pt;            /**< Payload Type               */ 
     190    pj_str_t             rpsi;          /**< Native RPSI bit string     */ 
     191    pj_size_t            rpsi_bit_len;  /**< Length of RPSI in bit      */ 
     192} pjmedia_rtcp_fb_rpsi; 
     193 
     194 
     195/** 
     196 * Event data for incoming RTCP Feedback message event 
     197 * (PJMEDIA_EVENT_RX_RTCP_FB). 
     198 */ 
     199typedef struct pjmedia_event_rx_rtcp_fb_data 
     200{ 
     201    pjmedia_rtcp_fb_cap         cap; 
     202    union { 
     203        pjmedia_rtcp_fb_nack    nack; 
     204        pjmedia_rtcp_fb_sli     sli; 
     205        pjmedia_rtcp_fb_rpsi    rpsi; 
     206    } msg; 
     207 
     208} pjmedia_event_rx_rtcp_fb_data; 
     209 
     210 
     211/** 
    137212 * Initialize RTCP Feedback setting with default values. 
    138213 * 
     
    220295 
    221296/** 
    222  * This structure declares RTCP Feedback Generic NACK message. 
    223  */ 
    224 typedef struct pjmedia_rtcp_fb_nack 
    225 { 
    226     pj_int32_t           pid;           /**< Packet ID (RTP seq)    */ 
    227     pj_uint16_t          blp;           /**< Bitmask of following lost 
    228                                              packets                */ 
    229 } pjmedia_rtcp_fb_nack; 
    230  
    231  
    232 /** 
    233297 * Build an RTCP Feedback Generic NACK packet. This packet can be appended to 
    234298 * other RTCP packets, e.g: RTCP RR/SR, to compose a compound RTCP packet. 
     
    273337 
    274338/** 
    275  * This structure declares RTCP Feedback Slice Loss Indication (SLI) message. 
    276  */ 
    277 typedef struct pjmedia_rtcp_fb_sli 
    278 { 
    279     pj_uint16_t          first;         /**< First lost macroblock      */ 
    280     pj_uint16_t          number;        /**< The number of lost macroblocks 
    281                                              packets                    */ 
    282     pj_uint8_t           pict_id;       /**< Picture ID (temporal ref)  */ 
    283 } pjmedia_rtcp_fb_sli; 
    284  
    285  
    286 /** 
    287339 * Build an RTCP Feedback Slice Loss Indication (SLI) packet. This packet can 
    288340 * be appended to other RTCP packets, e.g: RTCP RR/SR, to compose a compound 
     
    308360 
    309361/** 
    310  * This structure declares RTCP Feedback Reference Picture Selection 
    311  * Indication (RPSI) message. 
    312  */ 
    313 typedef struct pjmedia_rtcp_fb_rpsi 
    314 { 
    315     pj_uint8_t           pt;            /**< Payload Type               */ 
    316     pj_str_t             rpsi;          /**< Native RPSI bit string     */ 
    317     pj_size_t            rpsi_bit_len;  /**< Length of RPSI in bit      */ 
    318 } pjmedia_rtcp_fb_rpsi; 
    319  
    320  
    321 /** 
    322362 * Build an RTCP Feedback Reference Picture Selection Indication (RPSI) 
    323363 * packet. This packet can be appended to other RTCP packets, e.g: RTCP RR/SR, 
     
    342382 
    343383/** 
     384 * Check whether the specified payload contains RTCP feedback generic NACK 
     385 * message, and parse the payload if it does. 
     386 * 
     387 * @param buf       The payload buffer. 
     388 * @param length    The payload length. 
     389 * @param nack_cnt  On input, it specifies the maximum number of generic NACK 
     390 *                  messages. 
     391 *                  On output, it specifies the number of parsed generic NACK 
     392 *                  messages. 
     393 * @param nack      The array of RTCP Feedback Generic NACK messages. 
     394 * 
     395 * @return          PJ_SUCCESS if the payload contains generic NACK message 
     396 *                  and has been parsed successfully. 
     397 */ 
     398PJ_DECL(pj_status_t) pjmedia_rtcp_fb_parse_nack( 
     399                                        const void *buf, 
     400                                        pj_size_t length, 
     401                                        unsigned *nack_cnt, 
     402                                        pjmedia_rtcp_fb_nack nack[]); 
     403 
     404 
     405/** 
     406 * Check whether the specified payload contains RTCP feedback Picture Loss 
     407 * Indication (PLI) message. 
     408 * 
     409 * @param buf       The payload buffer. 
     410 * @param length    The payload length. 
     411 * 
     412 * @return          PJ_SUCCESS if the payload contains PLI message. 
     413 */ 
     414PJ_DECL(pj_status_t) pjmedia_rtcp_fb_parse_pli( 
     415                                        const void *buf, 
     416                                        pj_size_t length); 
     417 
     418 
     419/** 
     420 * Check whether the specified payload contains RTCP feedback Slice Loss 
     421 * Indication (SLI) message, and parse the payload if it does. 
     422 * 
     423 * @param buf       The payload buffer. 
     424 * @param length    The payload length. 
     425 * @param sli_cnt   On input, it specifies the maximum number of SLI messages. 
     426 *                  On output, it specifies the number of parsed SLI messages. 
     427 * @param sli       The array of RTCP Feedback SLI messages. 
     428 * 
     429 * @return          PJ_SUCCESS if the payload contains SLI messages and 
     430 *                  has been parsed successfully. 
     431 */ 
     432PJ_DECL(pj_status_t) pjmedia_rtcp_fb_parse_sli( 
     433                                        const void *buf, 
     434                                        pj_size_t length, 
     435                                        unsigned *sli_cnt, 
     436                                        pjmedia_rtcp_fb_sli sli[]); 
     437 
     438 
     439/** 
     440 * Check whether the specified payload contains RTCP feedback Reference 
     441 * Picture Selection Indication (RPSI) message, and parse the payload 
     442 * if it does. 
     443 * 
     444 * @param buf       The payload buffer. 
     445 * @param length    The payload length. 
     446 * @param rpsi      The parsed RTCP Feedback RPSI messages. 
     447 * 
     448 * @return          PJ_SUCCESS if the payload contains SLI messages and 
     449 *                  has been parsed successfully. 
     450 */ 
     451PJ_DECL(pj_status_t) pjmedia_rtcp_fb_parse_rpsi( 
     452                                        const void *buf, 
     453                                        pj_size_t length, 
     454                                        pjmedia_rtcp_fb_rpsi *rpsi); 
     455 
     456 
     457/** 
    344458 * @} 
    345459 */ 
Note: See TracChangeset for help on using the changeset viewer.