Hi.

In a video chatting application , how can i provide user with the feature of adding friends and showing the list of online friends.

Also how can i capture audio and video and transmitt(sender client 1) and recieve (reciever client 2) using jmf and rtp . I have studied jmf but not understood how to do this ,

There is no good book with me which can guide me for this application.

I have searched google for soo many weeks but got nothing sufficient useful.

Please help . i have to submitt my major project in 45 days.

Thanks and advance

Recommended Answers

All 2 Replies

may this help you out?:
http://stackoverflow.com/questions/7295569/java-chat-server-see-online-accounts

I have to submitt my major project in 45 days.

wow, that is a lot of time. My professors just give me a few hours to a week to solve any project (major or not).

You have posted quite a lot about a video chat. By any chance do you have any code that you have attempted so we can help you with YOUR logics?

may this help you out?:
http://stackoverflow.com/questions/7295569/java-chat-server-see-online-accounts

Thnaks for the link , it is helpful but not a lot because i already know about making text based chat application , the problem with me is to make video+audio based chat application ,
For start i my code for capturing video from webcam and audio from mic is not working just because my application is unable to detect the hardware devices ( webcam and mic of laptop).

I

package JMF;

import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.media.*;
import javax.media.format.*;
import javax.media.protocol.DataSource;

public class CaptureDeviceDialog extends Dialog implements ActionListener, ItemListener {

    boolean configurationChanged = false;

    Vector devices;
    Vector audioDevices;
    Vector videoDevices;

    Vector audioFormats;
    Vector videoFormats;

    Choice audioDeviceCombo;
    Choice videoDeviceCombo;
    Choice audioFormatCombo;
    Choice videoFormatCombo;

    public CaptureDeviceDialog(Frame parent, String title, boolean mode) {
      super(parent, title, mode);
      init();
    }

