Ignore:
Timestamp:
Feb 27, 2012 2:41:21 PM (12 years ago)
Author:
nanang
Message:

Fix #1440: Send and parse RTCP compound packet, containing report (RR/SR/XR), SDES, and BYE.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/1.x/pjmedia/include/pjmedia/rtcp.h

    r3553 r3960  
    5555 */ 
    5656 
     57  
    5758#pragma pack(1) 
    5859 
     
    6061 * RTCP sender report. 
    6162 */ 
    62 struct pjmedia_rtcp_sr 
     63typedef struct pjmedia_rtcp_sr 
    6364{ 
    6465    pj_uint32_t     ntp_sec;        /**< NTP time, seconds part.        */ 
     
    6768    pj_uint32_t     sender_pcount;  /**< Sender packet cound.           */ 
    6869    pj_uint32_t     sender_bcount;  /**< Sender octet/bytes count.      */ 
    69 }; 
    70  
    71 /** 
    72  * @see pjmedia_rtcp_sr 
    73  */ 
    74 typedef struct pjmedia_rtcp_sr pjmedia_rtcp_sr; 
     70} pjmedia_rtcp_sr; 
     71 
    7572 
    7673/** 
    7774 * RTCP receiver report. 
    7875 */ 
    79 struct pjmedia_rtcp_rr 
     76typedef struct pjmedia_rtcp_rr 
    8077{ 
    8178    pj_uint32_t     ssrc;           /**< SSRC identification.           */ 
     
    9592    pj_uint32_t     lsr;            /**< Last SR.                       */ 
    9693    pj_uint32_t     dlsr;           /**< Delay since last SR.           */ 
    97 }; 
    98  
    99 /** 
    100  * @see pjmedia_rtcp_rr 
    101  */ 
    102 typedef struct pjmedia_rtcp_rr pjmedia_rtcp_rr; 
     94} pjmedia_rtcp_rr; 
    10395 
    10496 
     
    10698 * RTCP common header. 
    10799 */ 
    108 struct pjmedia_rtcp_common 
     100typedef struct pjmedia_rtcp_common 
    109101{ 
    110102#if defined(PJ_IS_BIG_ENDIAN) && PJ_IS_BIG_ENDIAN!=0 
     
    121113    unsigned        length:16;  /**< packet length          */ 
    122114    pj_uint32_t     ssrc;       /**< SSRC identification    */ 
    123 }; 
    124  
    125 /** 
    126  * @see pjmedia_rtcp_common 
    127  */ 
    128 typedef struct pjmedia_rtcp_common pjmedia_rtcp_common; 
     115} pjmedia_rtcp_common; 
     116 
    129117 
    130118/** 
     
    154142 
    155143/** 
     144 * RTCP SDES structure. 
     145 */ 
     146typedef struct pjmedia_rtcp_sdes 
     147{ 
     148    pj_str_t    cname;          /**< RTCP SDES type CNAME.      */ 
     149    pj_str_t    name;           /**< RTCP SDES type NAME.       */ 
     150    pj_str_t    email;          /**< RTCP SDES type EMAIL.      */ 
     151    pj_str_t    phone;          /**< RTCP SDES type PHONE.      */ 
     152    pj_str_t    loc;            /**< RTCP SDES type LOC.        */ 
     153    pj_str_t    tool;           /**< RTCP SDES type TOOL.       */ 
     154    pj_str_t    note;           /**< RTCP SDES type NOTE.       */ 
     155} pjmedia_rtcp_sdes; 
     156 
     157 
     158/** 
    156159 * NTP time representation. 
    157160 */ 
    158 struct pjmedia_rtcp_ntp_rec 
     161typedef struct pjmedia_rtcp_ntp_rec 
    159162{ 
    160163    pj_uint32_t     hi;         /**< High order 32-bit part.    */ 
    161164    pj_uint32_t     lo;         /**< Lo order 32-bit part.      */ 
    162 }; 
    163  
    164 /** 
    165  * @see pjmedia_rtcp_ntp_rec 
    166  */ 
    167 typedef struct pjmedia_rtcp_ntp_rec pjmedia_rtcp_ntp_rec; 
    168  
     165} pjmedia_rtcp_ntp_rec; 
    169166 
    170167 
     
    172169 * Unidirectional RTP stream statistics. 
    173170 */ 
    174 struct pjmedia_rtcp_stream_stat 
     171typedef struct pjmedia_rtcp_stream_stat 
    175172{ 
    176173    pj_time_val     update;     /**< Time of last update.                   */ 
     
    191188 
    192189    pj_math_stat    jitter;     /**< Jitter statistics (in usec)            */ 
    193 }; 
    194  
    195  
    196 /** 
    197  * @see pjmedia_rtcp_stream_stat 
    198  */ 
    199 typedef struct pjmedia_rtcp_stream_stat pjmedia_rtcp_stream_stat; 
    200  
     190 
     191} pjmedia_rtcp_stream_stat; 
    201192 
    202193 
     
    204195 * Bidirectional RTP stream statistics. 
    205196 */ 
    206 struct pjmedia_rtcp_stat 
     197typedef struct pjmedia_rtcp_stat 
    207198{ 
    208199    pj_time_val              start; /**< Time when session was created      */ 
     
    227218                                                (in usec).                  */ 
    228219#endif 
    229 }; 
    230  
    231  
    232 /** 
    233  * @see pjmedia_rtcp_stat 
    234  */ 
    235 typedef struct pjmedia_rtcp_stat pjmedia_rtcp_stat; 
     220 
     221    pjmedia_rtcp_sdes        peer_sdes; /**< Peer SDES.                     */ 
     222    char                     peer_sdes_buf_[PJMEDIA_RTCP_RX_SDES_BUF_LEN]; 
     223                                        /**< Peer SDES buffer.              */ 
     224 
     225} pjmedia_rtcp_stat; 
    236226 
    237227 
     
    240230 * should only be one RTCP session for a bidirectional RTP streams. 
    241231 */ 
    242 struct pjmedia_rtcp_session 
     232typedef struct pjmedia_rtcp_session 
    243233{ 
    244234    char                   *name;       /**< Name identification.           */ 
     
    279269    pjmedia_rtcp_xr_session xr_session; 
    280270#endif 
    281 }; 
    282  
    283 /** 
    284  * @see pjmedia_rtcp_session 
    285  */ 
    286 typedef struct pjmedia_rtcp_session pjmedia_rtcp_session; 
     271} pjmedia_rtcp_session; 
    287272 
    288273 
     
    440425 
    441426/** 
     427 * Build an RTCP SDES (source description) packet. This packet can be 
     428 * appended to other RTCP packets, e.g: RTCP RR/SR, to compose a compound 
     429 * RTCP packet. 
     430 * 
     431 * @param session   The RTCP session. 
     432 * @param buf       The buffer to receive RTCP SDES packet. 
     433 * @param length    On input, it will contain the buffer length. 
     434 *                  On output, it will contain the generated RTCP SDES 
     435 *                  packet length. 
     436 * @param sdes      The source description, see #pjmedia_rtcp_sdes. 
     437 * 
     438 * @return          PJ_SUCCESS on success. 
     439 */ 
     440PJ_DECL(pj_status_t) pjmedia_rtcp_build_rtcp_sdes( 
     441                                            pjmedia_rtcp_session *session,  
     442                                            void *buf, 
     443                                            pj_size_t *length, 
     444                                            const pjmedia_rtcp_sdes *sdes); 
     445 
     446/** 
     447 * Build an RTCP BYE packet. This packet can be appended to other RTCP 
     448 * packets, e.g: RTCP RR/SR, to compose a compound RTCP packet. 
     449 * 
     450 * @param session   The RTCP session. 
     451 * @param buf       The buffer to receive RTCP BYE packet. 
     452 * @param length    On input, it will contain the buffer length. 
     453 *                  On output, it will contain the generated RTCP BYE 
     454 *                  packet length. 
     455 * @param reason    Optional, the BYE reason. 
     456 * 
     457 * @return          PJ_SUCCESS on success. 
     458 */ 
     459PJ_DECL(pj_status_t) pjmedia_rtcp_build_rtcp_bye( 
     460                                            pjmedia_rtcp_session *session,  
     461                                            void *buf, 
     462                                            pj_size_t *length, 
     463                                            const pj_str_t *reason); 
     464 
     465 
     466/** 
    442467 * Call this function if RTCP XR needs to be enabled/disabled in the  
    443468 * RTCP session. 
Note: See TracChangeset for help on using the changeset viewer.