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); 构造函数 ...
随机推荐
- bitcoind搭建
https://degreesofzero.com/article/installing-bitcoind-on-ubuntu.html1. sudo apt-get install python-s ...
- linux内核无锁缓冲队列kfifo原理
Linux kernel里面从来就不缺少简洁,优雅和高效的代码 比如,通过限定写入的数据不能溢出和内存屏障实现在单线程写单线程读的情况下不使用锁.因为锁是使用在共享资源可能存在冲突的情况下.还用设置b ...
- Python 字符串 (3) 持续更新
字符串操作 虽然字符串也是一种序列,但是它和元组一样,不可变的.当你想对它修改时,会引发异常.如 >>> strings = "Let's go">> ...
- vulkan asynchronous compute
https://www.youtube.com/watch?v=XOGIDMJThto https://www.khronos.org/assets/uploads/developers/librar ...
- Vue-项目重要配置
Vue配置axios ''' 1)安装插件(一定要在项目目录下): >: cnpm install axios 2)在main.js中配置: import axios from 'axios' ...
- bzoj1458: 士兵占领(最大流)
题目描述 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占领了整个棋盘当满足第i行至少放置了Li个士兵 ...
- RabbitMQ概要
安装: 1.Erlang安装 安装RabbitMQ需要先安装Erlang,这里选择otp21.2-win-64下载完成后安装 资源: http://www.erlang.org/downloads 2 ...
- No module named 'pip._vendor.progress.helpers' 的解决方法
莫名其妙的pip出现故障了 ModuleNotFoundError: No module named ‘pip._vendor.progress.helpers’ 在百度搜索了一圈也没看到这个错误的解 ...
- CWnd与HWND,GetSafeHwnd()与m_hWnd
HWND是Windows系统中的窗口句柄,CWnd是MFC中的窗体类,两者的所属不同.CWnd对HWND进行了封装类,更加高级也更加简化. HWND是Window内核处理对象,系统通过HWND进行操作 ...
- js+下载文件夹
一.此方法火狐有些版本是不支持的 window.location.href = 'https://*****.oss-cn-**.aliyuncs.com/*********'; 二.为了解决火狐有些 ...