    private void init() {
      setSize(450, 180);
      Panel p = new Panel();
      p.setLayout(null);

  Label l1 = new Label("Audio Device(s)");
  Label l2 = new Label("Video Device(s)");
  Label l3 = new Label("Audio Format(s)");
  Label l4 = new Label("Video Format(s)");

  audioDeviceCombo = new Choice();
  videoDeviceCombo = new Choice();
  audioFormatCombo = new Choice();
  videoFormatCombo = new Choice();

  Button OKbutton = new Button("OK");
  Button cancelButton = new Button("Cancel");


  p.add(l1);
  l1.setBounds(5, 5, 100, 20);

  p.add(audioDeviceCombo);
  audioDeviceCombo.setBounds(115, 5, 300, 20);

  p.add(l3);
  l3.setBounds(5, 30, 100,20);

  p.add(audioFormatCombo);
  audioFormatCombo.setBounds(115, 30, 300,20);

  p.add(l2);
  l2.setBounds(5, 55, 100, 20);

  p.add(videoDeviceCombo);
  videoDeviceCombo.setBounds(115, 55, 300, 20);

  p.add(l4);
  l4.setBounds(5, 80, 100, 20);

  p.add(videoFormatCombo);
  videoFormatCombo.setBounds(115, 80, 300, 20);

  p.add(OKbutton);
  OKbutton.setBounds(280, 115, 60, 25);

  p.add(cancelButton);
  cancelButton.setBounds(355, 115, 60, 25);

  add(p, "Center");
  audioDeviceCombo.addItemListener(this);
  videoDeviceCombo.addItemListener(this);
  OKbutton.addActionListener(this);
  cancelButton.addActionListener(this);

  //get all the capture devices
  devices = CaptureDeviceManager.getDeviceList ( new YUVFormat() );
  CaptureDeviceInfo cdi;
  if (devices!=null && devices.size()>0) {
    int deviceCount = devices.size();
    audioDevices = new Vector();
    videoDevices = new Vector();

    Format[] formats;
    for ( int i = 0;  i < deviceCount;  i++ ) {
      cdi = (CaptureDeviceInfo) devices.elementAt ( i );
      formats = cdi.getFormats();
      for ( int j=0;  j<formats.length; j++ ) {
        if ( formats[j] instanceof AudioFormat ) {
          audioDevices.addElement(cdi);
          break;
        }
        else if (formats[j] instanceof VideoFormat ) {
          videoDevices.addElement(cdi);
          break;
        }
      }
    }

    //populate the choices for audio
    for (int i=0; i<audioDevices.size(); i++) {
      cdi  = (CaptureDeviceInfo) audioDevices.elementAt(i);
      audioDeviceCombo.addItem(cdi.getName());
    }

    //populate the choices for video
    for (int i=0; i<videoDevices.size(); i++) {
      cdi  = (CaptureDeviceInfo) videoDevices.elementAt(i);
      videoDeviceCombo.addItem(cdi.getName());
    }

    displayAudioFormats();
    displayVideoFormats();

  } // end if devices!=null && devices.size>0
  else {
    //no devices found or something bad happened.
  }
}

void displayAudioFormats() {
  //get audio formats of the selected audio device and repopulate the audio format combo
  CaptureDeviceInfo cdi;
  audioFormatCombo.removeAll();

  int i = audioDeviceCombo.getSelectedIndex();
  //i = -1 --> no selected index

  if (i!=-1) {
    cdi = (CaptureDeviceInfo) audioDevices.elementAt(i);
    if (cdi!=null) {
      Format[] formats = cdi.getFormats();
      audioFormats = new Vector();
      for (int j=0; j<formats.length; j++) {
        audioFormatCombo.add(formats[j].toString());
        audioFormats.addElement(formats[j]);
      }
    }
  }
}

void displayVideoFormats() {
  //get audio formats of the selected audio device and repopulate the audio format combo
  CaptureDeviceInfo cdi;
  videoFormatCombo.removeAll();

  int i = videoDeviceCombo.getSelectedIndex();
  //i = -1 --> no selected index

  if (i!=-1) {
    cdi = (CaptureDeviceInfo) videoDevices.elementAt(i);
    if (cdi!=null) {
      Format[] formats = cdi.getFormats();
      videoFormats = new Vector();
      for (int j=0; j<formats.length; j++) {
        videoFormatCombo.add(formats[j].toString());
        videoFormats.addElement(formats[j]);
      }
    }
  }
}


public CaptureDeviceInfo getVideoDevice() {
  CaptureDeviceInfo cdi = null;
  if (videoDeviceCombo!=null) {
    int i = videoDeviceCombo.getSelectedIndex();
    cdi = (CaptureDeviceInfo) videoDevices.elementAt(i);
    System.out.println("videoDeviceCombo!=null");
    if(videoDevices.elementAt(i)!=null)
      System.out.println("element at videoDeviceCombo!=null");
  }
  return cdi;
}

public CaptureDeviceInfo getAudioDevice() {
  CaptureDeviceInfo cdi = null;
  //System.out.println("audioDeviceCombo!=null");
  if (audioDeviceCombo!=null) {
    int i = audioDeviceCombo.getSelectedIndex();
    cdi = (CaptureDeviceInfo) audioDevices.elementAt(i);
  if(audioDevices.elementAt(i)!=null)
    System.out.println("eleme");

  }
  return cdi;
}


public Format getAudioFormat() {
  Format format = null;
  if (audioFormatCombo!=null) {
    int i = audioFormatCombo.getSelectedIndex();
    format = (Format) audioFormats.elementAt(i);
  }
  return format;
}

public Format getVideoFormat() {
  Format format = null;
  if (videoFormatCombo!=null) {
    int i = videoFormatCombo.getSelectedIndex();
    format = (Format) videoFormats.elementAt(i);
  }
  return format;
}

public boolean hasConfigurationChanged() {
  return configurationChanged;
}

public void actionPerformed(ActionEvent ae) {
  String command = ae.getActionCommand().toString();
  if (command.equals("OK")) {
    configurationChanged = true;
  }
  dispose();
}public void itemStateChanged(ItemEvent ie) {
  System.out.println(ie.getSource().toString());
  if (ie.getSource().equals(audioDeviceCombo))
    displayAudioFormats();
  else
    displayVideoFormats();

}
}








package JMF;

import java.awt.*;
import java.awt.event.*;
import java.io.*;

import javax.media.*;
import javax.media.format.*;
import javax.media.protocol.*;

import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.media.*;
import javax.media.format.*;
import javax.media.protocol.DataSource;


