我正在尝试用Java编写RTP服务器,我正在使用Xuggler解码mp3文件。
解码部分如下所示:
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()",因为等待需要非常精确
与在while
循环中工作不同,您可以使用javax.Swing.Timer
对象来重复调用该对象,并且可以指定延迟。您必须创建一个Timer(int delayInMilliseconds, ActionListener l)
并实现一个ActionListener
对象来完成实际的工作。它不会精确到微秒级,但至少可以根据需要指定正确的延迟。