Hi all,
I am evaluating the quality of the speech during a VoIP call between two
PJSUA applications running on two different windows XP hosts.
For this purpose I managed PJSUA with a script so I was able to perform
automatically about 1500 calls.
During a call each peer entity plays a reference speech sample that is
recorded on the other side of the call. Then a speech quality evaluation is
performed using a PESQ tool.
The two machines hosting pjsua application are directly connected trough a
Ethernet switch in order to minimize the network impairment.
The codec used during the call is G.711 and the expected PESQ score for such
codec is 4.40.
The results of my tests highlight the speech quality is instable. That is,
often the PESQ score is the expected one but sometimes (about 10% of total
measures) the score is significatively less (3.50).
Did anyone perform such type of tests or have experience of such type of
speech quality problems?
Best Regards
Massimiliano Montevecchi
Hi.
In my code I am tying to reinitialize media transport before each call
session in order to increment rtp port, I do something like this:
pjsua_transport_config transport_cfg;
pjsua_transport_config_default(&transport_cfg);
pjsua_media_transports_create(&transport_cfg);
after few calls application is crushes on this code segment:
pjsua_media.c
/* Delete existing media transports */
for (i=0; i<pjsua_var.ua_cfg.max_calls; ++i) {
if (pjsua_var.calls[i].med_tp != NULL) {
pjmedia_transport_close(pjsua_var.calls[i].med_tp);
pjsua_var.calls[i].med_tp = NULL;
}
}
I put this code in pjsua sample and I get same behavior. I'm using now
pjproject 1.0-rc2, with pjproject 0.8 it worked fine.
Do I do something wrong or there is a bug in pjproject?
Thanks in advance.
On Mon, Sep 22, 2008 at 2:15 PM, Massimiliano Montevecchi <
massimiliano.montevecchi@elsagdatamat.com> wrote:
Hi all,
I am evaluating the quality of the speech during a VoIP call between two
PJSUA applications running on two different windows XP hosts.
For this purpose I managed PJSUA with a script so I was able to perform
automatically about 1500 calls.
During a call each peer entity plays a reference speech sample that is
recorded on the other side of the call. Then a speech quality evaluation is
performed using a PESQ tool.
The two machines hosting pjsua application are directly connected trough a
Ethernet switch in order to minimize the network impairment.
The codec used during the call is G.711 and the expected PESQ score for
such codec is 4.40.
The results of my tests highlight the speech quality is instable. That is,
often the PESQ score is the expected one but sometimes (about 10% of total
measures) the score is significatively less (3.50).
Did anyone perform such type of tests or have experience of such type of
speech quality problems?
Thanks for doing the tests and sharing the results. We also have PESQ tests
as part of the automated unit tests framework (Python based, on
pjsip-apps/src/test-pjsua directory), and got the report about intermittent
audio degradation too.
Our suspicion now lies with the jitter buffer. During the initial call
establishment, perhaps due to high activity in the signaling thread, or the
difference in the call establishment time between caller an callee, some RTP
packets will be queued in the socket buffer and once the media is started
these RTP packets will be stored in the jbuf in a burst.
Often this burst exceeds the jbuf maximum size (it was 340ms), hence it will
be discarded. At other times, some frames will also be discarded by the jbuf
when it tries to optimize the latency. These discard operations will cause
click noise in the playback, causing the PESQ score to degrade.
That's probably the cause of your results.
We have a ticket for this (http://trac.pjsip.org/repos/ticket/638) and
Nanang has a pending commit for this ticket, hopefully the situation will
improve by then. It will be good if you could retest again with the new
changes then, to get a second opinion on this.
How long did you set the call duration to? I suspect we will get better PESQ
score if you run the call to longer duration, after the media is stabilized
after the initial setup activity.
Cheers
Benny
Best Regards
Massimiliano Montevecchi
Hi, again.
I trying to use alternative media stack with pjsip, I wonder I there is
a simple way to do it. How I can deactivate pjmedia and reattach new
stack without messing too much with pjsip code. I'm sorry if my question
is too general, but maybe there is something I need to know before
entering too deep into the code.
Thanks.
Hi,
Here is the patch (candidate) to be applied for ticket #638, we
haven't done enough tests on this actually. So it would be great if
you could help testing this patch and drop some feedbacks.
Thanks,
nanang
On Mon, Sep 22, 2008 at 9:56 PM, Benny Prijono bennylp@pjsip.org wrote:
On Mon, Sep 22, 2008 at 2:15 PM, Massimiliano Montevecchi
massimiliano.montevecchi@elsagdatamat.com wrote:
Hi all,
I am evaluating the quality of the speech during a VoIP call between two
PJSUA applications running on two different windows XP hosts.
For this purpose I managed PJSUA with a script so I was able to perform
automatically about 1500 calls.
During a call each peer entity plays a reference speech sample that is
recorded on the other side of the call. Then a speech quality evaluation is
performed using a PESQ tool.
The two machines hosting pjsua application are directly connected trough a
Ethernet switch in order to minimize the network impairment.
The codec used during the call is G.711 and the expected PESQ score for
such codec is 4.40.
The results of my tests highlight the speech quality is instable. That is,
often the PESQ score is the expected one but sometimes (about 10% of total
measures) the score is significatively less (3.50).
Did anyone perform such type of tests or have experience of such type of
speech quality problems?
Thanks for doing the tests and sharing the results. We also have PESQ tests
as part of the automated unit tests framework (Python based, on
pjsip-apps/src/test-pjsua directory), and got the report about intermittent
audio degradation too.
Our suspicion now lies with the jitter buffer. During the initial call
establishment, perhaps due to high activity in the signaling thread, or the
difference in the call establishment time between caller an callee, some RTP
packets will be queued in the socket buffer and once the media is started
these RTP packets will be stored in the jbuf in a burst.
Often this burst exceeds the jbuf maximum size (it was 340ms), hence it will
be discarded. At other times, some frames will also be discarded by the jbuf
when it tries to optimize the latency. These discard operations will cause
click noise in the playback, causing the PESQ score to degrade.
That's probably the cause of your results.
We have a ticket for this (http://trac.pjsip.org/repos/ticket/638) and
Nanang has a pending commit for this ticket, hopefully the situation will
improve by then. It will be good if you could retest again with the new
changes then, to get a second opinion on this.
How long did you set the call duration to? I suspect we will get better PESQ
score if you run the call to longer duration, after the media is stabilized
after the initial setup activity.
Cheers
Benny
Best Regards
Massimiliano Montevecchi
Visit our blog: http://blog.pjsip.org
pjsip mailing list
pjsip@lists.pjsip.org
http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
Hi,
Please see http://trac.pjsip.org/repos/wiki/3rd_Party_Media.
Regards,
nanang
On Mon, Sep 22, 2008 at 10:25 PM, Ilya Kalinin ilyak@skuku.com wrote:
Hi, again.
I trying to use alternative media stack with pjsip, I wonder I there is a
simple way to do it. How I can deactivate pjmedia and reattach new stack
without messing too much with pjsip code. I'm sorry if my question is too
general, but maybe there is something I need to know before entering too
deep into the code.
Thanks.
Visit our blog: http://blog.pjsip.org
pjsip mailing list
pjsip@lists.pjsip.org
http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
Hi,
Not sure if this is a bug, could you try the attached patch and please
report back if the problem disappears.
Thanks,
nanang
On Mon, Sep 22, 2008 at 9:39 PM, Ilya Kalinin ilyak@skuku.com wrote:
Hi.
In my code I am tying to reinitialize media transport before each call
session in order to increment rtp port, I do something like this:
pjsua_transport_config transport_cfg;
pjsua_transport_config_default(&transport_cfg);
pjsua_media_transports_create(&transport_cfg);
after few calls application is crushes on this code segment:
pjsua_media.c
/* Delete existing media transports */
for (i=0; i<pjsua_var.ua_cfg.max_calls; ++i) {
if (pjsua_var.calls[i].med_tp != NULL) {
pjmedia_transport_close(pjsua_var.calls[i].med_tp);
pjsua_var.calls[i].med_tp = NULL;
}
}
I put this code in pjsua sample and I get same behavior. I'm using now
pjproject 1.0-rc2, with pjproject 0.8 it worked fine.
Do I do something wrong or there is a bug in pjproject?
Thanks in advance.
Visit our blog: http://blog.pjsip.org
pjsip mailing list
pjsip@lists.pjsip.org
http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
Hi
Just applied the patch and done some tests. Looks like the problem
disappeared.
Thanks.
-----Original Message-----
From: pjsip-bounces@lists.pjsip.org
[mailto:pjsip-bounces@lists.pjsip.org] On Behalf Of Nanang Izzuddin
Sent: Monday, September 22, 2008 10:25 PM
To: pjsip list
Subject: Re: [pjsip] reinitialization of media transport problem
Hi,
Not sure if this is a bug, could you try the attached patch and please
report back if the problem disappears.
Thanks,
nanang
On Mon, Sep 22, 2008 at 9:39 PM, Ilya Kalinin ilyak@skuku.com wrote:
Hi.
In my code I am tying to reinitialize media transport before each call
session in order to increment rtp port, I do something like this:
pjsua_transport_config transport_cfg;
pjsua_transport_config_default(&transport_cfg);
pjsua_media_transports_create(&transport_cfg);
after few calls application is crushes on this code segment:
pjsua_media.c
/* Delete existing media transports */
for (i=0; i<pjsua_var.ua_cfg.max_calls; ++i) {
if (pjsua_var.calls[i].med_tp != NULL) {
pjmedia_transport_close(pjsua_var.calls[i].med_tp);
pjsua_var.calls[i].med_tp = NULL;
}
}
I put this code in pjsua sample and I get same behavior. I'm using now
pjproject 1.0-rc2, with pjproject 0.8 it worked fine.
Do I do something wrong or there is a bug in pjproject?
Thanks in advance.
Visit our blog: http://blog.pjsip.org
pjsip mailing list
pjsip@lists.pjsip.org
http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org