Re: Decoding G.729 using Ethereal, rtpdump and VoiceAge decoder
Alejandro Vaquero <[email protected]> Mon, 24 Jul 2006 18:40:34 -0700
| Newsgroups | gmane.network.ethereal.devel |
|---|---|
| Message-ID | <[email protected]> |
Looks you are close because you get some voice patterns. If the RTP
packetization period is 20ms, then there are two 10byte samples of G729
encoded data per RTP packet, so make sure when you run the "rtpdump"
the samples are in the correct order when generating the bitstream.
Gabriel M. wrote:
Hi,
I am trying to decode a
VoIP conversation using G.729
encoding. I have read older messages on this list (and others) but I am
still
not able to dump a listenable .au file.
The steps that I made so
far:
-
capture
the traffic using Ethereal
and dumping the RTP data (Statistics -> RTP -> Show all streams
->
SaveAs).
-
Use
rtpdump ( http://www.cs.columbia.edu/IRT/software/rtptools/ )
to dump only the audio payload (“rtpdump -F payload -f in.rtp -o
out.rtp”)
-
Use
self-made code (see the code at
the end of the e-mail) to convert the rtpdump into the bitstream
expected by
the decoder
-
Decode the
bitstream using the
VoiceAge decoder (decoder out.rtp test2.au)
-
Play the
test2.au using GoldWave, (with
all possible combinations between 16bit signed/unsigned 8000Hz)
Unfortunately all I can
hear is some weird sound ( I can see
voice patterns in GoldWave, but the sound is metalic, almost
alien-like). Am I
doing something wrong ?
References:
http://www.ethereal.com/lists/ethereal-dev/200505/msg00399.html
http://www.dsprelated.com/groups/speechcoding/show/666.php
//rtp_bitstream.c
[code]
#include <stdio.h>
int main(int argc, char
**argv)
{
char
c;
FILE
*f=fopen("in.rtp", "r");
FILE
*fileout = fopen("out3.rtp","w");
long
lSize;
char
* buffer, * out;
char
qbyte, q;
int
i, j =0, k;
fseek (f , 0 ,
SEEK_END);
lSize = ftell (f);
rewind (f);
buffer
= (char*) malloc (lSize);
out
= (char*) malloc (lSize * 16);
fread
(buffer,1,lSize,f);
for
(i = 0; i<lSize; i++)
{
qbyte
= buffer[i];
for
(k=0;k<8;k++)
{
q
= qbyte & 1;
out[j]
= 0x00;
j++;
if
(q == 0)
out[j]
= 0x71;
else
out[j]
= 0x81;
j++;
qbyte
>>= 1;
}
}
fwrite
(out , 1 , lSize * 16, fileout);
return 0;
}
[/code]
Best regards,
Gabriel.
----------
_______________________________________________
Ethereal-dev mailing list
[email protected]
http://www.ethereal.com/mailman/listinfo/ethereal-dev
_______________________________________________
Ethereal-dev mailing list
[email protected]
http://www.ethereal.com/mailman/listinfo/ethereal-dev