zoukankan      html  css  js  c++  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>

    合并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
    ",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);
        }
  • 相关阅读:
    属性,选择器和css
    笔记
    浏览器
    单位
    marquee 滚动标签
    双飞翼布局与圣杯布局
    随便看看吧
    光标的形状 颜色的表示方法
    如何实现浏览器title中的小图标
    解决浏览器兼容问题 补充
  • 原文地址:https://www.cnblogs.com/passedbylove/p/11424753.html
Copyright © 2011-2022 走看看