java多媒体文件编码要怎么写,处理工具类代码实例详情介绍

这篇文章主要介绍了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>

代码

/***
   *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 %sn",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的多媒体文件编码,处理类工具解析内容就讲解到这里了,其实编程是一个开放性的答案,有不同思路或者是有其他方法可以实现地都可以在底下评论,期待你的发言。

原文地址:https://blog.51cto.com/14549930/2440322

时间: 2024-10-11 03:11:04

java多媒体文件编码要怎么写,处理工具类代码实例详情介绍的相关文章

java中IO写文件工具类

下面是一些根据常用java类进行组装的对文件进行操作的类,平时,我更喜欢使用Jodd.io中提供的一些对文件的操作类,里面的方法写的简单易懂. 其中jodd中提供的JavaUtil类中提供的方法足够我们使用,里面的方法写的非常简练,例如append,read等方法,封装更好,更符合面向对象, 这里面我写的一些方法可多都是模仿jodd,从里面进行抽取出来的. /** * 获取路径文件夹下的所有文件 * @param path * @return */ public static File[] ge

java关闭资源,自制关闭资源工具类

在网上看到一篇关于关闭资源的正确方式:http://blog.csdn.net/bornforit/article/details/6896775 该博文中的总结: (1)使用finally块来关闭物理资源(非托管资源),保证关闭操作始终会被执行: (2)关闭每个资源之前首先保证引用该资源的引用变量不为null: (3)为每个物理资源使用单独的trycatch块关闭资源,保证关闭资源时引发的异常不会影响其他资源的关闭. 在资源过多的时候,我们要在finally块中写很多的非空判断.以及try-c

java打开文件夹(含判断操作系统工具类和解压缩工具类)

1.Runtime.getRuntime().exec("explorer D:\\Java"); 2.java.awt.Desktop.getDesktop().open(new File("D:\\Java")); 4.java.awt.Desktop.getDesktop().browse(...) 3. try { String[] cmd = new String[5]; cmd[0] = "cmd"; cmd[1] = "/

Java语言Lang包下常用的工具类介绍_java - JAVA

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数.你可知道,有很多现成的工具类可用,并且代码质量都很不错,不用你写,不用你调试,只要你发现. 在 Apache Jakarta Common 中, Lang 这个 Java 工具包是所有 Apache Jakarta Common 项目中被使用最广泛的,几乎你所知道的名气比较大的软件里面都有用到它,包括 Tomcat, Weblogic, Webs

java图片裁剪处理工具类代码

剪切前:  原文:java图片裁剪处理工具类代码 源代码下载地址:http://www.zuidaima.com/share/1550463351786496.htm 剪切后:  package com.zuidaima.zhangjun.image; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import

自写Date工具类

以前写项目的时候总是在使用到了时间的转换的时候才在工具类中添加一个方法,这样很容易导致代码冗余以及转换的方法注释不清晰导致每次使用都要重新看一遍工具类.因此整理出经常使用的一些转换,用作记录,以便以后使用. 此工具类主要用于获取时间戳以及各种时间类型之间的转换. 1 package com.test; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Calen

java md5 sha 加密 的使用方法 工具类 MessageDigest

package test; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * 加密工具类 * @author gxd * */ public class EncriptUtil { public static void main(String[] args) { String str = "我爱你23" ; System.out.println(Encript

java记录对象前后修改的内容(工具类)

有时候业务需要,需记录一条记录的修改历史,但是不能为完成任务而硬编码,不靠谱 这种情况可以使用java反射来完成 对对象属性的描述可以通过自定义注解来完成,读取里面的属性进而记录修改历史. 在对象的属性上面加上注解,value设置为属性的中文描述 工具了代码如下 util类(BeanChangeUtil) 1 import java.beans.PropertyDescriptor; 2 import java.lang.reflect.Field; 3 import java.lang.ref

java springboot调用第三方接口 借助hutoool工具类 爬坑

楼主是个后端小白一枚,之前没接触过后端,只学了java基本语法,还是在学校老师教的,学的很浅,什么ssh.ssm框架都没有学,最近在自学spring boot,看书学也看不是很懂,就在b站上看教学视频,大概看了几个老师讲的,最后选了尚硅谷的视频,老师讲的很好,有点偏向底层源码解析,讲的很细,对我这个新手小白来说也不知道好不好,反正我就是跟着看了.最近接到超哥布置的一个任务,spring boot调用第三方接口,下面就讲讲我这个新手小白是怎么一步一步磕出来结果的,顺便记录一下,免得我后面忘了. 首