zoukankan      html  css  js  c++  java
  • J2EE中使用MediaInfo库获取视频信息

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

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

    下面简单记录一下它的使用方法。
    (系统开发平台是MyEclipse)

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

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

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

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

    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)

    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格式的(以<table>的形式输出)。




  • 相关阅读:
    LINUX学习笔记day2
    android 获取正在运行的服务
    android小部件
    android开发_国外论坛
    取消线程
    AlarmManager的使用
    PendingIntent
    SharedPreferences 的使用
    流量监听
    android 异常-access to constructor not allowed
  • 原文地址:https://www.cnblogs.com/leixiaohua1020/p/3902108.html
Copyright © 2011-2022 走看看