[jitsi-dev] Questuion about jitsi and rfc 2833


#1

Dear Jitsi developers,

I have got a simple question : could someone explain briefly how DTMF rfc
2833 is implemented in Jitsi? Is it part of FMJ? If yes/no how is it
handled in Jitsi?

Thanks for your work!

Bruno Konik


#2

Hello,

Dear Jitsi developers,

I have got a simple question : could someone explain briefly how DTMF
rfc 2833 is implemented in Jitsi? Is it part of FMJ? If yes/no how is it
handled in Jitsi?

It is implemented as part of the TransformEngineChain of a MediaStream, not in FMJ. See:
https://github.com/jitsi/libjitsi/blob/master/src/org/jitsi/impl/neomedia/transform/dtmf/DtmfTransformEngine.java

For how it is handled in Jitsi, see the usages of AudioMediaStream#startSendingDTMF() and AudioMediaStream#addDTMFListener(), or OperationSetDTMF.

Regards,
Boris

···

On 21/01/15 08:26, Bruno KONIK wrote:


#3

Hey Bruno,

It is one of the RTP transformers in libjitsi

--sent from my mobile

···

On 23 Jan 2015 3:33 AM, "Bruno KONIK" <bruno.konik@gmail.com> wrote:

Dear Jitsi developers,

I have got a simple question : could someone explain briefly how DTMF rfc
2833 is implemented in Jitsi? Is it part of FMJ? If yes/no how is it
handled in Jitsi?

Thanks for your work!

Bruno Konik

_______________________________________________
dev mailing list
dev@jitsi.org
Unsubscribe instructions and other list options:
http://lists.jitsi.org/mailman/listinfo/dev


#4

Thanks Boris, Emil

I will have a look.

Bruno

Hey Bruno,

It is one of the RTP transformers in libjitsi

--sent from my mobile

Dear Jitsi developers,

I have got a simple question : could someone explain briefly how DTMF

rfc 2833 is implemented in Jitsi? Is it part of FMJ? If yes/no how is it
handled in Jitsi?

···

Le 24 janv. 2015 03:49, "Emil Ivov" <emcho@jitsi.org> a écrit :

On 23 Jan 2015 3:33 AM, "Bruno KONIK" <bruno.konik@gmail.com> wrote:

Thanks for your work!

Bruno Konik

_______________________________________________
dev mailing list
dev@jitsi.org
Unsubscribe instructions and other list options:
http://lists.jitsi.org/mailman/listinfo/dev

_______________________________________________
dev mailing list
dev@jitsi.org
Unsubscribe instructions and other list options:
http://lists.jitsi.org/mailman/listinfo/dev


#5

Dear Emil, Boris,

My application (could be an IVR) basically needs to play an audio file (wav), record a conversation and detect dtmf tones. It is currently based on jmf and does not know how to detect tones currently, that’s why I am enquiring about alternatives to jmf that would even offer more.

So some basic documentation about libjitsi would help me much! Is there any documentation about the main concepts used in libjitsi ?

In particular, since my application does not need to access any device on the host, is it possible to package libjitsi without the native code?

Thanks again

Bruno

···

De : dev [mailto:dev-bounces@jitsi.org] De la part de Emil Ivov
Envoyé : samedi 24 janvier 2015 03:48
À : Jitsi Developers
Objet : Re: [jitsi-dev] Questuion about jitsi and rfc 2833

Hey Bruno,

It is one of the RTP transformers in libjitsi

--sent from my mobile

On 23 Jan 2015 3:33 AM, "Bruno KONIK" <bruno.konik@gmail.com <mailto:bruno.konik@gmail.com> > wrote:

Dear Jitsi developers,

I have got a simple question : could someone explain briefly how DTMF rfc 2833 is implemented in Jitsi? Is it part of FMJ? If yes/no how is it handled in Jitsi?

Thanks for your work!

Bruno Konik

_______________________________________________
dev mailing list
dev@jitsi.org <mailto:dev@jitsi.org>
Unsubscribe instructions and other list options:
http://lists.jitsi.org/mailman/listinfo/dev


#6

You can just remove the native libraries, and libjitsi will work without them (unless you try to use the associated functionality). In particular it can work without audio capture/playback and without specific codec support.

Regards,
Boris

···

On 26/01/15 02:28, Bruno Konik wrote:

Dear Emil, Boris,

My application (could be an IVR) basically needs to play an audio file
(wav), record a conversation and detect dtmf tones. It is currently
based on jmf and does not know how to detect tones currently, that’s why
I am enquiring about alternatives to jmf that would even offer more.

So some basic documentation about libjitsi would help me much! Is there
any documentation about the main concepts used in libjitsi ?

In particular, since my application does not need to access any device
on the host, is it possible to package libjitsi without the native code?


#7

This email is addressed mainly to Boris Grozev but of course concerns the rest of this list and any feedback is welcome from anyone!

