Switch from ArrayBlockingQueues to LinkedBlockingQueues for increased throughput. Set thread priorities for the decoder and ping threads.

This commit is contained in:
Cameron Gutman 2013-11-24 19:31:50 -05:00
parent d9527a3810
commit dd82573d08
4 changed files with 17 additions and 12 deletions

View File

@ -7,7 +7,7 @@ import java.net.InetAddress;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.SocketException; import java.net.SocketException;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import com.limelight.nvstream.av.AvByteBufferDescriptor; import com.limelight.nvstream.av.AvByteBufferDescriptor;
import com.limelight.nvstream.av.AvRtpPacket; import com.limelight.nvstream.av.AvRtpPacket;
@ -23,7 +23,7 @@ public class NvAudioStream {
public static final int RTP_PORT = 48000; public static final int RTP_PORT = 48000;
public static final int RTCP_PORT = 47999; public static final int RTCP_PORT = 47999;
private ArrayBlockingQueue<AvRtpPacket> packets = new ArrayBlockingQueue<AvRtpPacket>(100); private LinkedBlockingQueue<AvRtpPacket> packets = new LinkedBlockingQueue<AvRtpPacket>(100);
private AudioTrack track; private AudioTrack track;
@ -243,6 +243,7 @@ public class NvAudioStream {
} }
}; };
threads.add(t); threads.add(t);
t.setPriority(Thread.MIN_PRIORITY);
t.setName("Audio - Ping"); t.setName("Audio - Ping");
t.start(); t.start();
} }

View File

@ -9,7 +9,7 @@ import java.net.InetSocketAddress;
import java.net.Socket; import java.net.Socket;
import java.net.SocketException; import java.net.SocketException;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import com.limelight.nvstream.av.AvByteBufferDescriptor; import com.limelight.nvstream.av.AvByteBufferDescriptor;
import com.limelight.nvstream.av.AvDecodeUnit; import com.limelight.nvstream.av.AvDecodeUnit;
@ -31,7 +31,7 @@ public class NvVideoStream {
public static final int FIRST_FRAME_TIMEOUT = 5000; public static final int FIRST_FRAME_TIMEOUT = 5000;
private ArrayBlockingQueue<AvRtpPacket> packets = new ArrayBlockingQueue<AvRtpPacket>(100); private LinkedBlockingQueue<AvRtpPacket> packets = new LinkedBlockingQueue<AvRtpPacket>(100);
private InetAddress host; private InetAddress host;
private DatagramSocket rtp; private DatagramSocket rtp;
@ -207,6 +207,7 @@ public class NvVideoStream {
}; };
threads.add(t); threads.add(t);
t.setName("Video - Decoder"); t.setName("Video - Decoder");
t.setPriority(Thread.MAX_PRIORITY);
t.start(); t.start();
} }
@ -302,6 +303,7 @@ public class NvVideoStream {
}; };
threads.add(t); threads.add(t);
t.setName("Video - Ping"); t.setName("Video - Ping");
t.setPriority(Thread.MIN_PRIORITY);
t.start(); t.start();
} }
} }

View File

@ -1,14 +1,16 @@
package com.limelight.nvstream.av.audio; package com.limelight.nvstream.av.audio;
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import com.limelight.nvstream.av.AvByteBufferDescriptor; import com.limelight.nvstream.av.AvByteBufferDescriptor;
import com.limelight.nvstream.av.AvRtpPacket; import com.limelight.nvstream.av.AvRtpPacket;
import com.limelight.nvstream.av.AvShortBufferDescriptor; import com.limelight.nvstream.av.AvShortBufferDescriptor;
public class AvAudioDepacketizer { public class AvAudioDepacketizer {
private ArrayBlockingQueue<AvShortBufferDescriptor> decodedUnits =
new ArrayBlockingQueue<AvShortBufferDescriptor>(15); private static final int DU_LIMIT = 15;
private LinkedBlockingQueue<AvShortBufferDescriptor> decodedUnits =
new LinkedBlockingQueue<AvShortBufferDescriptor>(DU_LIMIT);
// Sequencing state // Sequencing state
private short lastSequenceNumber; private short lastSequenceNumber;

View File

@ -1,7 +1,7 @@
package com.limelight.nvstream.av.video; package com.limelight.nvstream.av.video;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import com.limelight.nvstream.av.AvByteBufferDescriptor; import com.limelight.nvstream.av.AvByteBufferDescriptor;
import com.limelight.nvstream.av.AvDecodeUnit; import com.limelight.nvstream.av.AvDecodeUnit;
@ -26,8 +26,8 @@ public class AvVideoDepacketizer {
private ConnectionStatusListener controlListener; private ConnectionStatusListener controlListener;
private static final int DU_LIMIT = 30; private static final int DU_LIMIT = 15;
private ArrayBlockingQueue<AvDecodeUnit> decodedUnits = new ArrayBlockingQueue<AvDecodeUnit>(DU_LIMIT); private LinkedBlockingQueue<AvDecodeUnit> decodedUnits = new LinkedBlockingQueue<AvDecodeUnit>(DU_LIMIT);
public AvVideoDepacketizer(ConnectionStatusListener controlListener) public AvVideoDepacketizer(ConnectionStatusListener controlListener)
{ {