Ignore:
Timestamp:
May 19, 2011 8:05:23 AM (13 years ago)
Author:
ming
Message:

Fixed #1268: Option for automatic/manual sending of RTCP SDES/BYE for the stream.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/branches/1.x/pjmedia/src/pjmedia/stream.c

    r3553 r3571  
    144144    pj_uint32_t              rtcp_interval; /**< Interval, in timestamp.    */ 
    145145    pj_bool_t                initial_rr;    /**< Initial RTCP RR sent       */ 
     146    pj_bool_t                rtcp_sdes_bye_disabled;/**< Send RTCP SDES/BYE?*/ 
    146147 
    147148    /* RFC 2833 DTMF transmission queue: */ 
     
    18271828        /* Build RR or SR */ 
    18281829        pjmedia_rtcp_build_rtcp(&stream->rtcp, &sr_rr_pkt, &len); 
    1829         pkt = (pj_uint8_t*) stream->enc->out_pkt; 
    1830         pj_memcpy(pkt, sr_rr_pkt, len); 
    1831         pkt += len; 
    1832  
    1833         /* Append SDES */ 
    1834         len = create_rtcp_sdes(stream, (pj_uint8_t*)pkt,  
    1835                                stream->enc->out_pkt_size - len); 
    1836         if (len > 0) { 
    1837             pkt += len; 
    1838             len = ((pj_uint8_t*)pkt) - ((pj_uint8_t*)stream->enc->out_pkt); 
    1839             pjmedia_transport_send_rtcp(stream->transport,  
    1840                                         stream->enc->out_pkt, len); 
    1841         } 
     1830 
     1831        if (!stream->rtcp_sdes_bye_disabled) { 
     1832            pkt = (pj_uint8_t*) stream->enc->out_pkt; 
     1833            pj_memcpy(pkt, sr_rr_pkt, len); 
     1834            pkt += len; 
     1835 
     1836            /* Append SDES */ 
     1837            len = create_rtcp_sdes(stream, (pj_uint8_t*)pkt,  
     1838                                   stream->enc->out_pkt_size - len); 
     1839            if (len > 0) { 
     1840                pkt += len; 
     1841                len = ((pj_uint8_t*)pkt) - ((pj_uint8_t*)stream->enc->out_pkt); 
     1842                pjmedia_transport_send_rtcp(stream->transport,  
     1843                                            stream->enc->out_pkt, len); 
     1844            } 
     1845        } else { 
     1846            pjmedia_transport_send_rtcp(stream->transport, ss_rr_pkt, len); 
     1847        } 
    18421848 
    18431849        stream->initial_rr = PJ_TRUE; 
     
    19551961    pjmedia_stream *stream; 
    19561962    pj_str_t name; 
    1957     unsigned jb_init, jb_max, jb_min_pre, jb_max_pre, len; 
     1963    unsigned jb_init, jb_max, jb_min_pre, jb_max_pre; 
    19581964    char *p; 
    19591965    pj_status_t status; 
     
    19931999    stream->rtcp_interval = (PJMEDIA_RTCP_INTERVAL-500 + (pj_rand()%1000)) * 
    19942000                            info->fmt.clock_rate / 1000; 
     2001    stream->rtcp_sdes_bye_disabled = info->rtcp_sdes_bye_disabled; 
    19952002 
    19962003    stream->tx_event_pt = info->tx_event_pt ? info->tx_event_pt : -1; 
     
    23062313 
    23072314    /* Send RTCP SDES */ 
    2308     len = create_rtcp_sdes(stream, (pj_uint8_t*)stream->enc->out_pkt,  
    2309                            stream->enc->out_pkt_size); 
    2310     if (len != 0) { 
    2311         pjmedia_transport_send_rtcp(stream->transport,  
    2312                                     stream->enc->out_pkt, len); 
     2315    if (!stream->rtcp_sdes_bye_disabled) { 
     2316        pjmedia_stream_send_rtcp_sdes(stream); 
    23132317    } 
    23142318 
     
    23652369PJ_DEF(pj_status_t) pjmedia_stream_destroy( pjmedia_stream *stream ) 
    23662370{ 
    2367     unsigned len; 
    23682371    PJ_ASSERT_RETURN(stream != NULL, PJ_EINVAL); 
    23692372 
     
    24072410 
    24082411    /* Send RTCP BYE */ 
    2409     if (stream->enc && stream->transport) { 
    2410         len = create_rtcp_bye(stream, (pj_uint8_t*)stream->enc->out_pkt, 
    2411                               stream->enc->out_pkt_size); 
    2412         if (len != 0) { 
    2413             pjmedia_transport_send_rtcp(stream->transport,  
    2414                                         stream->enc->out_pkt, len); 
    2415         } 
     2412    if (!stream->rtcp_sdes_bye_disabled) { 
     2413        pjmedia_stream_send_rtcp_bye(stream); 
    24162414    } 
    24172415 
     
    27612759} 
    27622760 
     2761/* 
     2762 * Send RTCP SDES. 
     2763 */ 
     2764PJ_DEF(pj_status_t) 
     2765pjmedia_stream_send_rtcp_sdes( pjmedia_stream *stream ) 
     2766{ 
     2767    unsigned len; 
     2768 
     2769    PJ_ASSERT_RETURN(stream, PJ_EINVAL); 
     2770 
     2771    len = create_rtcp_sdes(stream, (pj_uint8_t*)stream->enc->out_pkt, 
     2772                           stream->enc->out_pkt_size); 
     2773    if (len != 0) { 
     2774        return pjmedia_transport_send_rtcp(stream->transport,  
     2775                                           stream->enc->out_pkt, len); 
     2776    } 
     2777 
     2778    return PJ_SUCCESS; 
     2779} 
     2780 
     2781/* 
     2782 * Send RTCP BYE. 
     2783 */ 
     2784PJ_DEF(pj_status_t) 
     2785pjmedia_stream_send_rtcp_bye( pjmedia_stream *stream ) 
     2786{ 
     2787    PJ_ASSERT_RETURN(stream, PJ_EINVAL); 
     2788 
     2789    if (stream->enc && stream->transport) { 
     2790        unsigned len; 
     2791 
     2792        len = create_rtcp_bye(stream, (pj_uint8_t*)stream->enc->out_pkt, 
     2793                              stream->enc->out_pkt_size); 
     2794        if (len != 0) { 
     2795            return pjmedia_transport_send_rtcp(stream->transport,  
     2796                                               stream->enc->out_pkt, len); 
     2797        } 
     2798    } 
     2799 
     2800    return PJ_SUCCESS; 
     2801} 
Note: See TracChangeset for help on using the changeset viewer.