I have tried using basic fmj before using the libjitsi for my dtmf tone detection and finally moved my entire application from jmf to fmj (my application was based on jmf). Doing so, I encountered the following problem. When trying to record a RTP stream to a wav file, I have used the BasicWavMux from libjitsi. The wav file created was recording as a BigEndian (RIFX) instead of LittleEndian. Such a BigEndian format is not readable for Windows Media Player. So I have changed this in the BasicWavMux but I am not sure I am doing this well (not an expert with fmj).

  @Override
  public Format setInputFormat(Format format, int trackID) {
    if (!(format instanceof AudioFormat))
      return null;

    if (!AudioFormat.LINEAR.equals(format.getEncoding()))
      return null;
    
    if (((AudioFormat)format).getEndian() != AudioFormat.LITTLE_ENDIAN)
      return null;

    return inputs[0] = format;
  }
Could you please advise me about this?

Thanks very much. BTW the work done in libjitsi seems very impressive and my intention is to move the application to libjitsi, so thanks to all for that job!

Bruno

-----Message d'origine-----

···

De : dev [mailto:dev-bounces@jitsi.org] De la part de Boris Grozev
Envoyé : lundi 26 janvier 2015 20:14
À : Jitsi Developers
Objet : Re: [jitsi-dev] Questuion about jitsi and rfc 2833

On 26/01/15 02:28, Bruno Konik wrote:

Dear Emil, Boris,

My application (could be an IVR) basically needs to play an audio file
(wav), record a conversation and detect dtmf tones. It is currently
based on jmf and does not know how to detect tones currently, that’s
why I am enquiring about alternatives to jmf that would even offer more.

So some basic documentation about libjitsi would help me much! Is
there any documentation about the main concepts used in libjitsi ?

In particular, since my application does not need to access any device
on the host, is it possible to package libjitsi without the native code?

You can just remove the native libraries, and libjitsi will work without them (unless you try to use the associated functionality). In particular it can work without audio capture/playback and without specific codec support.

Regards,
Boris

_______________________________________________
dev mailing list
dev@jitsi.org
Unsubscribe instructions and other list options:
http://lists.jitsi.org/mailman/listinfo/dev


#8

Hello Bruno,

This email is addressed mainly to Boris Grozev but of course concerns
the rest of this list and any feedback is welcome from anyone!

I am hardly an expert of FMJ/JMF, so I am not sure I can help much...

I have tried using basic fmj before using the libjitsi for my dtmf

tone detection and finally moved my entire application from jmf to fmj
(my application was based on jmf). Doing so, I encountered the following
problem. When trying to record a RTP stream to a wav file, I have used
the BasicWavMux from libjitsi. The wav file created was recording as a
BigEndian (RIFX) instead of LittleEndian. Such a BigEndian format is not
readable for Windows Media Player. So I have changed this in the
BasicWavMux but I am not sure I am doing this well (not an expert with fmj).

  @Override
  public Format setInputFormat(Format format, int trackID) {
    if (!(format instanceof AudioFormat))
      return null;

    if (!AudioFormat.LINEAR.equals(format.getEncoding()))
      return null;
    
    if (((AudioFormat)format).getEndian() != AudioFormat.LITTLE_ENDIAN)
      return null;

    return inputs[0] = format;
  }
Could you please advise me about this?

I am not sure I understand the situation. If this code is working and you are just looking for advice on whether it's a good solution, then I definitely can't help you :slight_smile:

If it doesn't work and you are wondering why, then I cannot offer a solution, but I have some suggestions:

1. Change the SUPPORTED_INPUT_FORMAT field, with a format with a specific endianness (little) and hope that FMJ converts it for you.
2. Do the conversion yourself, possibly by overriding the needed BasicMux#write methods to take care of endianness conversion.

Thanks very much. BTW the work done in libjitsi seems very
impressive

and my intention is to move the application to libjitsi, so thanks to
all for that job!

Thank you for the kind words!

Regards,
Boris

···

On 10/03/15 13:19, Bruno Konik wrote:


#9

Thank you very much Boris.

Actually, the fix is working but I was just wondering if it was the best way to handle the situation. I see that libjitsi enables recording and thought that maybe you would have encountered this problem (which is that recording into a wav file produce a wave file in big endian format which is not readable by Windows Media Player). So I guess you have not encountered such a problem...

Anyway thanks for your help again!

Bruno

-----Message d'origine-----

···

De : dev [mailto:dev-bounces@jitsi.org] De la part de Boris Grozev
Envoyé : mardi 10 mars 2015 21:51
À : Jitsi Developers
Objet : Re: [jitsi-dev] Questuion about jitsi and rfc 2833

Hello Bruno,

On 10/03/15 13:19, Bruno Konik wrote:

This email is addressed mainly to Boris Grozev but of course concerns
the rest of this list and any feedback is welcome from anyone!

