「javaffmpeg流」java调用ffmpeg推流
本篇文章给大家谈谈javaffmpeg流,以及java调用ffmpeg推流对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、用JAVA调用ffmpeg实现将各种视频格式转为flv时,怎样做出简单操作的界面?
- 2、怎么用java读取ffmpeg输出流
- 3、用Java和ffmpeg做视频拆帧
- 4、通过ffmpeg实现视频流截图
- 5、linux 上java调用ffmpeg转码只有几秒长
用JAVA调用ffmpeg实现将各种视频格式转为flv时,怎样做出简单操作的界面?
源代码肯定不会贴给你的,思路可以说下!
首先,你在后台把各格式的相互转换函数写好比如,rm2flv,wav2flv,自己去掉人家的借口,找下demo代码。
然后,做一个表单网页,能上传源文件到服务器,点击上传提交任务
最后,上传完毕,判断文件格式(后缀),然后调用对应的函数进行转换,转换完毕后,可以给出转换信息,如文件大小,转换时间,转换后文件url地址等
完毕!
怎么用java读取ffmpeg输出流
public static void main(String[] args) {
String result = processFLV("E:\\test\\京视传媒\\体育类\\xiao.flv");
PatternCompiler compiler =new Perl5Compiler();
try {
String regexDuration ="Duration: (.*?), start: (.*?), bitrate: (\\d*) kb\\/s";
String regexVideo ="Video: (.*?), (.*?), (.*?)[,\\s]";
String regexAudio ="Audio: (\\w*), (\\d*) Hz";
Pattern patternDuration = compiler.compile(regexDuration,Perl5Compiler.CASE_INSENSITIVE_MASK);
PatternMatcher matcherDuration = new Perl5Matcher();
if(matcherDuration.contains(result, patternDuration)){
MatchResult re = matcherDuration.getMatch();
System.out.println("提取出播放时间 ===" +re.group(1));
System.out.println("开始时间 =====" +re.group(2));
System.out.println("bitrate 码率 单位 kb==" +re.group(3));
}
Pattern patternVideo = compiler.compile(regexVideo,Perl5Compiler.CASE_INSENSITIVE_MASK);
PatternMatcher matcherVideo = new Perl5Matcher();
if(matcherVideo.contains(result, patternVideo)){
MatchResult re = matcherVideo.getMatch();
System.out.println("编码格式 ===" +re.group(1));
System.out.println("视频格式 ===" +re.group(2));
System.out.println(" 分辨率 == =" +re.group(3));
}
Pattern patternAudio = compiler.compile(regexAudio,Perl5Compiler.CASE_INSENSITIVE_MASK);
PatternMatcher matcherAudio = new Perl5Matcher();
if(matcherAudio.contains(result, patternAudio)){
MatchResult re = matcherAudio.getMatch();
System.out.println("音频编码 ===" +re.group(1));
System.out.println("音频采样频率 ===" +re.group(2));
}
} catch (MalformedPatternException e) {
e.printStackTrace();
}
}
// ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
private static String processFLV(String inputPath) {
/*
if (!checkfile(inputPath)){
_log.warn(inputPath+" is not file");
return false;
}
*/
ListString commend=new java.util.ArrayListString();
// commend.add("e:\\videoconver\\ffmpeg\\ffmpeg ");//可以设置环境变量从而省去这行
commend.add("ffmpeg");
commend.add("-i");
commend.add(inputPath);
try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(commend);
builder.redirectErrorStream(true);
Process p= builder.start();
//1. start
BufferedReader buf = null; // 保存ffmpeg的输出结果流
String line = null;
//read the standard output
buf = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuffer sb= new StringBuffer();
while ((line = buf.readLine()) != null) {
System.out.println(line);
sb.append(line);
continue;
}
int ret = p.waitFor();//这里线程阻塞,将等待外部转换进程运行成功运行结束后,才往下执行
//1. end
return sb.toString();
} catch (Exception e) {
// System.out.println(e);
return null;
}
}
用Java和ffmpeg做视频拆帧
我用的是基于C++的ffmpeg开发,ffmpeg原本是针对linux下的GCC编译器,当然通过MinGW也可以在win下进行编译,但是需要安装额外的编译环境,你可以上chinavideo上去看看,那上面说的很清楚,的你所说的问题也不是很难,多看看开发文档就可以解决了。
通过ffmpeg实现视频流截图
最近忙于新产品技术点突破,针对架构摸索暂时停住。目前需要解决的问题是如何从视频流中截取一张图。
在安防领域有各种视频监控产品,它们遵循的通讯协议也不尽相同,归纳起来主要遵循GB/T 28181、ONVIF、PSIA等协议。
其通信协议如下所示
在CentOS7上安装ffmpeg
脚本正确调用,接下来就通过Java调用远程服务器上脚本实现视频流截图,在此借助 Ganymed SSH-2 for Java ,实现SSH远程执行脚本。
通过SSH远程执行脚本有点简单粗暴,何不将这截图功能做成服务,向外发布,更加灵活方便。故后期工作如下:
准备一台图片服务器,其主要职责有
1.图片文件存储
2.响应终端的抓图请求,并将图片保存到指定文件夹目录下
3.响应终端的合图请求,以上两者做成服务的形式,终端通过分布式调用服务,完成操作并返回结果状态
4.接收终端上传的图片
硬件需求:
1.因图片服务器上安装ffmpeg工具,其需要对视频流进行解码,并按照png格式组织编码,对计算性能要求高,所以CPU性能要好
2.作为图片文件存储服务器,存储容量要大
3.接受多终端设备连接,网口带宽要大
因为要接收反馈结果,cmd命令可以这样写
当ffmpeg执行正确时,会输出succeeded,当ffmpeg不能正确执行时,会输出failed
新建目录文件夹,将截图文件放入指定文件夹中
linux 上java调用ffmpeg转码只有几秒长
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.io.*;
import java.lang.*;
import java.util.*;
import java.text.*;
import java.net.*;
public class Test {
public static void main(String[] args) {
ListString commend = new ArrayListString();
commend.add("/usr/local/ffmpeg2/bin/./ffmpeg");
commend.add("-i");
commend.add("/opt/spzh/yysp.avi");
commend.add("-ab");
commend.add("128");
commend.add("-acodec");
commend.add("libfaac");
commend.add("-ac");
commend.add("1");
commend.add("-ar");
commend.add("22050");
commend.add("-r");
commend.add("24");
commend.add("-y");
commend.add("/opt/spzh/out/yysp18.flv");
StringBuffer test=new StringBuffer();
for(int i=0;icommend.size();i++)
test.append(commend.get(i)+" ");
System.out.println(test);
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(test.toString());
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ( (line = br.readLine()) != null);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("视频转换成功");
}
}
javaffmpeg流的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java调用ffmpeg推流、javaffmpeg流的信息别忘了在本站进行查找喔。
发布于:2022-12-14,除非注明,否则均为
原创文章,转载请注明出处。