DVI/RTP packet decode HELP

Status
This thread has been Locked and is not open to further replies. Please start a New Thread if you're having a similar issue. View our Welcome Guide to learn how to use this site.

cs02lk1

Thread Starter
Joined
Jun 8, 2007
Messages
4
Hi,

I need to stream audio and/or video to a PDA device. There is a trick here which is:
The PDA must receive the stream from a multicast address. For this I have implemented a Bridge application which joins the multicast group on behalf of the PDA and receives the Multicast RTP packets (which are sent from JMStudio) and Unicasts them to the PDA.(HP iPAQ) I had no problem implementing this. The streaming is done using JMStudio player which encodes the streaming audio data into a number of encodings (DVI/RTP in my case). I choose DVI/RTP and stream a .wav audio file.
Now I have to accept the packets and play the stream on the PDA.
The j2me application receives all the RTP packets successfully and I can extract usefull information from the packets such as: Timestamp, sequence number, payload type. The payload type is 5 which means it is a DVI4 encoding.
I use the following method to decode the samples:

public int decode(Object state, byte[] input, int inp, int len, short[] output, int outp) {
int sign;
int delta;
int vpdiff;
//int valprev = audio.Convert.byte2short(input, inp);

//int index = input[inp + 2];
int valprev=0,index=0;
int inputbuffer = 0;
int bufferstep = 0;
////////////////////////////////////
valprev = input[0] <<8;
valprev |= input[1] &0xff;

index = input[2] &0xff;
//////////////////////////////////////////

if ( index < 0 ) index = 0;
else if ( index > 88 ) index = 88;

int step = stepsizeTable[index];

inp += 4;

len = (len - 4) * 2;

int count = len;
while(count-- > 0) {

if ( 0 == bufferstep ) {
inputbuffer = input[inp++];
delta = (inputbuffer >> 4) & 0xf;
bufferstep = 1;
} else {
delta = inputbuffer & 0xf;
bufferstep = 0;
}

index += indexTable[delta];
if ( index < 0 ) index = 0;
else if ( index > 88 ) index = 88;

sign = delta & 8;
delta = delta & 7;

vpdiff = step >> 1;
if ( (delta & 4) == 4 ) vpdiff += (step << 2);
if ( (delta & 2) == 2 ) vpdiff += (step << 1);
if ( (delta & 1) == 1 ) vpdiff += step;
vpdiff >>= 2;

if ( 0 != sign )
valprev -= vpdiff;
else
valprev += vpdiff;

if ( valprev > 32767 )
valprev = 32767;
else if ( valprev < -32768 )
valprev = -32768;

step = stepsizeTable[index];
output[outp++] = (short) valprev;
}

((AdpcmState)state).valprev = valprev;
((AdpcmState)state).index = index;
return len;
}

which stores the result into a short[] array.

I then convert this short[] array into a byte[] array with the following way:

s is the short[] array
adp is the byte array

for(int g=0,k=0;g<s.length;g++,k=k+2){
audio.Convert.short2byte(s[g],adp,k);
}

public static void short2byte(short ival, byte b[], int offset) {
int i;
int bits = 16;

for(i = 0; i >< 2; i++) {
bits -= 8;
b[offset + i] = (byte) ((ival >> bits) & 0xff);
}
}

The final result is loaded to the player as follows:

ByteArrayInputStream input1 = new ByteArrayInputStream(adp);
player = Manager.createPlayer(input1, "audio/x-wav");//create new player
player.addPlayerListener(this);
player.prefetch();
player.realize();

player.start();

The player begins to play but I only get horrible sounds instead of the original wave file

The player now initializes ok without any problem but I can only hear a meesed up sound rather than the original. So now I strongly believe that the problem is in the decoding of the samples of the DVI/RTP codec.


Any Help apreciated

Thanks
 
Status
This thread has been Locked and is not open to further replies. Please start a New Thread if you're having a similar issue. View our Welcome Guide to learn how to use this site.

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

As Seen On
As Seen On...

Welcome to Tech Support Guy!

Are you looking for the solution to your computer problem? Join our site today to ask your question. This site is completely free -- paid for by advertisers and donations.

If you're not already familiar with forums, watch our Welcome Guide to get started.

Join over 807,865 other people just like you!

Latest posts

Staff online

Top