public class JMF extends Frame implements ActionListener, ItemListener, WindowListener,
  ControllerListener {

  CaptureDeviceInfo audioCDI = null;
  CaptureDeviceInfo videoCDI = null;

  String audioDeviceName = null;
  String videoDeviceName = null;

  Player videoPlayer;
  Player audioPlayer;

  Format videoFormat;
  Format audioFormat;

  Player dualPlayer;  //for merging audio and video data sources

  DataSource dataSource; //of the capture devices

  public JMF(String title) {
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent we) {
        dispose();
      }
    });

    MenuBar mb = new MenuBar();
    setMenuBar(mb);
    Menu menuConfigure = new Menu("Configure");
    mb.add(menuConfigure);

    Menu menuAction = new Menu("Action");
    mb.add(menuAction);

    /* menu items for Configure */
    MenuItem menuItemSetting = new MenuItem("Capture Device");
    menuItemSetting.addActionListener(this);
    menuConfigure.add(menuItemSetting);

    /* menu items for Action */

    MenuItem a1 = new MenuItem("Capture");
    a1.addActionListener(this);
    menuAction.add(a1);
    MenuItem a2 = new MenuItem("Play");
    a2.addActionListener(this);
    menuAction.add(a2);
    MenuItem a3 = new MenuItem("Stop");
    a3.addActionListener(this);
    menuAction.add(a3);

  }

  public void actionPerformed(ActionEvent ae) {
    String command = ae.getActionCommand().toString();
    if (command.equals("Capture Device")) {
      registerDevices();
    }
    else if (command.equals("Play")) {
      play();
    }
    else if (command.equals("Capture")) {
      capture();
    }
    else if (command.equals("Stop")) {
      stop();
    }
  }

  void registerDevices() {
    CaptureDeviceDialog cdDialog = new 
      CaptureDeviceDialog(this, "Capture Device", true);
    cdDialog.show();
    if (!cdDialog.hasConfigurationChanged())
      return;

    //configuration has changed, update variables.
    audioCDI = cdDialog.getAudioDevice();
    if (audioCDI!=null) {
      audioDeviceName = audioCDI.getName();
      System.out.println("Audio Device Name: " + audioDeviceName);
    }

    videoCDI = cdDialog.getVideoDevice();
    if (videoCDI!=null) {
      videoDeviceName = videoCDI.getName();
      System.out.println("Video Device Name: " + videoDeviceName);
    }

    //Get formats selected, to be used for creating DataSource
    videoFormat = cdDialog.getVideoFormat();
    audioFormat = cdDialog.getAudioFormat();
  }

  void capture() {
    if (audioCDI==null && videoCDI==null)
      registerDevices();

    try {
      if (!(audioCDI==null && videoCDI==null)) {

     /* This works, but now we end up having 2 players

        videoPlayer = Manager.createPlayer(videoCDI.getLocator());
        audioPlayer = Manager.createPlayer(audioCDI.getLocator());
        videoPlayer.addControllerListener(this);
        videoPlayer.start();
        audioPlayer.start();
     */
        DataSource[] dataSources = new DataSource[2];
        System.out.println("Creating data sources.");

        dataSources[0] = Manager.createDataSource(new MediaLocator("dsound://"));
        dataSources[1] = Manager.createDataSource(new MediaLocator("vfw://0"));
        DataSource ds = Manager.createMergingDataSource(dataSources);
        dualPlayer = Manager.createPlayer(ds);
        dualPlayer.addControllerListener(this);
        dualPlayer.start();
      }
      else
        System.out.println("CDI not found.");
    }
    catch (Exception e) {
      System.out.println(e.toString());
    }
  }

  void play() {
    try {
      FileDialog fd = new FileDialog(this, "Select File", FileDialog.LOAD);
      fd.show();
      String filename = fd.getDirectory() + fd.getFile();
      dualPlayer = Manager.createPlayer(new MediaLocator("file:///" + filename));

      System.out.println("Adding controller listener");
      dualPlayer.addControllerListener(this);

      System.out.println("Starting player ...");
      dualPlayer.start();
    }
    catch (Exception e) {
      System.out.println(e.toString());
    }
  }

  void stop() {
    if (dualPlayer!=null) {
      dualPlayer.stop();
      dualPlayer.deallocate();
    }
  }

public synchronized void controllerUpdate(ControllerEvent event) {
    System.out.println(event.toString());

    if (event instanceof RealizeCompleteEvent) {
      Component comp;

      System.out.println("Adding visual component");
      if ((comp = dualPlayer.getVisualComponent()) != null)
        add ("Center", comp);
      System.out.println("Adding control panel");
      if ((comp = dualPlayer.getControlPanelComponent()) != null)
        add("South", comp);
      validate();
    }
  }

  public void itemStateChanged(ItemEvent ie) {}
  public void windowActivated(WindowEvent we) {}
  public void windowClosed(WindowEvent we) {}
  public void windowClosing(WindowEvent we) {}
  public void windowDeactivated(WindowEvent we) {}
  public void windowDeiconified(WindowEvent we) {}
  public void windowIconified(WindowEvent we) {}
  public void windowOpened(WindowEvent we) {}



  public static void main(String[] args) {
    JMF myFrame = new JMF("Java Media Framework Project");
    myFrame.show();
    myFrame.setSize(300, 300);
  }

}

When i run JMF.java the application is unable to detect the audio and video devices and the list of devices are empty

I have one more doubt ,
Can i write a servlet and use appltet with servlet for display frame of video for client and for capturing video and audio.
As i am thinking to write servlet for user authentication like things.

Please help

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.