[pjsip] Using pjsua to create a mp3 stream

Marco Zissen maz at gmx.net
Sat Feb 23 06:52:11 EST 2008


Hi Jan,
 
this is because the file gets opened with fopen(), instead of open(). It
causes the application to block until any other application reads out the
pipe.
A normal behaviour, so you have to start the mp3 encoder on the console
first. 
 
To make it more flexible, there are additional modifications to do in the
File I/O functions in pjsip (using open & read in non blocking mode), but
that would
also cause incompatiblities with some OS. An extra thread in pjsua may also
solve this. 
 
Best regards,
Marco
 
  _____  

Von: pjsip-bounces at lists.pjsip.org [mailto:pjsip-bounces at lists.pjsip.org] Im
Auftrag von jvdsandt
Gesendet: Samstag, 23. Februar 2008 12:07
An: pjsip list
Betreff: Re: [pjsip] Using pjsua to create a mp3 stream


Hello Marco,

Thank you for the example code. I made the changes and can now record in RAW
and MP3 format. But when I pass a pipe to the pjsua --rec-file argument the
application still halts. Probably I still need to change the code that opens
the file to open it in streaming mode instead of random access mode. Can you
give me a pointer where this is done?

Best regards,
Jan.



On Sat, Feb 23, 2008 at 10:32 AM, Marco Zissen <maz at gmx.net> wrote:


Hi Jan,
 
There is some coding required. Toni posted an example for the mp3 encoder.
You can do it the same way. E.g:
 
   enum Format
   {
       FMT_UNKNOWN,
       FMT_WAV,
       FMT_MP3,
       FMT_RAW,
   };
      .....
      .....
   if (pj_stricmp2(&ext, ".wav") == 0)
     file_format = FMT_WAV;
   else if (pj_stricmp2(&ext, ".mp3") == 0)
     file_format = FMT_MP3;
   else if (pj_stricmp2(&ext, ".raw") == 0)
     file_format = FMT_RAW;
   else {
     PJ_LOG(1,(THIS_FILE, "pjsua_recorder_create() error: unable to "
        "determine file format for %.*s",
        (int)filename->slen, filename->ptr));
        return PJ_ENOTSUP;
   }
      ....
      ....
   if (file_format == FMT_WAV) {
           status = pjmedia_wav_writer_port_create(pool, path, 
           pjsua_var.media_cfg.clock_rate, 
           pjsua_var.mconf_cfg.channel_count,
           pjsua_var.mconf_cfg.samples_per_frame,
           pjsua_var.mconf_cfg.bits_per_sample, 
           options, 0, &port);
   } else if (file_format == FMT_RAW) {
           status = pjmedia_raw_writer_port_create(pool, path, 

           pjsua_var.media_cfg.clock_rate,
           pjsua_var.mconf_cfg.channel_count,
           pjsua_var.mconf_cfg.samples_per_frame,
           pjsua_var.mconf_cfg.bits_per_sample,
           0, 0, 
           &port);
   } else {
        PJ_UNUSED_ARG(enc_param);
        port = NULL;
        status = PJ_ENOTSUP;
   }
 
When the extension of the named pipe is '.raw', the raw media port will be
used.


- Marco
 
  _____  


Von: pjsip-bounces at lists.pjsip.org [mailto:pjsip-bounces at lists.pjsip.org] Im
Auftrag von jvdsandt

Gesendet: Freitag, 22. Februar 2008 21:18 

An: pjsip list
Betreff: Re: [pjsip] Using pjsua to create a mp3 stream


Marco,

Great, I have build your modifications and the playfile en recfile examples
work. Is it possible to use these new "raw" ports from the pjsua program. Or
is there more coding required for this?

Thanks,
Jan.


On Fri, Feb 22, 2008 at 4:19 PM, Marco Zissen <maz at gmx.net> wrote:


Hi Jan,
 
I just copied and modified the wav_player.c and wav_writer.c and created two
new ports in pjsip (raw_player.c, raw_writer.c). 
With these ports you are able to play and record from/to a named pipe (raw
pcm data without a wave header).
 
Maybe others will also find it useful, so I post it to the list. Just unpack
the tar archive in pjproject-0.8.0.
It will overwrite a Makefile and the playfile.c/recfile.c example to show
how it works.
 
Best regards,
Marco
 
ps: The functions can be much more improved and are poorly tested. I think
it's a good "startpoint" to work with.
 
  _____  

Von: pjsip-bounces at lists.pjsip.org [mailto:pjsip-bounces at lists.pjsip.org] Im
Auftrag von jvdsandt
Gesendet: Dienstag, 19. Februar 2008 20:01
An: pjsip list
Betreff: Re: [pjsip] Using pjsua to create a mp3 stream


Hello,

Thank you all for your responses. I think it is possible to use pjsip/pjsau
to stream a VoIP conversation as an mp3 stream without to much work.

Unfortunately I am not a C programmer. I will look for someone who can help
me to write the correct extension to pjsip/pjsua.

Chhers,
Jan.


On Feb 19, 2008 7:15 PM, <buldozer at aufbix.org> wrote:


Regarding MP3 recording ... what I do, is to re-add the code to pjsua-lib,
which was there until mp3 writer was moved to the third-party folder.
Just find


   if (file_format == FMT_WAV) {
       status = pjmedia_wav_writer_port_create(pool, path,
 
pjsua_var.media_cfg.clock_rate,
 
pjsua_var.mconf_cfg.channel_count,
 
pjsua_var.mconf_cfg.samples_per_frame,
 
pjsua_var.mconf_cfg.bits_per_sample,
                                               options, 0, &port);

in pjsua_media.c and add the following lines right after

   } else if (file_format == FMT_MP3) {
       status = pjmedia_mp3_writer_port_create(pjsua_var.pool, path,
 
pjsua_var.media_cfg.clock_rate,
 
pjsua_var.mconf_cfg.channel_count,
 
pjsua_var.mconf_cfg.samples_per_frame,
 
pjsua_var.mconf_cfg.bits_per_sample,
                                               enc_param, &port);

... and include mp3_writer.c and mp3_port.h to pjsua-lib project. This works
for any pjsua-lib based applications.


Greets, Toni

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.




_______________________________________________
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





_______________________________________________
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




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20080223/40113502/attachment.html>


More information about the pjsip mailing list