Skip to content
Snippets Groups Projects
Commit 1fe65660 authored by Richard Alam's avatar Richard Alam
Browse files

- throw away delayed rtp packets

parent df84f122
No related branches found
No related tags found
No related merge requests found
...@@ -86,15 +86,15 @@ public class RtpStreamReceiver { ...@@ -86,15 +86,15 @@ public class RtpStreamReceiver {
try { try {
rtpSocket.receive(rtpPacket); rtpSocket.receive(rtpPacket);
packetReceivedCounter++; packetReceivedCounter++;
if (rtpPacket.getSeqNum() > lastSequenceNumber) { if (shouldHandlePacket(rtpPacket)) {
lastSequenceNumber = rtpPacket.getSeqNum(); processRtpPacket(rtpPacket);
// System.out.println(" RX RTP ts=" + rtpPacket.getTimestamp() + " length=" + rtpPacket.getPayload().length);
AudioByteData audioData = new AudioByteData(rtpPacket.getPayload());
if (listener != null) listener.onAudioDataReceived(audioData);
else log.debug("No listener for incoming audio packet");
} else { } else {
// System.out.println("SequenceNumber < lastSequence (" + rtpPacket.getSeqNum() + " < " + lastSequenceNumber + ")"); if (isFirstPacket()) {
} processRtpPacket(rtpPacket);
} else {
log.info("Corrupt packet seqNum[rtpSeqNum=" + rtpPacket.getSeqNum() + ",lastSeqNum=" + lastSequenceNumber +"][rtpTS=" + rtpPacket.getTimestamp() + ",lastTS=" + lastPacketTimestamp + "]");
}
}
} catch (IOException e) { } catch (IOException e) {
// We get this when the socket closes when the call hangs up. // We get this when the socket closes when the call hangs up.
receivePackets = false; receivePackets = false;
...@@ -104,4 +104,32 @@ public class RtpStreamReceiver { ...@@ -104,4 +104,32 @@ public class RtpStreamReceiver {
log.debug("Packet Received = " + packetReceivedCounter + "." ); log.debug("Packet Received = " + packetReceivedCounter + "." );
if (listener != null) listener.onStoppedReceiving(); if (listener != null) listener.onStoppedReceiving();
} }
private boolean isFirstPacket() {
return lastSequenceNumber == 0 && lastPacketTimestamp == 0;
}
private boolean shouldHandlePacket(RtpPacket rtpPacket) {
/** Take seq number only into account and not timestamps. Seems like the timestamp sometimes change whenever the audio changes source.
* For example, in FreeSWITCH, the audio prompt will have it's own "start" timestamp and then
* another "start" timestamp will be generated for the voice. (ralam, sept 7, 2010).
* && packetIsNotCorrupt(rtpPacket)) {
**/
/*
* Assume if the sequence number jumps by more that 100, that the sequence number is corrupt.
*/
return rtpPacket.getSeqNum() > lastSequenceNumber && rtpPacket.getSeqNum() - lastSequenceNumber < 100;
//rtpPacket.getTimestamp() > lastPacketTimestamp && rtpPacket.getTimestamp() - lastPacketTimestamp < 1000;
}
private void processRtpPacket(RtpPacket rtpPacket) {
lastSequenceNumber = rtpPacket.getSeqNum();
lastPacketTimestamp = rtpPacket.getTimestamp();
// log.info("Process packet seqNum[rtpSeqNum=" + rtpPacket.getSeqNum() + ",lastSeqNum=" + lastSequenceNumber +"][rtpTS=" + rtpPacket.getTimestamp() + ",lastTS=" + lastPacketTimestamp + "]");
// System.out.println(" RX RTP ts=" + rtpPacket.getTimestamp() + " length=" + rtpPacket.getPayload().length);
AudioByteData audioData = new AudioByteData(rtpPacket.getPayload());
if (listener != null) listener.onAudioDataReceived(audioData);
else log.debug("No listener for incoming audio packet");
}
} }
...@@ -165,7 +165,7 @@ public class SipToFlashAudioStream implements TranscodedAudioDataListener, RtpSt ...@@ -165,7 +165,7 @@ public class SipToFlashAudioStream implements TranscodedAudioDataListener, RtpSt
mBuffer.setAutoExpand(true); mBuffer.setAutoExpand(true);
mBuffer.clear(); mBuffer.clear();
mBuffer.put(fakeMetadata); mBuffer.put(fakeMetadata);
mBuffer.flip(); mBuffer.flip();
Notify notifyData = new Notify(mBuffer); Notify notifyData = new Notify(mBuffer);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment