1

我正在尝试用 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()”以外的“下一帧”,因为等待需要非常精确。

4

1 回答 1

0

除了在while循环中工作,您还可以使用一个javax.Swing.Timer对象来执行此操作,该对象以您可以指定的延迟重复调用。您必须创建一个Timer(int delayInMilliseconds, ActionListener l)并实现一个ActionListener可以完成实际工作的对象。它不会精确到微秒,但至少您可以根据需要指定正确的延迟。

于 2014-01-16T10:20:58.553 回答