I am hardly an expert of FMJ/JMF, so I am not sure I can help much...

I have tried using basic fmj before using the libjitsi for my dtmf

tone detection and finally moved my entire application from jmf to fmj (my application was based on jmf). Doing so, I encountered the following problem. When trying to record a RTP stream to a wav file, I have used the BasicWavMux from libjitsi. The wav file created was recording as a BigEndian (RIFX) instead of LittleEndian. Such a BigEndian format is not readable for Windows Media Player. So I have changed this in the BasicWavMux but I am not sure I am doing this well (not an expert with fmj).

  @Override
  public Format setInputFormat(Format format, int trackID) {
    if (!(format instanceof AudioFormat))
      return null;

    if (!AudioFormat.LINEAR.equals(format.getEncoding()))
      return null;
    
    if (((AudioFormat)format).getEndian() != AudioFormat.LITTLE_ENDIAN)
      return null;

    return inputs[0] = format;
  }
Could you please advise me about this?

I am not sure I understand the situation. If this code is working and you are just looking for advice on whether it's a good solution, then I definitely can't help you :slight_smile:

If it doesn't work and you are wondering why, then I cannot offer a solution, but I have some suggestions:

1. Change the SUPPORTED_INPUT_FORMAT field, with a format with a specific endianness (little) and hope that FMJ converts it for you.
2. Do the conversion yourself, possibly by overriding the needed BasicMux#write methods to take care of endianness conversion.

Thanks very much. BTW the work done in libjitsi seems very
impressive

and my intention is to move the application to libjitsi, so thanks to
all for that job!

Thank you for the kind words!

Regards,
Boris

_______________________________________________
dev mailing list
dev@jitsi.org
Unsubscribe instructions and other list options:
http://lists.jitsi.org/mailman/listinfo/dev


#10

Thank you very much Boris.

Actually, the fix is working but I was just wondering if it was the
best way to handle the situation.

I don't have a suggestion for a better solution.

I see that libjitsi enables
recording and thought that maybe you would have encountered this
problem (which is that recording into a wav file produce a wave file
in big endian format which is not readable by Windows Media Player).
So I guess you have not encountered such a problem...

As far as I understand, WAV files can contain the data in either big- or little-endian, and the RIFF or RIFX tag in the very beginning identifies which one is actually used. This is consistent with the FMJ code, which sets the tag according to the endianness of the input. So little-endian files, such as the ones produced by libjitsi/jitsi should be valid, as long as the RIFF tag is used (and it is).

I haven't tested with Windows Media Player, and I have no idea why it wouldn't read them, but it seems to me that the problem is with the player and not the files. I have tried all the tools that I have easy access to and they all work fine (mplayer, ffmpeg, audacity, vlc, chrome).

Regards,
Boris

···

On 11/03/15 07:47, Bruno Konik wrote:


#11

Hi Boris,

You say:

"So little-endian files, such as the ones produced by libjitsi/jitsi should be valid, as long as the RIFF tag is used (and it is)."

By this, should I understand that libjitsi/Jitsi produce always little-endian files? Where is it set in the code? What prevents libjitsi/Jitsi from writing big endian files?

Bruno

Thank you very much Boris.

Actually, the fix is working but I was just wondering if it was the
best way to handle the situation.

I don't have a suggestion for a better solution.

I see that libjitsi enables
recording and thought that maybe you would have encountered this
problem (which is that recording into a wav file produce a wave file
in big endian format which is not readable by Windows Media Player).
So I guess you have not encountered such a problem...

As far as I understand, WAV files can contain the data in either big- or little-endian, and the RIFF or RIFX tag in the very beginning identifies which one is actually used. This is consistent with the FMJ code, which sets the tag according to the endianness of the input. So little-endian files, such as the ones produced by libjitsi/jitsi should be valid, as long as the RIFF tag is used (and it is).

I haven't tested with Windows Media Player, and I have no idea why it wouldn't read them, but it seems to me that the problem is with the player and not the files. I have tried all the tools that I have easy access to and they all work fine (mplayer, ffmpeg, audacity, vlc, chrome).

Regards,
Boris

···

On 11/03/15 07:47, Bruno Konik wrote:

_______________________________________________
dev mailing list
dev@jitsi.org
Unsubscribe instructions and other list options:
http://lists.jitsi.org/mailman/listinfo/dev


#12

I don't know. The WAVE muxer supports both, so it is probably up to FMJ to decide what to feed it. We don't explicitly specify it anywhere.

Boris

···

On 11/03/15 15:51, Bruno Konik wrote:

Hi Boris,

You say:

"So little-endian files, such as the ones produced by libjitsi/jitsi
should be valid, as long as the RIFF tag is used (and it is)."

By this, should I understand that libjitsi/Jitsi produce always
little-endian files? Where is it set in the code? What prevents
libjitsi/Jitsi from writing big endian files?