疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

J2EE中使用MediaInfo库获取视频信息


 

        MediaInfo 用来分析视频和音频文件的编码和内容信息,是一款是自由软件 (免费使用、免费获得源代码)。

  我在J2EE项目软件中集成了它的DLL,很好用。

  下面简单记录一下它的使用方法。

  (系统开发平台是MyEclipse)

  1.需要加入JNA库。加入项目的 Build Path 后就可以使用Java调用DLL了。

  2.需要MediaInfo的Dll。可以放到“C:WindowsSystem32”里面。

  3.需要一个名为MediaInfo的类(在MediaInfoDLL.JNA.java中)。

  4.加入以下代码(这是个片段)试一下:

  [python] view plaincopy

  String To_Display = " Open ";

  MediaInfo MI = new MediaInfo();

  if (MI.Open(“test.flv”)>0)

  To_Display+="is OK ";

  else

  To_Display+="has a problem ";

  To_Display += " Inform with Complete=false ";

  MI.Option("Complete", "");

  To_Display += MI.Inform();

  MI.Close();

  System.out.println(To_Display);

  如果没问题,可以打印出test.flv的完整信息。

  实际Struts2 + Spring + Hibernate项目中可以按照如下方式使用:

  (一个实际的Action)

  [java] view plaincopy

  package action.video;

  import javax.servlet.ServletContext;

  import org.apache.struts2.ServletActionContext;

  import service.BaseService;

  import bean.Video;

  import util.MediaInfo;

  import com.opensymphony.xwork2.ActionSupport;

  /**

  * @author 雷霄骅

  * Action

  */

  public class VideoReadByID extends ActionSupport {

  private int videoid;

  private BaseService baseService;

  private String original_videoinfo;

  private String convert_videoinfo;

  private Video video;

  public int getVideoid() {

  return videoid;

  }

  public void setVideoid(int videoid) {

  this.videoid = videoid;

  }

  public BaseService getBaseService() {

  return baseService;

  }

  public void setBaseService(BaseService baseService) {

  this.baseService = baseService;

  }

  public Video getVideo() {

  return video;

  }

  public void setVideo(Video video) {

  this.video = video;

  }

  public String getOriginal_videoinfo() {

  return original_videoinfo;

  }

  public void setOriginal_videoinfo(String original_videoinfo) {

  this.original_videoinfo = original_videoinfo;

  }

  public String getConvert_videoinfo() {

  return convert_videoinfo;

  }

  public void setConvert_videoinfo(String convert_videoinfo) {

  this.convert_videoinfo = convert_videoinfo;

  }

  public String execute(){

  try{

  video=(Video) baseService.ReadByID("Video", videoid);

  ServletContext servletContext = ServletActionContext.getServletContext();

  String realfilePath=servletContext.getRealPath("/")+video.getPath();

  String realfileoriginalPath=servletContext.getRealPath("/")+video.getTemppath();

  //MediaInfo-------------------

  MediaInfo MI = new MediaInfo();

  MI.Option("Output", "HTML");

  original_videoinfo = "";

  if (MI.Open(realfileoriginalPath)>0){

  MI.Option("Complete", "");

  original_videoinfo+= MI.Inform();

  }

  else{

  original_videoinfo+="媒体信息检测失败 ";

  }

  //----------------------------

  convert_videoinfo= "";

  if (MI.Open(realfilePath)>0){

  MI.Option("Complete", "");

  convert_videoinfo+= MI.Inform();

  }

  else{

  convert_videoinfo+="媒体信息检测失败 ";

  }

  //----------------------------

  //System.out.println(original_videoinfo);

  //System.out.println(convert_videoinfo);

  return SUCCESS;

  }

  catch(Exception ex){

  ex.printStackTrace();

  return ERROR;

  }

  }

  }

  最终original_videoinfo 和convert_videoinfo中都得到了相应媒体的信息,事实上分别是转码前和转码后视频文件的信息。

  在J2EE项目中应该注意:MI.Option("Output", "HTML");这句一定要加,这样才能保证original_videoinfo 和convert_videoinfo中的字符串是HTML格式的(以 的形式输出)。