David, Thank you for the information! I appreciate the help. Take care, Archie From: pjsip-bounces@xxxxxxxxxxxxxxx [mailto:pjsip-bounces at lists.pjsip.org] On Behalf Of David Clark Sent: Thursday, September 17, 2009 9:43 PM To: pjsip list; 'pjsip list' Subject: Re: Capture Call Audio to Buffer At 10:37 AM 9/15/2009, Archie Rosenblum wrote: Content-Type: multipart/alternative; boundary="----=_NextPart_000_0088_01CA35F8.E071DB00" Content-Language: en-us Would someone mind pointing me in the right direction for capturing audio to a buffer? I have multiple inbound calls and I would like to check for in-band DTMF (no rfc2833). What is the API order for setting up PJSIP to get the audio data? I just need some framework help -- I have reviewed the sample files on the web site but I'm having trouble grasping which APIs to use. I do know how to do play audio files, it's the capturing to a buffer that has me confused. I mostly use the PJSUA APIs. Global --------- pjsua_pool_create [Shared pool used for all calls] Call comes in (for each call do below) ------------- pjmedia_mem_capture_create [What size buffer should I use? Does it matter?] For FFT analysis I used a buffer size of 2000 bytes. The idea being the bigger the buffer size the more accurate the result. The smaller the buffer the more real time the data result. [How do I get the call information such clockrate, etc, so I can set this API to use the same values as the call? Does it matter? Or should I use the values in the sample programs?] Yes I think it matters. I use the pjsua_conf_get_port_info() function to get this data then pass it along. It looks something like this: pjsua_conf_get_port_info(sip_data[line].conf_slot, &info); sip_data[line].cpa_clock_rate=info.clock_rate; pjmedia_mem_capture_create(sip_data[line].cpa_pool, sip_data[line].cpa_int_data, CPA_FFT_SIZE, info.clock_rate, info.channel_count, info.samples_per_frame, info.bits_per_sample, 0, &sip_data[line].cpa_port); pjmedia_mem_capture_set_eof_cb [How do I connect the call to this media port for so the media port is "listening" and the callback works] // line_number is supplied by the application to sort out multiple line implmentation. pjmedia_mem_capture_set_eof_cb(sip_data[line].cpa_port, &sip_data[line].line_number, cpa_fft_got_data); // add the memory capture port to the bridge pjsua_conf_add_port(sip_data[line].cpa_pool, sip_data[line].cpa_port, &sip_data[line].cpa_conf_port); // then connect the conf_slot for the call and the cpa_conf_slot. pjsua_conf_connect(sip_data[line].conf_slot, sip_data[line].cpa_conf_port); The callback function will look like this: pj_status_t cpa_fft_got_data(pjmedia_port *port, void *usr_data) { usr_data will contain the line_number passed int. Then I think you call pjmedia_port_get_frame(port, frame); and frame->buf I think has your audio data. Yea I didn't realize until I typed out this message, my code was missing that piece. So helping you helped me. } Call ends ---------- pjmedia_port_destroy Thank you in advance, Archie _______________________________________________ Visit our blog: http://blog.pjsip.org pjsip mailing list pjsip at lists.pjsip.org http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org ---------------------------------------------------------------------------- --------- This email has been scanned by the MxScan Email Security System. ---------------------------------------------------------------------------- --------- -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20090922/3142a742/attachment.html>