diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2008-08-26 16:51:28 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2008-08-26 16:51:28 +0000 |
commit | 8f801ac496cf978d41daf150c9d9b492b78cebac (patch) | |
tree | d9e33eee205b6c5110a077e9828e51c94b5011c5 /pjmedia/src | |
parent | 472c21109bff70d66f59bd113b4031fde29a8a86 (diff) |
Ticket #602:
- Introduced new API pjmedia_rtp_session_init2() to enable intializing RTP session with non-default initial settings
- Updated stream so it can be created with non-default initial RTP settings.
- Updated pjsua-lib to make sure RTP timestamp and sequence contigue when stream session is restarted.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2241 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src')
-rw-r--r-- | pjmedia/src/pjmedia/rtp.c | 27 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/stream.c | 15 |
2 files changed, 41 insertions, 1 deletions
diff --git a/pjmedia/src/pjmedia/rtp.c b/pjmedia/src/pjmedia/rtp.c index 1f4de9e9..abcee1c7 100644 --- a/pjmedia/src/pjmedia/rtp.c +++ b/pjmedia/src/pjmedia/rtp.c @@ -84,6 +84,33 @@ PJ_DEF(pj_status_t) pjmedia_rtp_session_init( pjmedia_rtp_session *ses, return PJ_SUCCESS; } +PJ_DEF(pj_status_t) pjmedia_rtp_session_init2( + pjmedia_rtp_session *ses, + pjmedia_rtp_session_setting settings) +{ + pj_status_t status; + int pt = 0; + pj_uint32_t sender_ssrc = 0; + + if (settings.flags & 1) + pt = settings.default_pt; + if (settings.flags & 2) + sender_ssrc = settings.sender_ssrc; + + status = pjmedia_rtp_session_init(ses, pt, sender_ssrc); + if (status != PJ_SUCCESS) + return status; + + if (settings.flags & 4) { + ses->out_extseq = settings.seq; + ses->out_hdr.seq = pj_htons((pj_uint16_t)ses->out_extseq); + } + if (settings.flags & 8) + ses->out_hdr.ts = pj_htonl(settings.ts); + + return PJ_SUCCESS; +} + PJ_DEF(pj_status_t) pjmedia_rtp_encode_rtp( pjmedia_rtp_session *ses, int pt, int m, diff --git a/pjmedia/src/pjmedia/stream.c b/pjmedia/src/pjmedia/stream.c index ce87d048..83132167 100644 --- a/pjmedia/src/pjmedia/stream.c +++ b/pjmedia/src/pjmedia/stream.c @@ -872,6 +872,8 @@ static pj_status_t put_frame_imp( pjmedia_port *port, /* Update stat */ pjmedia_rtcp_tx_rtp(&stream->rtcp, frame_out.size); + stream->rtcp.stat.rtp_tx_last_ts = pj_ntohl(stream->enc->rtp.out_hdr.ts); + stream->rtcp.stat.rtp_tx_last_seq = pj_ntohs(stream->enc->rtp.out_hdr.seq); return PJ_SUCCESS; } @@ -1412,7 +1414,18 @@ static pj_status_t create_channel( pj_pool_t *pool, /* Create RTP and RTCP sessions: */ - status = pjmedia_rtp_session_init(&channel->rtp, pt, param->ssrc); + if (param->rtp_seq_ts_set == 0) { + status = pjmedia_rtp_session_init(&channel->rtp, pt, param->ssrc); + } else { + pjmedia_rtp_session_setting settings; + + settings.flags = (param->rtp_seq_ts_set << 2) | 3; + settings.default_pt = pt; + settings.sender_ssrc = param->ssrc; + settings.seq = param->rtp_seq; + settings.ts = param->rtp_ts; + status = pjmedia_rtp_session_init2(&channel->rtp, settings); + } if (status != PJ_SUCCESS) return status; |