当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

JMF播放AVI格式的视频

发表于: 2013-12-02   作者:不懂事的小屁孩   来源:转载   浏览:
摘要: public class Conver {     public void run() {         try {             // 转换并截图  &n
public class Conver {

    public void run() {
        try {
            // 转换并截图
            String filePath = "E:\\wk\\测试用视频\\littlethree.avi";
            ConverVideo cv = new ConverVideo(filePath);
            cv.beginConver();
         } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String args[]) {
        Conver c = new Conver();
        c.run();
    }
}


import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

public class ConverVideo {

private String PATH;
    private String filerealname; // 文件名 不包括扩展名
    private String filename; // 包括扩展名
    private String flvfolder = "D:\\"; // flv视频的目录
    private String ffmpegpath = "D:\\ffmpeg\\bin\\ffmpeg.exe"; // ffmpeg.exe的目录

    public ConverVideo() {
    }

    public ConverVideo(String path) {
        PATH = path;
    }

    public String getPATH() {
        return PATH;
    }

    public void setPATH(String path) {
        PATH = path;
    }

    public boolean beginConver() {
        File fi = new File(PATH);
        filename = fi.getName();
        filerealname = filename.substring(0, filename.lastIndexOf("."))
                .toLowerCase();
        if (!checkfile(PATH)) {
           System.out.println(PATH + "文件不存在");
           return false;
        }

        if (process()) { //proess函数用来转换视频格式
            PATH = null;
            return true;
        } else {
            PATH = null;
            return false;
       }
    }

    private boolean process() {
        int type = checkContentType();
        boolean status = false;
        if (type == 0) {
        status = processUSEAVI(PATH);
        }
        return status;
    }
    //检查文件类型
    private int checkContentType() {
        String type = PATH.substring(PATH.lastIndexOf(".") + 1, PATH.length()).toLowerCase();
        if (type.equals("avi")) {
            return 0;
        } else if (type.equals("mpg")) {
            return 0;
        } else if (type.equals("wmv")) {
            return 0;
        } else if (type.equals("3gp")) {
            return 0;
        } else if (type.equals("mov")) {
            return 0;
        } else if (type.equals("mp4")) {
            return 0;
        } else if (type.equals("flv")) {
            return 0;
        }
        return 9;
    }

    private boolean checkfile(String path) {
        File file = new File(path);
        if (!file.isFile()) {
            return false;
        } else {
            return true;
        }
    }

    private boolean processUSEAVI(String oldfilepath) {
        if (!checkfile(PATH)) {
            System.out.println("上传视频文件:"+oldfilepath + "不是文件");
            return false;
        }
        List commend = new java.util.ArrayList();
        commend.add(ffmpegpath); // 添加转换工具路径
        commend.add("-i"); //添加参数"-i",该参数指定要转换的文件
        commend.add(oldfilepath); // 添加要转换格式的视频文件的路径
        commend.add("-ab"); //设置音频码率 
        commend.add("128");
      /*commend.add("-b");//比特率
        commend.add("1000");*/
        commend.add("-qscale");
        commend.add("6");
        commend.add("-s");//
        commend.add("352x288");
        commend.add("-vcodec"); //视频流编码
        commend.add("h263");
        commend.add("-acodec"); //音频编码
        commend.add("pcm_s16le"); //音频编码
        commend.add("-ac"); //设置声道数 1就是单声道,2就是立体声
        commend.add("2");
        commend.add("-ar"); //设置声音的采样频率
        commend.add("22050");
        commend.add("-r"); //设置帧频
        commend.add("25");
        commend.add("-y"); // 添加参数"-y",该参数指定将覆盖已存在的文件
        commend.add(flvfolder + filerealname + ".avi");
        try {
            ProcessBuilder builder = new ProcessBuilder();
            String cmd = commend.toString();
            builder.command(commend);
            Process p = builder.start();
            doWaitFor(p);
            p.destroy();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public int doWaitFor(Process p) {
        InputStream in = null;
        InputStream err = null;
        int exitValue = -1; // returned to caller when p is finished
        try {
            in = p.getInputStream();
            err = p.getErrorStream();
            boolean finished = false; // Set to true when p is finished
            while (!finished) {
                try {
                    while (in.available() > 0) {
                        Character c = new Character((char) in.read());
                      //  System.out.print(c);
                    }
                    while (err.available() > 0) {
                        Character c = new Character((char) err.read());
                     //   System.out.print(c);
                    }
                    exitValue = p.exitValue();
                    finished = true;
                } catch (IllegalThreadStateException e) {
                    Thread.currentThread().sleep(500);
                }
            }
        } catch (Exception e) {
            System.err.println("doWaitFor()视频上传转码错误:" + e.getMessage());
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (IOException e) {
                System.out.println("视频上传转码错误:"+e.getMessage());
            }
            if (err != null) {
                try {
                    err.close();
                } catch (IOException e) {
                    System.out.println("视频上传转码错误:"+e.getMessage());
                }
            }
        }
        return exitValue;
    }

}

JMF播放AVI格式的视频

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
原创文章,欢迎转载,转载请注明出处 第二个程序,播放视频。用opencv做起来是如此的简单。。哈哈。
前面Insus.NET实现一系列在MVC应用程序播放SWF, FLV, WMV, RM, RMVB视频。每篇使用不同的方法方式,
Option Explicit Private Sub Command1_Click() mci1.Command = "close" '关闭mci1不可见 mci1.Noti
http://pan.baidu.com/s/1dDzZmdr,该转换器会把其他格式转化为ogv格式,直接被unity识别,不需要安
AVI是一种常见的音视频混合格式,如下是一段含JPG的AVI文件内容。 AVI的数据格式如下: RIFF: 12字
使用JMF可以同时提取视频流和音频流,然后通过数据源的混合,可以达到视频音频同时收集和播放的功能
一直有个问题,Insus.NET想去解决它,工作繁忙,但抽不出时间来。如何让自己的站点能播放MP4的格式
浏览某个网站时播放视频可能会出现下面的情况: 其实原因很简单,因为国内大多都是Win2003的主机 .默
AVI是音频视频交错(Audio Video Interleaved)的英文缩写,它是Microsoft公司开发的一种符合RIFF文件
摘要:本文详细的解析了AVI文件的存储结构,介绍了微软提供的用来操作AVI文件的一组API使用方法,并
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号