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;
}
}
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;
}
}
发表评论
-
文件上传 下载 解析 相对路径
2014-12-16 16:29 2104有点坑吧,弄这么一个简单的东西弄了一天多,身边还有大神指导着, ... -
发送邮件
2014-10-15 11:29 667import org.apache.commons.m ... -
Enum用法
2014-08-06 10:27 811以前的时候知道enum,但 ... -
红黑树
2014-07-24 13:51 627红黑树 红黑树是一种自平衡二叉查找树,是在计算机科学中用到的 ... -
Java中的instanceof关键字
2014-07-21 11:14 443Java中的instanceof关键字 [size=larg ... -
Comparable接口
2014-07-21 11:01 500因为在学红黑树的时候用到了Comparable接口,故此学习一 ... -
二叉查找树
2014-07-15 10:57 605二叉排序树(Binary Sort Tree)又称二叉查找树( ... -
二叉树的三种遍历
2014-07-10 11:28 611前序遍历(DLR) 前序 ... -
Java中如何写代码实现无标题无边框的窗体能够用鼠标拖动改变窗口大小
2014-01-23 17:16 1561import java.awt.*; import java ... -
Swing基础
2014-01-10 10:22 421JFrame: frame = new JFrame(); ... -
游戏音效素材大全下载 - 3000首高清无损-按分类整理
2014-01-09 18:03 487因为我看到国外很多素材,但是国内不多,我希望来做好这个事情。 ... -
Swing 键盘练习
2014-01-09 17:59 591在swing界面中写一个键盘,使用前记得放置背景图片 imp ... -
JAVA的Socket的聊天器
2014-01-09 11:06 471这是刚开始学习java网络编程的时候做的一个东东,,局域网聊天 ... -
驱动打印
2013-12-27 15:16 654java驱动打印代码: PrintTest.print(pr ... -
java程序打包
2013-12-27 15:17 522打包一般分为两种,一种是B/S架构打包,一种是C/S打包,大同 ... -
读取文件夹下的所有文件
2013-12-20 13:19 473文章来源:http://www.blogjava.net/ba ... -
实现天气预报功能
2013-12-02 10:30 563import java.io.BufferedReader; ... -
JMF视频播放器
2013-12-02 10:24 1138import java.awt.BorderLayout; ...
相关推荐
Java Media Framework (JMF) 是一个用于在...以上就是使用Java Media Framework进行视频播放和录制的基本知识。在实际项目中,可能需要结合其他库或技术,如JavaFX或JavaSwing来构建用户界面,以提供更友好的交互体验。
在本例中,我们使用了JMF来实现了一个简单的视频播放器,该播放器可以播放MPG、AVI、FVL等格式的视频文件。首先,我们创建了一个Frame对象,并添加了一个窗口监听器,以便在窗口关闭时关闭播放器。然后,我们创建了...
这是我编写的一个视频音频播放器,可以播放的音频有mp3,wav,视频是avi,其他格式要进行另外编码。我旨在理解JMF播放器的整体架构,了解播放器的各个状态。在运行前要先安装JMF,并把JMF包导进去,我已经倒进去了,...
JMF支持多种多媒体格式,包括但不限于MP3、WAV、MIDI等音频格式以及AVI、WMV、MPEG等视频格式。 在这个MP3播放器中,JMF作为核心组件,负责解析MP3文件的编码信息,将数字音频数据解码为可以播放的声音信号。播放器...
JMF提供了播放、捕获、转换、控制和流传输多媒体数据的能力,支持多种媒体格式,如MPEG、AVI、WAV等。开发者可以利用JMF构建复杂的多媒体应用,如视频会议系统、流媒体服务器或教育软件。 在压缩包中的文件“java...
JMF号称支持AVI和MPEG-1等视频格式,但需要注意的是,它所支持的AVI格式是较旧的版本,可能无法播放当前网络上广泛使用的高帧率或高数据量的AVI视频。同样,MPEG-1也是一个过时的格式,现代视频通常使用其他格式如...
在这个“用JMF编写的视频播放程序”中,我们将探讨以下几个关键知识点: 1. **Java Media Framework (JMF)** JMF是由Sun Microsystems开发的一个开源库,用于在Java应用程序中实现多媒体支持。它提供了API来捕获、...
2. **多媒体处理**:JMF支持多种媒体格式,如MPEG、AVI、WAV等。它能够进行解码、编码、播放、录制等操作,通过组件化的架构,可以灵活地组合不同的媒体处理功能。 3. **音视频同步**:在音视频聊天程序中,JMF提供...
### 基于JMF的音视频同步播放技术解析 #### 引言 随着多媒体技术的飞速发展,音视频的同步播放成为了诸多应用领域的关键需求。Java Media Framework(JMF),作为Sun Microsystems(现Oracle)推出的一款强大的...
1. 文件格式支持:JMF支持多种媒体文件格式,如WAV、MP3、AVI、MPEG等,可以方便地进行文件读写操作。 2. 编码与解码:JMF提供了多种编解码器,可以将实时的音视频数据编码为适合存储的格式,或者将存储的文件解码回...
这通常涉及设置输出格式(如AVI或MP4)和编码参数,然后启动一个`Controller`来控制录制过程。 5. **文件命名**:压缩包中的“JMF_Capturing”可能是源代码文件夹,包含相关的Java类、配置文件以及可能的测试用例。...
2. **媒体格式支持**:JMF 支持多种媒体格式,如 MP3、WAV、AVI、MPEG 等,但其对新格式的支持可能不如现代库全面,因此可能需要安装第三方插件。 3. **实时处理**:JMF 支持实时媒体流处理,适合视频会议、在线...
JMF为开发者提供了在Java应用程序中集成多媒体功能的能力,它支持多种媒体格式,如MPEG、WAV、AVI等。 **一、JMF的架构与工作原理** JMF基于组件化设计,由多个插件(称为“服务提供商”)组成,这些插件负责不同的...
1. **多媒体支持**:JMF提供对多种音频和视频格式的支持,如MPEG、AVI、WAV等,通过插件系统可以扩展支持更多格式。 2. **播放与控制**:JMF允许开发者播放、暂停、停止、快进、快退以及调整音量等操作。 3. **流...
它提供了简单的API接口,可以让开发者方便地将一系列Bitmap图像转换成各种常见的视频格式,例如MP4、AVI或WMV等。通过这个库,开发者可以自定义帧率、分辨率、编码器参数等,以满足不同的输出需求。 Java Media ...
2. **文件选择**:用户可以选择本地的音频或视频文件进行播放,这依赖于JMF对文件格式的支持。 3. **音量控制**:调整音量大小是多媒体播放器的基本功能,JMF提供了相应的API来实现。 4. **源代码**:附带的源代码...
- 支持多种编码和解码器,允许播放多种常见的多媒体文件格式,如MP3、WAV、AVI等。 - 提供流处理能力,可以播放网络上的音频和视频流。 3. **安装版与全jar包**: - “JMF2.1安装版”是指一个可执行的安装程序,...
JMF提供了一组接口和类,使得开发者可以处理多种媒体格式,包括编码、解码、播放和捕获。它支持多种媒体类型,如MPEG、AVI、WAV等,并且能够处理网络流媒体。 RTP协议是IETF定义的标准,主要用于传输实时和时间敏感...
JMF能够处理多种视频格式,如MPEG、AVI、QuickTime等。在工程中,开发者可以利用JMF API读取、播放和控制视频流。源码中可能包含了示例,演示如何加载视频文件,创建播放器,以及控制播放速度、音量等参数。 **5. ...