`

JMF播放AVI格式的视频

    博客分类:
  • Java
阅读更多
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播放视频视频,录制视频

    Java Media Framework (JMF) 是一个用于在...以上就是使用Java Media Framework进行视频播放和录制的基本知识。在实际项目中,可能需要结合其他库或技术,如JavaFX或JavaSwing来构建用户界面,以提供更友好的交互体验。

    使用JMF实现java视频播放器

    在本例中,我们使用了JMF来实现了一个简单的视频播放器,该播放器可以播放MPG、AVI、FVL等格式的视频文件。首先,我们创建了一个Frame对象,并添加了一个窗口监听器,以便在窗口关闭时关闭播放器。然后,我们创建了...

    视频音频播放器:这是我编写的一个视频音频播放器,可以播放的音频有mp3,wav,视频是avi,其他格式要进行另外编码。我旨在理解JMF播放器的整体架构,了解播放器的各个状态。

    这是我编写的一个视频音频播放器,可以播放的音频有mp3,wav,视频是avi,其他格式要进行另外编码。我旨在理解JMF播放器的整体架构,了解播放器的各个状态。在运行前要先安装JMF,并把JMF包导进去,我已经倒进去了,...

    基于JMF的MP3播放器

    JMF支持多种多媒体格式,包括但不限于MP3、WAV、MIDI等音频格式以及AVI、WMV、MPEG等视频格式。 在这个MP3播放器中,JMF作为核心组件,负责解析MP3文件的编码信息,将数字音频数据解码为可以播放的声音信号。播放器...

    jmf多媒体播放.zip

    JMF提供了播放、捕获、转换、控制和流传输多媒体数据的能力,支持多种媒体格式,如MPEG、AVI、WAV等。开发者可以利用JMF构建复杂的多媒体应用,如视频会议系统、流媒体服务器或教育软件。 在压缩包中的文件“java...

    JMF下载和安装教程

    JMF号称支持AVI和MPEG-1等视频格式,但需要注意的是,它所支持的AVI格式是较旧的版本,可能无法播放当前网络上广泛使用的高帧率或高数据量的AVI视频。同样,MPEG-1也是一个过时的格式,现代视频通常使用其他格式如...

    用JMF编写的视频播放程序

    在这个“用JMF编写的视频播放程序”中,我们将探讨以下几个关键知识点: 1. **Java Media Framework (JMF)** JMF是由Sun Microsystems开发的一个开源库,用于在Java应用程序中实现多媒体支持。它提供了API来捕获、...

    JMF的音视频聊天程序源代码附论文

    2. **多媒体处理**:JMF支持多种媒体格式,如MPEG、AVI、WAV等。它能够进行解码、编码、播放、录制等操作,通过组件化的架构,可以灵活地组合不同的媒体处理功能。 3. **音视频同步**:在音视频聊天程序中,JMF提供...

    基于JMF的音视频同步播放

    ### 基于JMF的音视频同步播放技术解析 #### 引言 随着多媒体技术的飞速发展,音视频的同步播放成为了诸多应用领域的关键需求。Java Media Framework(JMF),作为Sun Microsystems(现Oracle)推出的一款强大的...

    JMF的音视频实时交互及存储的具体实现

    1. 文件格式支持:JMF支持多种媒体文件格式,如WAV、MP3、AVI、MPEG等,可以方便地进行文件读写操作。 2. 编码与解码:JMF提供了多种编解码器,可以将实时的音视频数据编码为适合存储的格式,或者将存储的文件解码回...

    JMF摄像头视频采集示例

    这通常涉及设置输出格式(如AVI或MP4)和编码参数,然后启动一个`Controller`来控制录制过程。 5. **文件命名**:压缩包中的“JMF_Capturing”可能是源代码文件夹,包含相关的Java类、配置文件以及可能的测试用例。...

    jmf rtp 视频音频传输聊天

    2. **媒体格式支持**:JMF 支持多种媒体格式,如 MP3、WAV、AVI、MPEG 等,但其对新格式的支持可能不如现代库全面,因此可能需要安装第三方插件。 3. **实时处理**:JMF 支持实时媒体流处理,适合视频会议、在线...

    JMF音频输出和视频输出安装文件和中文帮助文档

    JMF为开发者提供了在Java应用程序中集成多媒体功能的能力,它支持多种媒体格式,如MPEG、WAV、AVI等。 **一、JMF的架构与工作原理** JMF基于组件化设计,由多个插件(称为“服务提供商”)组成,这些插件负责不同的...

    JMF视频播放器 java源代码

    1. **多媒体支持**:JMF提供对多种音频和视频格式的支持,如MPEG、AVI、WAV等,通过插件系统可以扩展支持更多格式。 2. **播放与控制**:JMF允许开发者播放、暂停、停止、快进、快退以及调整音量等操作。 3. **流...

    Jim2mov&JMF;的Bitmap转视频 jar

    它提供了简单的API接口,可以让开发者方便地将一系列Bitmap图像转换成各种常见的视频格式,例如MP4、AVI或WMV等。通过这个库,开发者可以自定义帧率、分辨率、编码器参数等,以满足不同的输出需求。 Java Media ...

    JMF(Java媒体框架)

    2. **文件选择**:用户可以选择本地的音频或视频文件进行播放,这依赖于JMF对文件格式的支持。 3. **音量控制**:调整音量大小是多媒体播放器的基本功能,JMF提供了相应的API来实现。 4. **源代码**:附带的源代码...

    JMF2.1.zip

    - 支持多种编码和解码器,允许播放多种常见的多媒体文件格式,如MP3、WAV、AVI等。 - 提供流处理能力,可以播放网络上的音频和视频流。 3. **安装版与全jar包**: - “JMF2.1安装版”是指一个可执行的安装程序,...

    jmf rtp 传输视频例子

    JMF提供了一组接口和类,使得开发者可以处理多种媒体格式,包括编码、解码、播放和捕获。它支持多种媒体类型,如MPEG、AVI、WAV等,并且能够处理网络流媒体。 RTP协议是IETF定义的标准,主要用于传输实时和时间敏感...

    JMF工程项目

    JMF能够处理多种视频格式,如MPEG、AVI、QuickTime等。在工程中,开发者可以利用JMF API读取、播放和控制视频流。源码中可能包含了示例,演示如何加载视频文件,创建播放器,以及控制播放速度、音量等参数。 **5. ...

Global site tag (gtag.js) - Google Analytics