Changeset 3571


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

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

Location:
pjproject/branches/1.x
Files:
5 edited

Legend:

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

    r3553 r3571  
    233233 
    234234/** 
     235 * Send RTCP SDES for the session. 
     236 * 
     237 * @param session       The media session. 
     238 * 
     239 * @return              PJ_SUCCESS on success. 
     240 */ 
     241PJ_DECL(pj_status_t)  
     242pjmedia_session_send_rtcp_sdes( const pjmedia_session *session ); 
     243 
     244/** 
     245 * Send RTCP BYE for the session. 
     246 * 
     247 * @param session       The media session. 
     248 * 
     249 * @return              PJ_SUCCESS on success. 
     250 */ 
     251PJ_DECL(pj_status_t)  
     252pjmedia_session_send_rtcp_bye( const pjmedia_session *session ); 
     253 
     254/** 
    235255 * Enumerate media streams in the session. 
    236256 * 
  • pjproject/branches/1.x/pjmedia/include/pjmedia/stream.h

    r3553 r3571  
    134134                                         is enabled?                        */ 
    135135#endif 
     136    pj_bool_t           rtcp_sdes_bye_disabled;  
     137                                    /**< Disable automatic sending of RTCP 
     138                                         SDES and BYE.                      */ 
    136139}; 
    137140 
     
    373376 
    374377/** 
     378 * Send RTCP SDES for the media stream. 
     379 * 
     380 * @param stream        The media stream. 
     381 * 
     382 * @return              PJ_SUCCESS on success. 
     383 */ 
     384PJ_DECL(pj_status_t)  
     385pjmedia_stream_send_rtcp_sdes( pjmedia_stream *stream ); 
     386 
     387/** 
     388 * Send RTCP BYE for the media stream. 
     389 * 
     390 * @param stream        The media stream. 
     391 * 
     392 * @return              PJ_SUCCESS on success. 
     393 */ 
     394PJ_DECL(pj_status_t) 
     395pjmedia_stream_send_rtcp_bye( pjmedia_stream *stream ); 
     396 
     397/** 
    375398 * @} 
    376399 */ 
  • pjproject/branches/1.x/pjmedia/src/pjmedia/session.c

    r3553 r3571  
    814814 
    815815/** 
     816 * Send RTCP SDES for the session. 
     817 */ 
     818PJ_DEF(pj_status_t)  
     819pjmedia_session_send_rtcp_sdes( const pjmedia_session *session ) 
     820{ 
     821    unsigned i; 
     822 
     823    PJ_ASSERT_RETURN(session, PJ_EINVAL); 
     824 
     825    for (i=0; i<session->stream_cnt; ++i) { 
     826        pjmedia_stream_send_rtcp_sdes(session->stream[i]); 
     827    } 
     828 
     829    return PJ_SUCCESS; 
     830} 
     831 
     832/** 
     833 * Send RTCP BYE for the session. 
     834 */ 
     835PJ_DEF(pj_status_t)  
     836pjmedia_session_send_rtcp_bye( const pjmedia_session *session ) 
     837{ 
     838    unsigned i; 
     839 
     840    PJ_ASSERT_RETURN(session, PJ_EINVAL); 
     841 
     842    for (i=0; i<session->stream_cnt; ++i) { 
     843        pjmedia_stream_send_rtcp_bye(session->stream[i]); 
     844    } 
     845 
     846    return PJ_SUCCESS; 
     847} 
     848 
     849/** 
    816850 * Enumerate media stream in the session. 
    817851 */ 
  • 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} 
  • pjproject/branches/1.x/pjsip/src/pjsua-lib/pjsua_media.c

    r3553 r3571  
    15311531    pjsua_call *call = &pjsua_var.calls[call_id]; 
    15321532 
     1533    if (call->session) 
     1534        pjmedia_session_send_rtcp_bye(call->session); 
     1535 
    15331536    stop_media_session(call_id); 
    15341537 
     
    15741577                                       const pjmedia_sdp_session *remote_sdp) 
    15751578{ 
     1579    unsigned i; 
    15761580    int prev_media_st = 0; 
    15771581    pjsua_call *call = &pjsua_var.calls[call_id]; 
     
    15981602    if (status != PJ_SUCCESS) 
    15991603        return status; 
     1604 
     1605    for (i = 0; i < sess_info.stream_cnt; ++i) { 
     1606        sess_info.stream_info[i].rtcp_sdes_bye_disabled = PJ_TRUE; 
     1607    } 
    16001608 
    16011609    /* Update audio index from the negotiated SDP */ 
     
    17171725            return status; 
    17181726        } 
     1727 
     1728        if (prev_media_st == PJSUA_CALL_MEDIA_NONE) 
     1729            pjmedia_session_send_rtcp_sdes(call->session); 
    17191730 
    17201731        /* If DTMF callback is installed by application, install our 
Note: See TracChangeset for help on using the changeset viewer.