Ignore:
Timestamp:
Jul 17, 2018 8:11:17 AM (6 years ago)
Author:
nanang
Message:

Re #2126: Implemented incoming RTCP-FB handling, i.e: parse and notify application via PJMEDIA event framework.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia/rtcp.c

    r4712 r5825  
    2020#include <pjmedia/rtcp.h> 
    2121#include <pjmedia/errno.h> 
     22#include <pjmedia/event.h> 
     23#include <pjmedia/rtcp_fb.h> 
    2224#include <pj/assert.h> 
    2325#include <pj/log.h> 
     
    3335#define RTCP_BYE  203 
    3436#define RTCP_XR   207 
     37 
     38/* RTCP Feedbacks */ 
     39#define RTCP_RTPFB      205 
     40#define RTCP_PSFB       206 
    3541 
    3642enum { 
     
    765771 
    766772 
     773static void parse_rtcp_fb(pjmedia_rtcp_session *sess, 
     774                          const void *pkt, 
     775                          pj_size_t size) 
     776{ 
     777    unsigned cnt = 1; 
     778    pjmedia_rtcp_fb_nack nack[1]; 
     779    //pjmedia_rtcp_fb_sli sli[1]; 
     780    //pjmedia_rtcp_fb_rpsi rpsi; 
     781    pjmedia_event ev; 
     782    pjmedia_event_rx_rtcp_fb_data ev_data; 
     783    pj_timestamp ts_now; 
     784 
     785    pj_get_timestamp(&ts_now); 
     786    pj_bzero(&ev_data, sizeof(ev_data)); 
     787 
     788    if (pjmedia_rtcp_fb_parse_nack(pkt, size, &cnt, nack)==PJ_SUCCESS) 
     789    { 
     790        pjmedia_event_init(&ev, PJMEDIA_EVENT_RX_RTCP_FB, &ts_now, sess); 
     791        ev_data.cap.type = PJMEDIA_RTCP_FB_NACK; 
     792        ev_data.msg.nack = nack[0]; 
     793        ev.data.ptr = &ev_data; 
     794 
     795        /* Sync publish, i.e: don't use PJMEDIA_EVENT_PUBLISH_POST_EVENT */ 
     796        pjmedia_event_publish(NULL, sess, &ev, 0); 
     797 
     798        /*  For other FB type implementations later 
     799    } else if (pjmedia_rtcp_fb_parse_pli(pkt, size)==PJ_SUCCESS) 
     800    { 
     801    } else if (pjmedia_rtcp_fb_parse_sli(pkt, size, &cnt, sli)==PJ_SUCCESS) 
     802    { 
     803    } else if (pjmedia_rtcp_fb_parse_rpsi(pkt, size, &rpsi)==PJ_SUCCESS) 
     804    { 
     805        */ 
     806    } else { 
     807        /* Ignore unknown RTCP Feedback */ 
     808        TRACE_((sess->name, "Received unknown RTCP feedback")); 
     809    } 
     810} 
     811 
     812 
    767813PJ_DEF(void) pjmedia_rtcp_rx_rtcp( pjmedia_rtcp_session *sess, 
    768814                                   const void *pkt, 
     
    789835        case RTCP_BYE: 
    790836            parse_rtcp_bye(sess, p, len); 
     837            break; 
     838        case RTCP_RTPFB: 
     839        case RTCP_PSFB: 
     840            parse_rtcp_fb(sess, p, len); 
    791841            break; 
    792842        default: 
Note: See TracChangeset for help on using the changeset viewer.