From 2ead2b5de766b211c61b8dd4a3c1696850fc5a71 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Wed, 7 Dec 2011 05:19:34 +0000 Subject: Fixed #1421 (Audio is missing temporarily if SRTP is enabled due to lock codec feature). The problem occured because when lock codec is called, the stream may not transmit any RTP packets yet, causing the RTCP statistic to return zero as the last RTP sequence number sent. The zero RTP sequence number would cause SRTP to refuse to encode the RTP packet with error replay status git-svn-id: http://svn.pjsip.org/repos/pjproject/branches/1.x@3900 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/src/pjmedia/stream.c | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) (limited to 'pjmedia/src') diff --git a/pjmedia/src/pjmedia/stream.c b/pjmedia/src/pjmedia/stream.c index eae1398a..94d8e0f8 100644 --- a/pjmedia/src/pjmedia/stream.c +++ b/pjmedia/src/pjmedia/stream.c @@ -925,10 +925,15 @@ static void check_tx_rtcp(pjmedia_stream *stream, pj_uint32_t timestamp) void *rtcp_pkt; int len; + pj_status_t status; pjmedia_rtcp_build_rtcp(&stream->rtcp, &rtcp_pkt, &len); - pjmedia_transport_send_rtcp(stream->transport, rtcp_pkt, len); + status=pjmedia_transport_send_rtcp(stream->transport, rtcp_pkt, len); + if (status != PJ_SUCCESS) { + PJ_PERROR(4,(stream->port.info.name.ptr, status, + "Error sending RTCP")); + } stream->rtcp_last_tx = timestamp; } @@ -1338,8 +1343,13 @@ static pj_status_t put_frame_imp( pjmedia_port *port, stream->is_streaming = PJ_TRUE; /* Send the RTP packet to the transport. */ - pjmedia_transport_send_rtp(stream->transport, channel->out_pkt, - frame_out.size + sizeof(pjmedia_rtp_hdr)); + status = pjmedia_transport_send_rtp(stream->transport, channel->out_pkt, + frame_out.size + + sizeof(pjmedia_rtp_hdr)); + if (status != PJ_SUCCESS) { + PJ_PERROR(4,(stream->port.info.name.ptr, status, + "Error sending RTP")); + } /* Update stat */ pjmedia_rtcp_tx_rtp(&stream->rtcp, frame_out.size); @@ -1839,11 +1849,21 @@ on_return: if (len > 0) { pkt += len; len = ((pj_uint8_t*)pkt) - ((pj_uint8_t*)stream->enc->out_pkt); - pjmedia_transport_send_rtcp(stream->transport, - stream->enc->out_pkt, len); + status = pjmedia_transport_send_rtcp(stream->transport, + stream->enc->out_pkt, + len); + if (status != PJ_SUCCESS) { + PJ_PERROR(4,(stream->port.info.name.ptr, status, + "Error sending RTCP SDES")); + } } } else { - pjmedia_transport_send_rtcp(stream->transport, sr_rr_pkt, len); + status = pjmedia_transport_send_rtcp(stream->transport, + sr_rr_pkt, len); + if (status != PJ_SUCCESS) { + PJ_PERROR(4,(stream->port.info.name.ptr, status, + "Error sending initial RTCP RR")); + } } stream->initial_rr = PJ_TRUE; @@ -2249,6 +2269,11 @@ PJ_DEF(pj_status_t) pjmedia_stream_create( pjmedia_endpt *endpt, #endif pjmedia_rtcp_init2(&stream->rtcp, &rtcp_setting); + + if (info->rtp_seq_ts_set) { + stream->rtcp.stat.rtp_tx_last_seq = info->rtp_seq; + stream->rtcp.stat.rtp_tx_last_ts = info->rtp_ts; + } } /* Only attach transport when stream is ready. */ -- cgit v1.2.3