Video recorder and player in Java ME (complete project)
Article Metadata
Code Example
Source file: Media:VideoRecorder.zip
Tested with
SDK: NetBeans 5.5 and Mobility Pack 5.5
Article
Created: dcrocha
(08 Nov 2007)
Last edited: marcelobarrosalmeida
(21 Nov 2011)
This is a small project developed to show the capability of video recording and playing on Nokia devices using the Mobile Media API of Java ME. This project was developed with NetBeans 5.5 + Mobility Pack 5.5.
VideoRecordMIDlet.java
package example;
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class VideoRecordMIDlet extends MIDlet {
VideoCanvas canvas = null;
protected void startApp() throws MIDletStateChangeException {
canvas = new VideoCanvas(this);
Display.getDisplay(this).setCurrent(canvas);
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}
}
VideoCanvas.java
package example;
import java.io.OutputStream;
import java.util.Date;
import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
import javax.microedition.media.PlayerListener;
import javax.microedition.media.control.RecordControl;
import javax.microedition.media.control.VideoControl;
public class VideoCanvas extends Canvas implements PlayerListener, CommandListener {
private VideoRecordMIDlet midlet = null;
private Command start = new Command("Start",Command.OK,0);
private Command stop = new Command("Stop",Command.OK,1);
private Command exit = new Command("Exit",Command.BACK,0);
private Command play = new Command("Play",Command.OK,2);
private String status = "Not initialized";
private Player player = null;
private VideoControl control = null;
private RecordControl record = null;
private boolean recording = false;
private FileConnection conn = null;
private OutputStream stream = null;
private String PATH = System.getProperty("fileconn.dir.videos");
private String videoPath = null;
/**
* Constructor
*
* @param midlet
*/
public VideoCanvas(VideoRecordMIDlet midlet) {
System.out.println(PATH);
this.midlet = midlet;
addCommand(play);
addCommand(start);
addCommand(stop);
addCommand(exit);
setCommandListener(this);
}
public void commandAction(Command c, Displayable arg1) {
if(c == start) {
recording = true;
startRecording();
}
else if(c == stop) {
stop();
recording = false;
}
else if(c == play) {
recording = false;
repaint();
startPlaying();
}
else if(c == exit) {
midlet.notifyDestroyed();
}
}
/**
* Paint
*/
protected void paint(Graphics g) {
g.setColor(0,0,0);
g.fillRect(0,0,getWidth(),getHeight());
}
public void startRecording() {
videoPath = PATH + getFileName();
System.err.println(videoPath);
try {
player = Manager.createPlayer("capture://video");
player.addPlayerListener(this);
player.realize();
//setup recording
record = (RecordControl)player.getControl("RecordControl");
record.setRecordSizeLimit(300000);
conn = (FileConnection)Connector.open(videoPath,Connector.READ_WRITE);
if(!conn.exists()) conn.create();
stream = conn.openOutputStream();
record.setRecordStream(stream);
// Grab the video control and set it to the current display.
control = (VideoControl)player.getControl("VideoControl");
if (control != null) {
control.initDisplayMode(VideoControl.USE_DIRECT_VIDEO,this);
control.setDisplaySize(getWidth(),getHeight());
control.setVisible(true);
}
player.start();
record.startRecord();
}
catch(Exception e) {
Alert erro = new Alert("Erro",e.toString(),null,AlertType.ERROR);
Display.getDisplay(midlet).setCurrent(erro);
e.printStackTrace();
}
}
/**
* Start
*
*/
public void startPlaying() {
try {
player = Manager.createPlayer(videoPath);
player.addPlayerListener(this);
player.realize();
// Grab the video control and set it to the current display.
control = (VideoControl)player.getControl("VideoControl");
if (control != null) {
control.initDisplayMode(VideoControl.USE_DIRECT_VIDEO,this);
control.setDisplaySize(176,144);
control.setDisplayLocation((getWidth() - control.getDisplayWidth()) / 2,(getHeight() - control.getDisplayHeight()) / 2);
control.setVisible(true);
}
player.start();
}
catch(Exception e) {
Alert erro = new Alert("Erro",e.getMessage(),null,AlertType.ERROR);
Display.getDisplay(midlet).setCurrent(erro);
e.printStackTrace();
}
}
public void stop() {
if(player != null) {
try {
if(recording) {
record.stopRecord();
record.commit();
stream.close();
}
player.stop();
player.deallocate();
player.close();
player = null;
if(recording) {
Alert alert = new Alert("Message","Recorded in " + videoPath,null,AlertType.INFO);
Display.getDisplay(midlet).setCurrent(alert,this);
stream = null;
}
if(conn != null)
conn.close();
}
catch(Exception e) {
}
}
}
public void playerUpdate(Player p, String s, Object o) {
if(p.getState() == Player.STARTED) {
status = control.getDisplayHeight() + "=" + control.getDisplayWidth();
setTitle(status);
}
}
private String getFileName() {
Date d = new Date();
String retValue = d.getTime() + "_rec.3gp";
return retValue;
}
}
Download link: Media:VideoRecorder.zip
dcrocha 15:40, 8 November 2007 (EET)


A Video Recorder and Player application example with source code using j2me Media API is given here. The application plays and records all the files that that is allowable in today's mobile like Nokia N97.
The complete source code which is so modularized so its becomes so easy for any developer to understand and implement it.The works fine without bugs.
--kalki 16:48, 24 September 2009 (UTC)