Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Live video streaming between Server and client - Using Java

this is part of a project I am working on. I have two desktop java application , one runs on the server (which has real IP), and the other is the client. I just want to stream a live video from a webcam connected to the server application , and play it on the client application. I want to do this streaming from more than one camera.

I have been looking searching for days between Xuggler, JMF, Red5, VLCj. I just can't figure from where I should start as I am new to dealing with media in programming.

Any ideas from where I should start with this ?

Thanks in advance

like image 341
Mariam Avatar asked Dec 03 '11 14:12

Mariam


People also ask

How do you stream a video on a server?

HTTP STREAMING: Video is stored in an HTTP server as a simple ordinary file with a unique URL. Client establishes TCP connection with server and issues a HTTP GET request for that URL. Server sends the video file along with an HTTP RESPONSE. Now the client buffer grabs the video and then displayed on user screen.

How is video stored in an HTTP Server?

HTTP STREAMING: Video is stored in an HTTP server as a simple ordinary file with a unique URL. Client establishes TCP connection with server and issues a HTTP GET request for that URL.

Can I use vlcj to live stream from my webcam?

If you can live stream your webcam with VLC, then you can do the same with VLCJ. Refer VLCJ wiki page for details on how to use it. They provided many examples in the wiki. Here is an example of Http Streaming using VLCJ. Copied from VLCJ examples.

How does the video streaming work?

Users send request to those servers. Users may watch the video from the start till the end, and may pause it anytime, do a forward or reverse skip, or stop the video whenever they want to do so. There are 3 video streaming categories:


1 Answers

I suggest you to go with VLCJ, because in addition to live video streaming, you get all features of VLC media player available to your application. Also, it is available for Linux,Windows, and Mac. If you can live stream your webcam with VLC, then you can do the same with VLCJ.

Refer VLCJ wiki page for details on how to use it. They provided many examples in the wiki. Here is an example of Http Streaming using VLCJ. Copied from VLCJ examples.

/*
 * This file is part of VLCJ.
 *
 * VLCJ is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * VLCJ is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with VLCJ.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * Copyright 2009, 2010, 2011 Caprica Software Limited.
 */

package uk.co.caprica.vlcj.test.streaming;

import uk.co.caprica.vlcj.player.MediaPlayerFactory;
import uk.co.caprica.vlcj.player.headless.HeadlessMediaPlayer;
import uk.co.caprica.vlcj.test.VlcjTest;

/**
 * An example of how to stream a media file over HTTP.
 * <p>
 * The client specifies an MRL of <code>http://127.0.0.1:5555</code>
 */
public class StreamHttp extends VlcjTest {

  public static void main(String[] args) throws Exception {
    if(args.length != 1) {
      System.out.println("Specify a single MRL to stream");
      System.exit(1);
    }

    String media = args[0];
    String options = formatHttpStream("127.0.0.1", 5555);

    System.out.println("Streaming '" + media + "' to '" + options + "'");

    MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory(args);
    HeadlessMediaPlayer mediaPlayer = mediaPlayerFactory.newHeadlessMediaPlayer();
    mediaPlayer.playMedia(media, options);

    // Don't exit
    Thread.currentThread().join();
  }

  private static String formatHttpStream(String serverAddress, int serverPort) {
    StringBuilder sb = new StringBuilder(60);
    sb.append(":sout=#duplicate{dst=std{access=http,mux=ts,");
    sb.append("dst=");
    sb.append(serverAddress);
    sb.append(':');
    sb.append(serverPort);
    sb.append("}}");
    return sb.toString();
  }
}
like image 151
Jomoos Avatar answered Sep 20 '22 13:09

Jomoos