java多媒体文件编码、处理工具类
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-core</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-kafka</artifactId>
<version>1.0.4</version>
</dependency>
<dependency>
<groupId>org.jcodec</groupId>
<artifactId>jcodec</artifactId>
<version>0.2.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.humble</groupId>
<artifactId>humble-video-all</artifactId>
<version>0.3.0</version>
</dependency>
<dependency>
<groupId>org.mp4parser</groupId>
<artifactId>isoparser</artifactId>
<version>1.9.39</version>
</dependency>
合并ffmpeg切割的hls音视频碎片文件
/***
*https://stackoverflow.com/questions/38123693/how-to-concatenate-merge-two-videos-in-a-new-video-file-in-java
* @param aggregate 合并待输出文件
* @param segments MPEG transport stream(FFMpeg mpegts)、 MPEG-2 TS视频;波形声音
* @throws InterruptedException
* @throws IOException
*/
private void merge(File aggregate, Collection<File> segments) throws InterruptedException, IOException { Muxer muxer = Muxer.make(aggregate.toString(), MuxerFormat.getFormat(96), "wav"); final MediaPacket packet = MediaPacket.make();
long dts_offset = 0;
long pts_offset = 0; for (File segment : segments) {
Demuxer demuxer = Demuxer.make();
//option https://ffmpeg.org/ffmpeg-formats.html
demuxer.open(segment.toString(), null, false, true, null, null);
if (muxer.getState() == Muxer.State.STATE_INITED) {
int numStreams = demuxer.getNumStreams();
for (int s = 0; s < numStreams; s++) {
DemuxerStream demuxerStream = demuxer.getStream(s);
Decoder decoder = demuxerStream.getDecoder();
muxer.addNewStream(decoder);
}
muxer.open(null, null);
}
long dts_max = 0;
long pts_max = 0;
while (demuxer.read(packet) >= 0) {
if (packet.isComplete()) {
packet.setDts(packet.getDts() + dts_offset);
packet.setPts(packet.getPts() + pts_offset);
dts_max = packet.getDts() + 1;
pts_max = packet.getPts() + 1; muxer.write(packet, false);
}
}
dts_offset = dts_max;
pts_offset = pts_max;
demuxer.close();
}
muxer.close();
}
@Test
public void testFormat()
{
MuxerFormat format = MuxerFormat.getFormat(128);
System.out.println(format);
Collection<MuxerFormat> formats = MuxerFormat.getFormats();
formats.stream().forEach(this::out);
} void out(MuxerFormat format)
{
System.out.printf("%s %s\n",format.getName(),format.getMimeType());
}
@Test
public void test() throws IOException, InterruptedException {
String directory = "C:\\Users\\Administrator\\AppData\\Local\\Temp\\8ad088a2-0bb3-41dc-89d9-2c57ef8414b0";
List<File> files = Files.list(Paths.get(directory)).map(path -> path.toFile()).filter(file -> file.getName().endsWith(".ts"))
.collect(Collectors.toList());
File dest = new File(directory+"\\dest.wav");
merge(dest,files);
}
java多媒体文件编码、处理工具类的更多相关文章
- Rhino+envjs-1.2.js 在java运行网站js 工具类
java爬虫遇到个页面加密的东西,找了些资料学习学习 做了个java运行js的工具类,希望对大家有用,其中用到client(获取js)可以自行换成自己的client.主要是用了 Rhino就是Java ...
- java中常用的工具类(一)
我们java程序员在开发项目的是常常会用到一些工具类.今天我汇总了一下java中常用的工具方法.大家可以在项目中使用.可以收藏!加入IT江湖官方群:383126909 我们一起成长 一.String工 ...
- Java学习-041-颜色工具类(RGB,HEX)
在日常的网页开发中,经常需要进行颜色数值获取.转换,例如获取红色,获取蓝色,获取绿色,RGB转十六进制颜色,十六进制颜色转RGB等,因而在学习过程中,写了一个小工具类,仅供各位小主参考! 多不闲言,直 ...
- JAVA中封装JSONUtils工具类及使用
在JAVA中用json-lib-2.3-jdk15.jar包中提供了JSONObject和JSONArray基类,用于JSON的序列化和反序列化的操作.但是我们更习惯将其进一步封装,达到更好的重用. ...
- JAVA自动生成正则表达式工具类
经过很久的努力,终于完成了JAVA自动生成正则表达式工具类.还记得之前需要正则,老是从网上找吗?找了想修改也不会修改.现在不用再为此烦恼了,使用此生成类轻松搞定所有正则表达式.赶快在同事面前炫一下吧. ...
- java 二进制数字符串转换工具类
java 二进制数字符串转换工具类 将二进制转换成八进制 将二进制转换成十进制 将二进制转换成十六进制 将十进制转换成二进制 package com.iteye.injavawetrust.ad; i ...
- Java学习-049-正则工具类
自去年九月份决定再次入学和职业资格进阶,开始备战二者考试至今,以及当下进行中的职称申请,犹如孤独的狼,不断前行在路上,而今凡凡总总的已历8月... 不感慨了,如下为一园友需要的正则工具类,直接上码: ...
- Java 后台验证的工具类
Java 后台验证的工具类 public class ValidationUtil { //手机号 public static String mobile = "^( ...
- java后端时间处理工具类,返回 "XXX 前" 的字符串
转自:https://www.cnblogs.com/devise/p/9974672.html 我们经常会遇到显示 "某个之间之前" 的需求(比如各种社交软件,在回复消息时,显示 ...
- Java日期时间实用工具类
Java日期时间实用工具类 1.Date (java.util.Date) Date(); 以当前时间构造一个Date对象 Date(long); 构造函数 ...
随机推荐
- Python Flask学习笔记(1)
1.搭建虚拟环境 a. 安装 virtualenv : pip3 install virtualenv b. 建立虚拟环境 : 任意目录下建立一个空文件(我的是 Py_WorkSpace) ,在该文件 ...
- CentOS7 字体安装卸载
CentOS7 默认安装有 Fonts 程序, 所以能直接双击打开字体文件, 并且可以直接点击上图的 Install 按钮安装字体.采用这种安装方法,字体会被安装在 ~/.local/share/fo ...
- django 发送邮件功能
setting.py # 邮件配置 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.e ...
- C# 通过Process.Start() 打开程序 置顶方法
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) { try { foreach ...
- [Nx] Note for learning Nx
Proxy configuration: When we have already fews applications running in the workspace, and we want to ...
- 请求出现Referrer Policy: no-referrer-when-downgrade
请求出现Referrer Policy: no-referrer-when-downgrade,一直请求不成功,原因是请求连接出现问题,我这里的问题是api前少了/,导致字段和域名拼接起来,所以请求U ...
- has(expr|ele)保留包含特定后代的元素,去掉那些不含有指定后代的元素。
has(expr|ele) 概述 保留包含特定后代的元素,去掉那些不含有指定后代的元素.大理石平台等级 .has()方法将会从给定的jQuery对象中重新创建一组匹配的对象.提供的选择器会一一测试原先 ...
- Crystal Report中文顯示亂碼
1.首先要確定該中文字體在OS裏有沒有安裝 C:\WINDOWS\Fonts 這個folder下沒有找到的話就從別的機器拷貝ttf字體文件,然後 File -> Install New Font ...
- 使用ice-plugin-fusion给icedesign的模板加个主题(theme)
最近一直处于半失业状态,好多年没有更新对前端的理解了,闲来看看前端技术的发展.因为一直是个草台班子,身兼多职东看看西看看,一直没太搞清楚iceworks.ant design, fusion等等一堆阿 ...
- IntelliJ IDEA 运行项目的时候提示 Command line is too long 错误
在 IntelliJ IDEA 项目运行的时候收到了下面的错误提示: Error running 'Application': Command line is too long. Shorten co ...