[pjsip] Conf por hangs after random time

Manuel Quinteiro mquinteiro at cic-systems.com
Wed Apr 30 13:10:36 EDT 2008


Thanks Benny,
 
You are right, I have used pjsua_set_null_snd_dev(); afeter the Initialitation 
and it works!

Cheers.



El Miércoles, 30 de Abril de 2008, Benny Prijono escribió:
> On Wed, Apr 30, 2008 at 12:33 PM, Manuel Quinteiro
>
> <mquinteiro at cic-systems.com> wrote:
> > Thanks Benny,
> >
> >  >  - call gets disconnected?
> >
> >  I think no. No calls to on_call_state nor on_call_media_state nor
> >  on_incomming_call sucess.
> >
> >  >  - something disconnects your port from the bridge?
> >
> >  Who? Not me.
>
> Well not me either. I asked just in case...
>
> >  >  - something in your callbacks blocks the program (e.g. mutex)?
> >
> >  mmm no, actually do nothing, no threads, no mutex.
> >
> >  >  - something stops the sound device from calling the callbacks (try
> >  > with --null-audio instead)
> >  >  - ... ?
> >
> >  My port do not use sound card, but could be, how can initialize the
> > library with --null-audio ?(Do pjsua parse itself argv?)
>
> If you use pjsua then by default it will instantiate the sound device.
> The sound device is then connected to the bridge, and it's actually
> the one that triggers the get_frame()/put_frame() calls. So if the
> sound device gets stucked, then no get_frame()/put_frame() will
> happen.
>
> Yes you can just give pjsua --null-audio option to disable sound
> device. pjsua then will use thread rather than sound device to
> push/pull frames. You will not hear audio in your speaker of course.
>
> Cheers
>  Benny
>
> >  thanks Benny!
> >
> >  Cheers
> >  Manuel
> >
> >  El Miércoles, 30 de Abril de 2008, Benny Prijono escribió:
> > > On Tue, Apr 29, 2008 at 6:44 PM, Manuel Quinteiro
> > >
> >  > <mquinteiro at cic-systems.com> wrote:
> >  > > Hi!
> >  > >
> >  > >  I have created my own port, every think works ok, but some times,
> >  > > after random time the callbacks get_frame and  put_frame never call
> >  > > again.
> >  > >
> >  > >  Do you see something rong?
> >  >
> >  > I looked at the code and it looks fine actually. Could it be any of
> >  > these? - call gets disconnected?
> >  >  - something disconnects your port from the bridge?
> >  >  - something in your callbacks blocks the program (e.g. mutex)?
> >  >  - something stops the sound device from calling the callbacks (try
> >  > with --null-audio instead)
> >  >  - ... ?
> >  >
> >  > Cheers
> >  >  Benny
> >  >
> >  > >  Some parts of code are:
> >  > >
> >  > >  main() {
> >  > >  ....
> >  > >         status = pjsua_create();
> >  > >                 /* Init pjsua */
> >  > >         {
> >  > >                 pjsua_config cfg;
> >  > >                 pjsua_logging_config log_cfg;
> >  > >                 pjsua_config_default(&cfg);
> >  > >                 cfg.cb.on_incoming_call = &on_incoming_call;
> >  > >                 cfg.cb.on_call_media_state = &on_call_media_state;
> >  > >                 cfg.cb.on_call_state = &on_call_state;
> >  > >
> >  > >                 pjsua_logging_config_default(&log_cfg);
> >  > >                 log_cfg.console_level = 0;
> >  > >
> >  > >
> >  > >                 status = pjsua_init(&cfg, &log_cfg, NULL);
> >  > >
> >  > >                 if (status != PJ_SUCCESS) error_exit("Error in
> >  > > pjsua_init()", status); }
> >  > >
> >  > >         pjmedia_myprot_port_create(pjsua_var.pool, 44100,  1,288,
> >  > > 16, &myport, serverPort);
> >  > >
> >  > >         pjsua_conf_add_port(pjsua_var.pool, myport, &numPort);
> >  > >  .
> >  > >  .
> >  > >  }
> >  > >
> >  > >
> >  > >  static void on_call_media_state(pjsua_call_id call_id)
> >  > >  {
> >  > >         pjsua_call_info ci;
> >  > >
> >  > >         pjsua_call_get_info(call_id, &ci);
> >  > >         if (ci.media_status == PJSUA_CALL_MEDIA_ACTIVE) {
> >  > >                 pjsua_conf_connect(ci.conf_slot, numPort);
> >  > >                 pjsua_conf_connect(numPort, ci.conf_slot);
> >  > >         }
> >  > >  }
> >  > >
> >  > >
> >  > >  PJ_DEF(pj_status_t) pjmedia_ucog_port_create( pj_pool_t *pool,
> >  > >                         unsigned sampling_rate,
> >  > >                         unsigned channel_count,
> >  > >                         unsigned samples_per_frame,
> >  > >                         unsigned bits_per_sample,
> >  > >                         pjmedia_port **p_port,
> >  > >                         int mixerPort)
> >  > >  {
> >  > >
> >  > >         pjmedia_port *port;
> >  > >         const pj_str_t name = pj_str("ucog-port");
> >  > >
> >  > >         PJ_ASSERT_RETURN(pool && p_port, PJ_EINVAL);
> >  > >
> >  > >         port = PJ_POOL_ZALLOC_T(pool, pjmedia_port);
> >  > >         PJ_ASSERT_RETURN(pool != NULL, PJ_ENOMEM);
> >  > >
> >  > >         pjmedia_port_info_init(&port->info, &name, SIGNATURE,
> >  > > sampling_rate, channel_count, bits_per_sample, samples_per_frame);
> >  > >
> >  > >         port->get_frame = &ucog_get_frame;
> >  > >         port->put_frame = &ucog_put_frame;
> >  > >         port->on_destroy = &ucog_on_destroy;
> >  > >
> >  > >         ntrama=0;
> >  > >         *p_port = port;
> >  > >
> >  > >
> >  > >         slen=sizeof(si_other);
> >  > >
> >  > >  .
> >  > >  .
> >  > >  .
> >  > >
> >  > >         // Creamos Feedback para el interlocutor.
> >  > >
> >  > >         for(int i=0;i< 44100;i++){
> >  > >                 senalSeno[i]= sin(i/11)*15000;
> >  > >         }
> >  > >         txframe=0;
> >  > >         return PJ_SUCCESS;
> >  > >  }
> >  > >
> >  > >
> >  > >  static pj_status_t ucog_put_frame(pjmedia_port *this_port,
> >  > >                                                                  
> >  > > const pjmedia_frame *frame) {
> >  > >         PJ_UNUSED_ARG(this_port);
> >  > >         PJ_UNUSED_ARG(frame);
> >  > >
> >  > >         if(frame->type==1) {
> >  > >                 procFrame(frame->buf, frame->size);
> >  > >         }
> >  > >         return PJ_SUCCESS;
> >  > >  }
> >  > >
> >  > >
> >  > >  static pj_status_t ucog_get_frame(pjmedia_port *this_port,
> >  > >
> >  > > pjmedia_frame *frame) {
> >  > >
> >  > >         frame->type = PJMEDIA_FRAME_TYPE_AUDIO;
> >  > >         frame->size = this_port->info.samples_per_frame * 2;
> >  > >         frame->timestamp.u32.lo +=
> >  > > this_port->info.samples_per_frame; memcpy(frame->buf, senalSeno,
> >  > > frame->size);
> >  > >         txframe++;
> >  > >         return PJ_SUCCESS;
> >  > >  }
> >  > >
> >  > >
> >  > >  --
> >  > >  Manuel
> >  > >
> >  > >
> >  > >  _______________________________________________
> >  > >  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
> >  >
> >  > _______________________________________________
> >  > 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
> >
> >  --
> >  Manuel Quinteiro
> >  Compañía de Instrumentación y control, S.L.
> >  María Auxiliadora, 5
> >  Tlf. +34 91 4595490
> >  Fax. +34 91 4508667
> >  e-mail: mquinteiro at cic-systems.com
>
> _______________________________________________
> 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



-- 
Manuel Quinteiro
Compañía de Instrumentación y control, S.L.
María Auxiliadora, 5
Tlf. +34 91 4595490
Fax. +34 91 4508667
e-mail: mquinteiro at cic-systems.com




More information about the pjsip mailing list