Java ME, take a snapshot from a playing video

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
/*
 * 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();

    }


}



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";
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值