JeffreyWan / RtspClient

A simple RTSP Client implementation using Java NIO

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

RtspClient

A simple RTSP Client implementation using Java NIO

The rtsp-client is a Java NIO implementation of a RTSP client. At present it only supports player clients but a future release will add publishing clients. The API is extensible so customization is possible.

Example;

RtspClient client = new RtspClient();
RtspPlayer player = new RtspPlayer(client, new MediaConsumer() {

   private Map<Integer,Consumer<ByteBuffer>> channels = new HashMap<>();

   @Override
   public MediaDescription[] select(SessionDescription sdp)
   {
      return sdp.getMediaDescriptions();
   }

   @Override
   public void createChannel(MediaChannel channel)
   {
      final MediaType type = channel.getType();
      Range<Integer> range = channel.getChannels();
      channels.put(range.getLower(), new Consumer<ByteBuffer>() {
         long start = System.nanoTime();
         @Override public void apply(ByteBuffer data) {
            long millis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start);
            int seq = (int) (data.getShort(2) & 0xffff);
            long ts = (long) (data.getInt(4) & 0xffffffff);
            System.out.println(String.format("%s: %010d {seq=%05d, ts=%d, size=%04d}", type.name(), millis, seq, ts, data.remaining()));
         }
      });
      channels.put(range.getUpper(), new Consumer<ByteBuffer>() {
         @Override
         public void apply(ByteBuffer byteBuffer) {
            System.out.println(String.format("%s - RTP Sender Report Received", type.name()));
         }
      });
   }

   @Override
   public void destroyChannels()
   {
      channels.clear();
   }

   @Override
   public void consume(int channelId, ByteBuffer data)
   {
      Consumer<ByteBuffer> handler = channels.get(channelId);
      if(handler == null)  System.out.println(String.format("Received packet on unknown channel %d", channelId));
      else handler.apply(data);
   }

   @Override
   public void handle(Throwable t)
   {
      t.printStackTrace();
   }


});

player.setReadTimeout(5000);
player.start(URI.create("rtsp://stream.manheim.com:999/AVAIL.sdp"));
assertEquals(RtspState.Activating, player.getState());
client.await(3, TimeUnit.SECONDS);
assertEquals(RtspState.Active, player.getState());
player.pause();
assertEquals(RtspState.Pausing, player.getState());
client.await(3, TimeUnit.SECONDS);
assertEquals(RtspState.Paused, player.getState());
player.play();
assertEquals(RtspState.Activating, player.getState());
client.await(3, TimeUnit.SECONDS);
assertEquals(RtspState.Active, player.getState());
player.stop();
assertEquals(RtspState.Stopping, player.getState());
client.await();
assertEquals(RtspState.Stopped, player.getState());

About

A simple RTSP Client implementation using Java NIO

License:GNU General Public License v2.0


Languages

Language:Java 100.0%