1. Computer problem? Tech Support Guy is completely free -- paid for by advertisers and donations. Click here to join today! If you're new to Tech Support Guy, we highly recommend that you visit our Guide for New Members.

DVI/RTP packet decode HELP

Discussion in 'Multimedia' started by cs02lk1, Jul 4, 2007.

Thread Status:
Not open for further replies.
  1. cs02lk1

    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
     
  2. EAFiedler

    EAFiedler Moderator

    Joined:
    Apr 25, 2000
    Messages:
    14,172
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 733,556 other people just like you!

Thread Status:
Not open for further replies.

Short URL to this thread: https://techguy.org/591845

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice