package com.ypp.jave;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Encoder {
private static final Pattern FORMAT_PATTERN = Pattern.compile("^\\s*([D ])([E ])\\s+([\\w,]+)\\s+.+$");
private static final Pattern ENCODER_DECODER_PATTERN = Pattern
.compile("^\\s*([D.])([E.])([AVS.])([I.])([L.])([S.])\\s+(.+?)\\s+(.+)$", 2);
private static final Pattern PROGRESS_INFO_PATTERN = Pattern.compile("\\s*(\\w+)\\s*=\\s*(\\S+)\\s*", 2);
private static final Pattern SIZE_PATTERN = Pattern.compile("(\\d+)x(\\d+)", 2);
private static final Pattern FRAME_RATE_PATTERN = Pattern.compile("([\\d.]+)\\s+(?:fps|tb\\(r\\))", 2);
private static final Pattern BIT_RATE_PATTERN = Pattern.compile("(\\d+)\\s+kb/s", 2);
private static final Pattern SAMPLING_RATE_PATTERN = Pattern.compile("(\\d+)\\s+Hz", 2);
private static final Pattern CHANNELS_PATTERN = Pattern.compile("(mono|stereo)", 2);
private static final Pattern SUCCESS_PATTERN = Pattern.compile("^\\s*video\\:\\S+\\s+audio\\:\\S+\\s+.*$", 2);
private static final Pattern TIME_PATTERN = Pattern.compile("^(\\d\\d):(\\d\\d):(\\d\\d)\\.(\\d*)$", 2);
private FFMPEGLocator locator;
public Encoder() {
this.locator = new DefaultFFMPEGLocator();
}
public Encoder(FFMPEGLocator locator) {
this.locator = locator;
}
public String[] getAudioDecoders() throws EncoderException {
ArrayList res = new ArrayList();
FFMPEGExecutor ffmpeg = this.locator.createExecutor();
ffmpeg.addArgument("-codecs");
try {
ffmpeg.execute();
RBufferedReader reader = null;
reader = new RBufferedReader(new InputStreamReader(ffmpeg.getInputStream()));
boolean evaluate = false;
String line;
while ((line = reader.readLine()) != null) {
if (line.trim().length() != 0) {
if (evaluate) {
Matcher matcher = ENCODER_DECODER_PATTERN.matcher(line);
if (!matcher.matches())
break;
String decoderFlag = matcher.group(1);
String audioVideoFlag = matcher.group(3);
if (("D".equals(decoderFlag)) && ("A".equals(audioVideoFlag))) {
String name = matcher.group(7);
res.add(name);
}
} else if (line.trim().equals("-------")) {
evaluate = true;
}
}
}
} catch (IOException e) {
throw new EncoderException(e);
} finally {
ffmpeg.destroy();
}
int size = res.size();
String[] ret = new String[size];
for (int i = 0; i < size; i++) {
ret[i] = ((String) res.get(i));
}
return ret;
}
public String[] getAudioEncoders() throws EncoderException {
ArrayList res = new ArrayList();
FFMPEGExecutor ffmpeg = this.locator.createExecutor();
ffmpeg.addArgument("-codecs");
try {
ffmpeg.execute();
RBufferedReader reader = null;
reader = new RBufferedReader(new InputStreamReader(ffmpeg.getInputStream()));
boolean evaluate = false;
String line;
while ((line = reader.readLine()) != null) {
if (line.trim().length() != 0) {
if (evaluate) {
Matcher matcher = ENCODER_DECODER_PATTERN.matcher(line);
if (!matcher.matches())
break;
String encoderFlag = matcher.group(2);
String audioVideoFlag = matcher.group(3);
if (("E".equals(encoderFlag)) && ("A".equals(audioVideoFlag))) {
String name = matcher.group(7);
res.add(name);
}
} else if (line.trim().equals("-------")) {
evaluate = true;
}
}
}
} catch (IOException e) {
throw new EncoderException(e);
} finally {
ffmpeg.destroy();
}
int size = res.size();
String[] ret = new String[size];
for (int i = 0; i < size; i++) {
ret[i] = ((String) res.get(i));
}
return ret;
}
public String[] getVideoDecoders() throws EncoderException {
ArrayList res = new ArrayList();
FFMPEGExecutor ffmpeg = this.locator.createExecutor();
ffmpeg.addArgument("-codecs");
try {
ffmpeg.execute();
RBufferedReader reader = null;
reader = new RBufferedReader(new InputStreamReader(ffmpeg.getInputStream()));
boolean evaluate = false;
String line;
while ((line = reader.readLine()) != null) {
if (line.trim().length() != 0) {
if (evaluate) {
Matcher matcher = ENCODER_DECODER_PATTERN.matcher(line);
if (!matcher.matches())
break;
String decoderFlag = matcher.group(1);
String audioVideoFlag = matcher.group(3);
if (("D".equals(decoderFlag)) && ("V".equals(audioVideoFlag))) {
String name = matcher.group(7);
res.add(name);
}
} else if (line.trim().equals("-------")) {
evaluate = true;
}
}
}
} catch (IOException e) {
throw new EncoderException(e);
} finally {
ffmpeg.destroy();
}
int size = res.size();
String[] ret = new String[size];
for (int i = 0; i < size; i++) {
ret[i] = ((String) res.get(i));
}
return ret;
}
public String[] getVideoEncoders() throws EncoderException {
ArrayList res = new ArrayList();
FFMPEGExecutor ffmpeg = this.locator.createExecutor();
ffmpeg.addArgument("-codecs");
try {
ffmpeg.execute();
RBufferedReader reader = null;
reader = new RBufferedReader(new InputStreamReader(ffmpeg.getInputStream()));
boolean evaluate = false;
String line;
while ((line = reader.readLine()) != null) {
if (line.trim().length() != 0) {
if (evaluate) {
Matcher matcher = ENCODER_DECODER_PATTERN.matcher(line);
if (!matcher.matches())
break;
String encoderFlag = matcher.group(2);
String audioVideoFlag = matcher.group(3);
if (("E".equals(encoderFlag)) && ("V".equals(audioVideoFlag))) {
String name = matcher.group(7);
res.add(name);
}
} else if (line.trim().equals("-------")) {
evaluate = true;
}
}
}
} catch (IOException e) {
throw new EncoderException(e);
} finally {
ffmpeg.destroy();
}
int size = res.size();
String[] ret = new String[size];
for (int i = 0; i < size; i++) {
ret[i] = ((String) res.get(i));
}
return ret;
}
public String[] getSupportedEncodingFormats() throws EncoderException {
ArrayList res = new ArrayList();
FFMPEGExecutor ffmpeg = this.locator.createExecutor();
ffmpeg.addArgument("-formats");
try {
ffmpeg.execute();
RBufferedReader reader = null;
reader = new RBufferedReader(new InputStreamReader(ffmpeg.getInputStream()));
boolean evaluate = false;
String line;
while ((line = reader.readLine()) != null) {
if (line.trim().length() != 0) {
if (evaluate) {
Matcher matcher = FORMAT_PATTERN.matcher(line);
if (!matcher.matches())
break;
String encoderFlag = matcher.group(2);
if ("E".equals(encoderFlag)) {
String aux = matcher.group(3);
StringTokenizer st = new StringTokenizer(aux, ",");
while (st.hasMoreTokens()) {
String token = st.nextToken().trim();
if (!res.contains(token)) {
res.add(token);
}
}
}
} else if (line.trim().equals("File formats:")) {
reader.readLine();
reader.readLine();
reader.readLine();
evaluate = true;
}
}
}
} catch (IOException e) {
throw new EncoderException(e);
} finally {
ffmpeg.destroy();
}
int size = res.size();
String[] ret = new String[size];
for (int i = 0; i < size; i++) {
ret[i] = ((String) res.get(i));
}
return ret;
}
public String[] getSupportedDecodingFormats() throws EncoderException {
ArrayList res = new ArrayList();
FFMPEGExecutor ffmpeg = this.locator.createExecutor();
ffmpeg.addArgument("-formats");
try {
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于ffmpeg的音频处理Java SDK.zip (28个子文件)
pom.xml 909B
src
main
resources
com
ypp
jave
ffmpeg_linux64 43.04MB
ffmpeg_win64.exe 39.53MB
ffmpeg_win32.exe 30.67MB
ffmpeg_linux32 32.04MB
java
com
ypp
media
sdk
audio
AudioApiClient.java 5KB
model
AudioCutFile.java 2KB
AudioCutUrl.java 2KB
AudioCutResult.java 1KB
util
WaveHeader.java 2KB
AudioUtils.java 8KB
AudioCutUtils.java 7KB
jave
FFMPEGExecutor.java 4KB
EncodingAttributes.java 5KB
InputFormatException.java 1KB
AudioAttributes.java 5KB
EncoderProgressListener.java 2KB
FFMPEGLocator.java 2KB
DefaultFFMPEGLocator.java 2KB
VideoAttributes.java 5KB
AudioInfo.java 3KB
Encoder.java 20KB
ProcessKiller.java 1KB
EncoderException.java 1KB
RBufferedReader.java 2KB
VideoInfo.java 3KB
VideoSize.java 2KB
MultimediaInfo.java 3KB
共 28 条
- 1
资源评论
来了就走下去
- 粉丝: 111
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功