All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jcodec.movtool.streaming.StreamingMain Maven / Gradle / Ivy

The newest version!
package org.jcodec.movtool.streaming;
import java.lang.IllegalStateException;
import java.lang.System;


import static java.lang.System.currentTimeMillis;

import org.jcodec.common.io.IOUtils;
import org.jcodec.containers.mp4.MP4Util;
import org.jcodec.containers.mp4.boxes.MovieBox;
import org.jcodec.containers.mp4.boxes.TrakBox;
import org.jcodec.movtool.streaming.tracks.CachingTrack;
import org.jcodec.movtool.streaming.tracks.FilePool;
import org.jcodec.movtool.streaming.tracks.Prores2AVCTrack;
import org.jcodec.movtool.streaming.tracks.RealTrack;
import org.jcodec.movtool.streaming.tracks.StereoDownmixTrack;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

/**
 * This class is part of JCodec ( www.jcodec.org ) This software is distributed
 * under FreeBSD License
 * 
 * @author The JCodec project
 * 
 */
public class StreamingMain {

    public static void main1(String[] args) throws IOException {

        File m1 = new File(System.getProperty("user.home") + "/Desktop/supercool.mov");

        FilePool ch1 = new FilePool(m1, 10);
        MovieBox mov1 = MP4Util.parseMovie(m1);
        TrakBox v1 = mov1.getVideoTrack();

        RealTrack rt = new RealTrack(mov1, v1, ch1);
        VirtualTrack rt1 = new StereoDownmixTrack(new RealTrack(mov1, mov1.getAudioTracks().get(0), ch1),
                new RealTrack(mov1, mov1.getAudioTracks().get(1), ch1), new RealTrack(mov1, mov1.getAudioTracks()
                        .get(2), ch1), new RealTrack(mov1, mov1.getAudioTracks().get(3), ch1));

        long start = currentTimeMillis();
        ScheduledExecutorService cachePolicyExec = Executors.newSingleThreadScheduledExecutor();

        VirtualMovie vm = new VirtualMP4Movie(new CachingTrack(new Prores2AVCTrack(rt, v1.getCodedSize()), 10,
                cachePolicyExec), new CachingTrack(rt1, 10, cachePolicyExec));
        System.out.println(currentTimeMillis() - start);

        BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(System.getProperty("user.home")
                + "/Desktop/megashit.mov"));

        for (int off = 0; off < vm.size();) {
            int to = (int) (10000 * Math.random()) + off;

            MovieRange mr;
            if (off > 20) {
                mr = new MovieRange(vm, off - 20, to);
                for (int i = 0; i < 20; i++)
                    mr.read();
                // System.out.println("RANGE: " + (off - 20) + ", " + to);
            } else {
                mr = new MovieRange(vm, off, to);
                // System.out.println("RANGE: " + off + ", " + to);
            }

            IOUtils.copy(mr, os);
            mr.close();
            off = to;
        }

        vm.close();

        os.close();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy