- Timestamp:
- May 19, 2011 8:05:23 AM (13 years ago)
- Location:
- pjproject/branches/1.x
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/branches/1.x/pjmedia/include/pjmedia/session.h
r3553 r3571 233 233 234 234 /** 235 * Send RTCP SDES for the session. 236 * 237 * @param session The media session. 238 * 239 * @return PJ_SUCCESS on success. 240 */ 241 PJ_DECL(pj_status_t) 242 pjmedia_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 */ 251 PJ_DECL(pj_status_t) 252 pjmedia_session_send_rtcp_bye( const pjmedia_session *session ); 253 254 /** 235 255 * Enumerate media streams in the session. 236 256 * -
pjproject/branches/1.x/pjmedia/include/pjmedia/stream.h
r3553 r3571 134 134 is enabled? */ 135 135 #endif 136 pj_bool_t rtcp_sdes_bye_disabled; 137 /**< Disable automatic sending of RTCP 138 SDES and BYE. */ 136 139 }; 137 140 … … 373 376 374 377 /** 378 * Send RTCP SDES for the media stream. 379 * 380 * @param stream The media stream. 381 * 382 * @return PJ_SUCCESS on success. 383 */ 384 PJ_DECL(pj_status_t) 385 pjmedia_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 */ 394 PJ_DECL(pj_status_t) 395 pjmedia_stream_send_rtcp_bye( pjmedia_stream *stream ); 396 397 /** 375 398 * @} 376 399 */ -
pjproject/branches/1.x/pjmedia/src/pjmedia/session.c
r3553 r3571 814 814 815 815 /** 816 * Send RTCP SDES for the session. 817 */ 818 PJ_DEF(pj_status_t) 819 pjmedia_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 */ 835 PJ_DEF(pj_status_t) 836 pjmedia_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 /** 816 850 * Enumerate media stream in the session. 817 851 */ -
pjproject/branches/1.x/pjmedia/src/pjmedia/stream.c
r3553 r3571 144 144 pj_uint32_t rtcp_interval; /**< Interval, in timestamp. */ 145 145 pj_bool_t initial_rr; /**< Initial RTCP RR sent */ 146 pj_bool_t rtcp_sdes_bye_disabled;/**< Send RTCP SDES/BYE?*/ 146 147 147 148 /* RFC 2833 DTMF transmission queue: */ … … 1827 1828 /* Build RR or SR */ 1828 1829 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 } 1842 1848 1843 1849 stream->initial_rr = PJ_TRUE; … … 1955 1961 pjmedia_stream *stream; 1956 1962 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; 1958 1964 char *p; 1959 1965 pj_status_t status; … … 1993 1999 stream->rtcp_interval = (PJMEDIA_RTCP_INTERVAL-500 + (pj_rand()%1000)) * 1994 2000 info->fmt.clock_rate / 1000; 2001 stream->rtcp_sdes_bye_disabled = info->rtcp_sdes_bye_disabled; 1995 2002 1996 2003 stream->tx_event_pt = info->tx_event_pt ? info->tx_event_pt : -1; … … 2306 2313 2307 2314 /* 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); 2313 2317 } 2314 2318 … … 2365 2369 PJ_DEF(pj_status_t) pjmedia_stream_destroy( pjmedia_stream *stream ) 2366 2370 { 2367 unsigned len;2368 2371 PJ_ASSERT_RETURN(stream != NULL, PJ_EINVAL); 2369 2372 … … 2407 2410 2408 2411 /* 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); 2416 2414 } 2417 2415 … … 2761 2759 } 2762 2760 2761 /* 2762 * Send RTCP SDES. 2763 */ 2764 PJ_DEF(pj_status_t) 2765 pjmedia_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 */ 2784 PJ_DEF(pj_status_t) 2785 pjmedia_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 1531 1531 pjsua_call *call = &pjsua_var.calls[call_id]; 1532 1532 1533 if (call->session) 1534 pjmedia_session_send_rtcp_bye(call->session); 1535 1533 1536 stop_media_session(call_id); 1534 1537 … … 1574 1577 const pjmedia_sdp_session *remote_sdp) 1575 1578 { 1579 unsigned i; 1576 1580 int prev_media_st = 0; 1577 1581 pjsua_call *call = &pjsua_var.calls[call_id]; … … 1598 1602 if (status != PJ_SUCCESS) 1599 1603 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 } 1600 1608 1601 1609 /* Update audio index from the negotiated SDP */ … … 1717 1725 return status; 1718 1726 } 1727 1728 if (prev_media_st == PJSUA_CALL_MEDIA_NONE) 1729 pjmedia_session_send_rtcp_sdes(call->session); 1719 1730 1720 1731 /* If DTMF callback is installed by application, install our
Note: See TracChangeset
for help on using the changeset viewer.