Ignore:
Timestamp:
Oct 24, 2011 9:28:13 AM (13 years ago)
Author:
ming
Message:

Re #1395: Backport of PJSIP 1.x branch into PJSIP 2.0 trunk

TODO: ticket #1268 (Option for automatic/manual sending of RTCP SDES/BYE for the stream) for video stream.

Location:
pjproject/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk

  • pjproject/trunk/pjmedia/src/pjmedia/stream.c

    r3837 r3841  
    155155    pj_uint32_t              rtcp_interval; /**< Interval, in timestamp.    */ 
    156156    pj_bool_t                initial_rr;    /**< Initial RTCP RR sent       */ 
     157    pj_bool_t                rtcp_sdes_bye_disabled;/**< Send RTCP SDES/BYE?*/ 
    157158 
    158159    /* RFC 2833 DTMF transmission queue: */ 
     
    18251826        /* Build RR or SR */ 
    18261827        pjmedia_rtcp_build_rtcp(&stream->rtcp, &sr_rr_pkt, &len); 
    1827         pkt = (pj_uint8_t*) stream->enc->out_pkt; 
    1828         pj_memcpy(pkt, sr_rr_pkt, len); 
    1829         pkt += len; 
    1830  
    1831         /* Append SDES */ 
    1832         len = create_rtcp_sdes(stream, (pj_uint8_t*)pkt,  
    1833                                stream->enc->out_pkt_size - len); 
    1834         if (len > 0) { 
    1835             pkt += len; 
    1836             len = ((pj_uint8_t*)pkt) - ((pj_uint8_t*)stream->enc->out_pkt); 
    1837             pjmedia_transport_send_rtcp(stream->transport,  
    1838                                         stream->enc->out_pkt, len); 
    1839         } 
     1828 
     1829        if (!stream->rtcp_sdes_bye_disabled) { 
     1830            pkt = (pj_uint8_t*) stream->enc->out_pkt; 
     1831            pj_memcpy(pkt, sr_rr_pkt, len); 
     1832            pkt += len; 
     1833 
     1834            /* Append SDES */ 
     1835            len = create_rtcp_sdes(stream, (pj_uint8_t*)pkt,  
     1836                                   stream->enc->out_pkt_size - len); 
     1837            if (len > 0) { 
     1838                pkt += len; 
     1839                len = ((pj_uint8_t*)pkt) - ((pj_uint8_t*)stream->enc->out_pkt); 
     1840                pjmedia_transport_send_rtcp(stream->transport,  
     1841                                            stream->enc->out_pkt, len); 
     1842            } 
     1843        } else { 
     1844            pjmedia_transport_send_rtcp(stream->transport, sr_rr_pkt, len); 
     1845        } 
    18401846 
    18411847        stream->initial_rr = PJ_TRUE; 
     
    19601966    pjmedia_stream *stream; 
    19611967    pj_str_t name; 
    1962     unsigned jb_init, jb_max, jb_min_pre, jb_max_pre, len; 
     1968    unsigned jb_init, jb_max, jb_min_pre, jb_max_pre; 
    19631969    pjmedia_audio_format_detail *afd; 
    19641970    pj_pool_t *own_pool = NULL; 
     
    20112017    stream->rtcp_interval = (PJMEDIA_RTCP_INTERVAL-500 + (pj_rand()%1000)) * 
    20122018                            info->fmt.clock_rate / 1000; 
     2019    stream->rtcp_sdes_bye_disabled = info->rtcp_sdes_bye_disabled; 
    20132020 
    20142021    stream->tx_event_pt = info->tx_event_pt ? info->tx_event_pt : -1; 
     
    23232330 
    23242331    /* Send RTCP SDES */ 
    2325     len = create_rtcp_sdes(stream, (pj_uint8_t*)stream->enc->out_pkt,  
    2326                            stream->enc->out_pkt_size); 
    2327     if (len != 0) { 
    2328         pjmedia_transport_send_rtcp(stream->transport,  
    2329                                     stream->enc->out_pkt, len); 
     2332    if (!stream->rtcp_sdes_bye_disabled) { 
     2333        pjmedia_stream_send_rtcp_sdes(stream); 
    23302334    } 
    23312335 
     
    23442348                         TRACE_JB_PATH_PREFIX "%s.csv", 
    23452349                         stream->port.info.name.ptr); 
    2346         status = pj_file_open(pool, trace_name, PJ_O_RDWR, &stream->trace_jb_fd); 
     2350        status = pj_file_open(pool, trace_name, PJ_O_WRONLY, &stream->trace_jb_fd); 
    23472351        if (status != PJ_SUCCESS) { 
    23482352            stream->trace_jb_fd = TRACE_JB_INVALID_FD; 
     
    23822386PJ_DEF(pj_status_t) pjmedia_stream_destroy( pjmedia_stream *stream ) 
    23832387{ 
    2384     unsigned len; 
    23852388    PJ_ASSERT_RETURN(stream != NULL, PJ_EINVAL); 
    23862389 
     
    24242427 
    24252428    /* Send RTCP BYE */ 
    2426     if (stream->enc && stream->transport) { 
    2427         len = create_rtcp_bye(stream, (pj_uint8_t*)stream->enc->out_pkt, 
    2428                               stream->enc->out_pkt_size); 
    2429         if (len != 0) { 
    2430             pjmedia_transport_send_rtcp(stream->transport,  
    2431                                         stream->enc->out_pkt, len); 
    2432         } 
     2429    if (!stream->rtcp_sdes_bye_disabled) { 
     2430        pjmedia_stream_send_rtcp_bye(stream); 
    24332431    } 
    24342432 
     
    32993297    return status; 
    33003298} 
     3299 
     3300/* 
     3301 * Send RTCP SDES. 
     3302 */ 
     3303PJ_DEF(pj_status_t) 
     3304pjmedia_stream_send_rtcp_sdes( pjmedia_stream *stream ) 
     3305{ 
     3306    unsigned len; 
     3307 
     3308    PJ_ASSERT_RETURN(stream, PJ_EINVAL); 
     3309 
     3310    len = create_rtcp_sdes(stream, (pj_uint8_t*)stream->enc->out_pkt, 
     3311                           stream->enc->out_pkt_size); 
     3312    if (len != 0) { 
     3313        return pjmedia_transport_send_rtcp(stream->transport,  
     3314                                           stream->enc->out_pkt, len); 
     3315    } 
     3316 
     3317    return PJ_SUCCESS; 
     3318} 
     3319 
     3320/* 
     3321 * Send RTCP BYE. 
     3322 */ 
     3323PJ_DEF(pj_status_t) 
     3324pjmedia_stream_send_rtcp_bye( pjmedia_stream *stream ) 
     3325{ 
     3326    PJ_ASSERT_RETURN(stream, PJ_EINVAL); 
     3327 
     3328    if (stream->enc && stream->transport) { 
     3329        unsigned len; 
     3330 
     3331        len = create_rtcp_bye(stream, (pj_uint8_t*)stream->enc->out_pkt, 
     3332                              stream->enc->out_pkt_size); 
     3333        if (len != 0) { 
     3334            return pjmedia_transport_send_rtcp(stream->transport,  
     3335                                               stream->enc->out_pkt, len); 
     3336        } 
     3337    } 
     3338 
     3339    return PJ_SUCCESS; 
     3340} 
Note: See TracChangeset for help on using the changeset viewer.