2013-05-24 3 views
1

Я пытаюсь написать RTP-сервер в Java, и я использую Xuggler для декодирования mp3-файлов.RTP Server в Java с Xuggler

Декодирование часть выглядит следующим образом:

while(container.readNextPacket(packet) >= 0) { 
     if(packet.getStreamIndex() == streamID) { 
      IAudioSamples samples = IAudioSamples.make(1,decoder.getChannels()); 
      decoder.decodeAudio(samples, packet, 0); 


      IAudioSamples resampled_samples = IAudioSamples.make(1,2); 
      resampler.resample(resampled_samples, samples, samples.getNumSamples()); 

      byte[] target = new byte[(int) (resampled_samples.getNumSamples() * resampled_samples.getSampleSize())]; 
      resampled_samples.get(0, target, 0, target.length); 

      timestamp+=target.length; 

      s.sendData(target); 
     }   
    } 

Моя проблема заключается в том, что буфер на стороне клиента переполнена потому, что сервер посылает многих пакетов.

Так что мой вопрос: есть ли возможность ждать «следующего кадра», кроме «Thread.sleep()», потому что ожидание должно быть очень точным.

ответ

0

Вместо работы внутри цикла while вы можете сделать это с помощью объекта javax.Swing.Timer, который вызывается повторно с задержкой, которую вы можете указать. Вы должны создать Timer(int delayInMilliseconds, ActionListener l) и реализовать объект ActionListener, который будет выполнять настоящую работу. Это не будет микросекундным, но, по крайней мере, вы можете указать правильную задержку для своих нужд.