|
|
|
@ -107,7 +107,7 @@ struct media_player *media_player_new(struct call_monologue *ml) { |
|
|
|
uint32_t ssrc = 0; |
|
|
|
while (ssrc == 0) |
|
|
|
ssrc = random(); |
|
|
|
struct ssrc_ctx *ssrc_ctx = get_ssrc_ctx(ssrc, ml->call->ssrc_hash, SSRC_DIR_OUTPUT); |
|
|
|
struct ssrc_ctx *ssrc_ctx = get_ssrc_ctx(ssrc, ml->call->ssrc_hash, SSRC_DIR_OUTPUT, ml); |
|
|
|
|
|
|
|
struct media_player *mp = obj_alloc0("media_player", sizeof(*mp), __media_player_free); |
|
|
|
|
|
|
|
@ -166,16 +166,31 @@ static void __send_timer_send_common(struct send_timer *st, struct codec_packet |
|
|
|
if (!st->sink->selected_sfd) |
|
|
|
goto out; |
|
|
|
|
|
|
|
struct rtp_header *rh = (void *) cp->s.s; |
|
|
|
ilog(LOG_DEBUG, "Forward to sink endpoint: %s%s:%d%s (RTP seq %u TS %u)", |
|
|
|
FMT_M(sockaddr_print_buf(&st->sink->endpoint.address), |
|
|
|
st->sink->endpoint.port), |
|
|
|
ntohs(rh->seq_num), |
|
|
|
ntohl(rh->timestamp)); |
|
|
|
struct rtp_header *rh = cp->rtp; |
|
|
|
if (rh) |
|
|
|
ilog(LOG_DEBUG, "Forward to sink endpoint: %s%s:%d%s (RTP seq %u TS %u)", |
|
|
|
FMT_M(sockaddr_print_buf(&st->sink->endpoint.address), |
|
|
|
st->sink->endpoint.port), |
|
|
|
ntohs(rh->seq_num), |
|
|
|
ntohl(rh->timestamp)); |
|
|
|
else |
|
|
|
ilog(LOG_DEBUG, "Forward to sink endpoint: %s%s:%d%s", |
|
|
|
FMT_M(sockaddr_print_buf(&st->sink->endpoint.address), |
|
|
|
st->sink->endpoint.port)); |
|
|
|
|
|
|
|
socket_sendto(&st->sink->selected_sfd->socket, |
|
|
|
cp->s.s, cp->s.len, &st->sink->endpoint); |
|
|
|
|
|
|
|
if (cp->ssrc_out && cp->rtp) { |
|
|
|
atomic64_inc(&cp->ssrc_out->packets); |
|
|
|
atomic64_add(&cp->ssrc_out->octets, cp->s.len); |
|
|
|
if (cp->ts) |
|
|
|
atomic64_set(&cp->ssrc_out->last_ts, cp->ts); |
|
|
|
else |
|
|
|
atomic64_set(&cp->ssrc_out->last_ts, ntohl(cp->rtp->timestamp)); |
|
|
|
payload_tracker_add(&cp->ssrc_out->tracker, cp->rtp->m_pt & 0x7f); |
|
|
|
} |
|
|
|
|
|
|
|
out: |
|
|
|
codec_packet_free(cp); |
|
|
|
} |
|
|
|
|