The following code will give you a demonstration on how to take a snapshot from a playing video.
Preconditions,
resource available at "/mmawtk.mpeg";
VideoSnapShotJPEG.java
FormVideoPlayer.java
Const.java
Preconditions,
resource available at "/mmawtk.mpeg";
VideoSnapShotJPEG.java
/*
* VideoSnapShotJPEG.java
* Dec 24, 2007
*/
package midlet;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import com.mot.lrt.midp.mmapi.Const;
import com.mot.lrt.midp.mmapi.video.FormVideoPlayer;
/**
* MIDlet to take a snapshot from a playing video
*
* @author author
*
*/
public class VideoSnapShotJPEG extends MIDlet implements CommandListener {
private Display display;
private FormVideoPlayer vp;
public VideoSnapShotJPEG() {
// TODO Auto-generated constructor stub
}
protected void destroyApp(boolean arg0) {
vp.closePlayer();
super.notifyDestroyed();
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
protected void startApp() throws MIDletStateChangeException {
if (display == null) {
initUI();
}
vp = new FormVideoPlayer("/mmawtk.mpeg", "video/mpeg");
vp.setCommandListener(this);
display.setCurrent(vp);
vp.openPlayer();
}
private void initUI() {
display = Display.getDisplay(this);
}
public void commandAction(Command c, Displayable arg1) {
if (Const.CMD_SNAPSHOT.equals(c)) {
vp.snapshot();
}
if (Const.CMD_EXIT.equals(c)) {
this.destroyApp(true);
}
}
}
* VideoSnapShotJPEG.java
* Dec 24, 2007
*/
package midlet;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import com.mot.lrt.midp.mmapi.Const;
import com.mot.lrt.midp.mmapi.video.FormVideoPlayer;
/**
* MIDlet to take a snapshot from a playing video
*
* @author author
*
*/
public class VideoSnapShotJPEG extends MIDlet implements CommandListener {
private Display display;
private FormVideoPlayer vp;
public VideoSnapShotJPEG() {
// TODO Auto-generated constructor stub
}
protected void destroyApp(boolean arg0) {
vp.closePlayer();
super.notifyDestroyed();
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
protected void startApp() throws MIDletStateChangeException {
if (display == null) {
initUI();
}
vp = new FormVideoPlayer("/mmawtk.mpeg", "video/mpeg");
vp.setCommandListener(this);
display.setCurrent(vp);
vp.openPlayer();
}
private void initUI() {
display = Display.getDisplay(this);
}
public void commandAction(Command c, Displayable arg1) {
if (Const.CMD_SNAPSHOT.equals(c)) {
vp.snapshot();
}
if (Const.CMD_EXIT.equals(c)) {
this.destroyApp(true);
}
}
}
FormVideoPlayer.java
/*
* FormVideoPlayer.java
* Dec 20, 2007
*/
package com.vendor.dept.prj.subprj.video;
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.ImageItem;
import javax.microedition.lcdui.Item;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.media.control.GUIControl;
import javax.microedition.media.control.VideoControl;
import com.vendor.dept.prj.subprj.Const;
/**
* Object of a video player
*
* @author authorname
*
*/
public class FormVideoPlayer extends Form {
private static final int LOOP = 5;
static Player player = null;
ImageItem img;
int imgid;
private InputStream is;
int length;
private String mimeType;
private String uri;
VideoControl vc;
private Item vitem;
/**
* @param string
*
*/
public FormVideoPlayer(String URI, String type) {
super(URI);
this.mimeType = type;
this.uri = URI;
initUI();
}
void appf(String s) {
System.out.println(s);
this.append(s);
}
public void closePlayer() {
if (player != null) {
player.close();
player = null;
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
// ignored
}
is = null;
}
}
private void initUI() {
this.addCommand(Const.CMD_EXIT);
addCommand(Const.CMD_SNAPSHOT);
// byte []logo = readLogo();
try {
Image logo = Image.createImage(Const.URI_LOGO);
img = new ImageItem("", logo, ImageItem.LAYOUT_CENTER, "");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
imgid = append(img);
}
public void openPlayer() {
appf(uri + ";" + mimeType);
is = this.getClass().getResourceAsStream(uri);
try {
player = Manager.createPlayer(is, mimeType);
player.setLoopCount(LOOP);
appf("realizing");
player.realize();
vc = (VideoControl) player.getControl("VideoControl");
if (vc != null) {
vitem = (Item) vc.initDisplayMode(GUIControl.USE_GUI_PRIMITIVE,
null);
append(vitem);
}
appf("prefetching");
player.prefetch();
appf("starting");
player.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MediaException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void snapshot() {
if (vc == null) {
// fetal error
}
Thread t = new Thread() {
public void run() {
try {
byte[] b = vc.getSnapshot(Const.SNAP_ENCODING_JPEG);
length = b.length;
Image shot = Image.createImage(b, 0, length);
set(imgid, new ImageItem("", shot,
ImageItem.LAYOUT_DEFAULT, ""));
} catch (MediaException e) {
appf(e.toString());
}
}
};
t.start();
}
}
* FormVideoPlayer.java
* Dec 20, 2007
*/
package com.vendor.dept.prj.subprj.video;
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.ImageItem;
import javax.microedition.lcdui.Item;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.media.control.GUIControl;
import javax.microedition.media.control.VideoControl;
import com.vendor.dept.prj.subprj.Const;
/**
* Object of a video player
*
* @author authorname
*
*/
public class FormVideoPlayer extends Form {
private static final int LOOP = 5;
static Player player = null;
ImageItem img;
int imgid;
private InputStream is;
int length;
private String mimeType;
private String uri;
VideoControl vc;
private Item vitem;
/**
* @param string
*
*/
public FormVideoPlayer(String URI, String type) {
super(URI);
this.mimeType = type;
this.uri = URI;
initUI();
}
void appf(String s) {
System.out.println(s);
this.append(s);
}
public void closePlayer() {
if (player != null) {
player.close();
player = null;
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
// ignored
}
is = null;
}
}
private void initUI() {
this.addCommand(Const.CMD_EXIT);
addCommand(Const.CMD_SNAPSHOT);
// byte []logo = readLogo();
try {
Image logo = Image.createImage(Const.URI_LOGO);
img = new ImageItem("", logo, ImageItem.LAYOUT_CENTER, "");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
imgid = append(img);
}
public void openPlayer() {
appf(uri + ";" + mimeType);
is = this.getClass().getResourceAsStream(uri);
try {
player = Manager.createPlayer(is, mimeType);
player.setLoopCount(LOOP);
appf("realizing");
player.realize();
vc = (VideoControl) player.getControl("VideoControl");
if (vc != null) {
vitem = (Item) vc.initDisplayMode(GUIControl.USE_GUI_PRIMITIVE,
null);
append(vitem);
}
appf("prefetching");
player.prefetch();
appf("starting");
player.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MediaException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void snapshot() {
if (vc == null) {
// fetal error
}
Thread t = new Thread() {
public void run() {
try {
byte[] b = vc.getSnapshot(Const.SNAP_ENCODING_JPEG);
length = b.length;
Image shot = Image.createImage(b, 0, length);
set(imgid, new ImageItem("", shot,
ImageItem.LAYOUT_DEFAULT, ""));
} catch (MediaException e) {
appf(e.toString());
}
}
};
t.start();
}
}
Const.java
/*
* Const.java
* Dec 20, 2007
*/
package com.vendor.dept.prj.subprj;
import javax.microedition.lcdui.Command;
/**
* @author authorname
*
*/
public class Const {
public static final Command CMD_EXIT = new Command("Exit", Command.EXIT, 0);
public static final Command CMD_SNAPSHOT = new Command("Snap", Command.OK,
1);
public static final Command CMD_START = new Command("Start", Command.OK,
2);
public static final String SNAP_ENCODING_JPEG = "encoding=jpeg";
public static final String URI_LOGO = "/j_32x32.jpg";
}
* Const.java
* Dec 20, 2007
*/
package com.vendor.dept.prj.subprj;
import javax.microedition.lcdui.Command;
/**
* @author authorname
*
*/
public class Const {
public static final Command CMD_EXIT = new Command("Exit", Command.EXIT, 0);
public static final Command CMD_SNAPSHOT = new Command("Snap", Command.OK,
1);
public static final Command CMD_START = new Command("Start", Command.OK,
2);
public static final String SNAP_ENCODING_JPEG = "encoding=jpeg";
public static final String URI_LOGO = "/j_32x32.jpg";
}