Advertisement
jfk422

MemCapture and Playback

Sep 3rd, 2020 (edited)
908
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.72 KB | None | 0 0
  1. typedef std::chrono::high_resolution_clock Clock;
  2. typedef std::chrono::milliseconds milliseconds;
  3.  
  4. Clock::time_point t0;
  5. Clock::time_point t2;
  6. bool first1 = true;
  7. bool first2 = true;
  8.  
  9.  
  10. void dump_incoming_frames(pjmedia_port * port, void * usr_data){
  11.     milliseconds ms;
  12.     if(first2){
  13.         t0 = Clock::now();
  14.         first = false;
  15.     }
  16.     else{
  17.         Clock::time_point t1 = Clock::now();
  18.         ms = std::chrono::duration_cast<milliseconds>(t1 - t0);
  19.         std::cout << ms.count() << "ms\n";
  20.         t0 = Clock::now();
  21.     }
  22. }
  23.  
  24.  
  25. void send_incoming_frames(pjmedia_port * port, void * usr_data){
  26.     milliseconds ms;
  27.     if(first){
  28.         t2 = Clock::now();
  29.         first = false;
  30.     }
  31.     else{
  32.         Clock::time_point t3 = Clock::now();
  33.         ms = std::chrono::duration_cast<milliseconds>(t3 - t2);
  34.         std::cout << ms.count() << "ms\n";
  35.         t0 = Clock::now();
  36.     }
  37. }
  38.  
  39.  
  40. void MyCall::onCallMediaState(OnCallMediaStateParam &prm){
  41.     CallInfo ci = getInfo();
  42.     pjsua_call_info ciUA;
  43.     pjsua_call_get_info(ci.id, &ciUA);
  44.     pjsua_conf_port_info cpi;
  45.     pjsua_conf_get_port_info(ciUA.conf_slot, &cpi);
  46.  
  47.     uint buf_size = cpi.bits_per_sample*cpi.samples_per_frame/8;
  48.  
  49.     pj_pool_t *pool = pjsua_pool_create("POOLNAME", 2000, 2000);
  50.     void *buffer0 = pj_pool_zalloc(pool, buf_size);
  51.     void *buffer2 = pj_pool_zalloc(pool, buf_size);
  52.  
  53.     pjmedia_port *prtCap;
  54.     pjmedia_port *prtPlay;
  55.  
  56.     pjmedia_mem_capture_create( pool,
  57.                                 buffer0,
  58.                                 buf_size,
  59.                                 cpi.clock_rate,
  60.                                 1,
  61.                                 cpi.samples_per_frame,
  62.                                 cpi.bits_per_sample,
  63.                                 0,
  64.                                 &prtCap);
  65.     pjmedia_mem_capture_set_eof_cb2(prtCap, buffer0, dump_incoming_frames);
  66.  
  67.     pjmedia_mem_player_create(  pool,
  68.                                 buffer2,
  69.                                 buf_size2,
  70.                                 cpi.clock_rate,
  71.                                 1,
  72.                                 cpi.samples_per_frame,
  73.                                 cpi.bits_per_sample,
  74.                                 0,
  75.                                 &prtPlay);
  76.     pjmedia_mem_player_set_eof_cb2(prtPlay, buffer2, send_incoming_frames);
  77.  
  78.     pjsua_conf_port_id capPortId;
  79.     pjsua_conf_add_port(pool, prtCap, &capPortId);
  80.     pjsua_conf_connect(ciUA.conf_slot, capPortId); //connect conference with port
  81.  
  82.     pjsua_conf_port_id playPortId;
  83.     pjsua_conf_add_port(pool, prtPlay, &playPortId);
  84.     pjsua_conf_connect(playPortId, ciUA.conf_slot); //Connect port with conference
  85. }
  86.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement