struct rtp_member* rtp_member_fetch(struct rtp_context *ctx, uint32_t ssrc) { struct rtp_member *p; p = rtp_member_list_find(ctx->members, ssrc); if(!p) { // exist in sender list? assert(!rtp_member_list_find(ctx->senders, ssrc)); p = rtp_member_create(ssrc); if(p) { struct rtcp_msg_t msg; // update members list rtp_member_list_add(ctx->members, p); rtp_member_release(p); msg.type = RTCP_MSG_MEMBER; msg.u.member.ssrc = ssrc; ctx->handler.on_rtcp(ctx->cbparam, &msg); } } return p; }
const char* rtp_get_name(void* rtp, uint32_t ssrc) { struct rtp_member *member; struct rtp_context *ctx = (struct rtp_context *)rtp; member = rtp_member_list_find(ctx->members, ssrc); return member ? (char*)member->sdes[RTCP_SDES_NAME].data : NULL; }
struct rtp_member* rtp_sender_fetch(struct rtp_context *ctx, uint32_t ssrc) { struct rtp_member *p; p = rtp_member_list_find(ctx->senders, ssrc); if(!p) { p = rtp_member_fetch(ctx, ssrc); if(p) { // update senders list rtp_member_list_add(ctx->senders, p); } } return p; }