Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: Java Video Compression , +
Below code is not working to re-generate my compressed video. Could you please any one help me on this ?

atform, i am struggling to resolve this problem. Could you please any one help me on this.?
 
public class CompressionTest
{
    public static void main(String[] args)
    {
        Compressor compressor = new Compressor();
 
<pre>
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    FileInputStream fis=null;
    File file=null;
 
    try
    {
        URL uri=CompressionTest.class.getResource("/Files/Video.mp4");
        file=new File(uri.getPath());
        fis = new FileInputStream(file);
    } 
    catch ( FileNotFoundException fnfe )
    {
        System.out.println( "Unable to open input file");
    }
 
    try 
    {
 
        byte[] videoBytes = getBytesFromFile(file);
 
        System.out.println("CompressionVideoToCompress is: '" +videoBytes + "'");
 
        byte[] bytesCompressed = compressor.compress(videoBytes);
 
        System.out.println("bytesCompressed is: '" +bytesCompressed+ "'");
 
        byte[] bytesDecompressed=compressor.decompress(bytesCompressed);
 
        System.out.println("bytesDecompressed is: '" +bytesDecompressed+ "'");
 
        FileOutputStream out = new FileOutputStream("A.mp4");
        out.write(bytesDecompressed,0,bytesDecompressed.length-1);
        out.close();
 
    } 
    catch (IOException e) 
    {
        // TODO Auto-generated catch block
        System.out.println("bytesCompressed is: '");
    }
 
}
 
public static byte[] getBytesFromFile(File file) throws IOException 
{
    InputStream is = new FileInputStream(file);
 
    // Get the size of the file
    long length = file.length();
 
    // You cannot create an array using a long type.
    // It needs to be an int type.
    // Before converting to an int type, check
    // to ensure that file is not larger than Integer.MAX_VALUE.
    if (length &gt; Integer.MAX_VALUE) {
        // File is too large
    }
 
    // Create the byte array to hold the data
    byte[] bytes = new byte[1064];
 
    // Read in the bytes
    int offset = 0;
    int numRead = 0;
    while (offset &lt; bytes.length
           && (numRead=is.read(bytes, offset, bytes.length-offset)) &gt;= 0)
    {
        offset += numRead;
    }
 
    // Ensure all the bytes have been read in
    if (offset &lt; bytes.length) {
        throw new IOException("Could not completely read file "+file.getName());
    }
 
    // Close the input stream and return bytes
    is.close();
    return bytes;
}

}

class Compressor
{
public Compressor()
{}
 
public byte[] compress(byte[] bytesToCompress)
{
 
    Deflater deflater = new Deflater();
    deflater.setInput(bytesToCompress);
    deflater.finish();
 
    byte[] bytesCompressed = new byte[Short.MAX_VALUE];
 
    int numberOfBytesAfterCompression = deflater.deflate(bytesCompressed);
 
    byte[] returnValues = new byte[numberOfBytesAfterCompression];
 
    System.arraycopy
    (
        bytesCompressed,
        0,
        returnValues,
        0,
        numberOfBytesAfterCompression
    );
 
    return returnValues;
}
 
public byte[] decompress(byte[] bytesToDecompress)
{
    Inflater inflater = new Inflater();
 
    int numberOfBytesToDecompress = bytesToDecompress.length;
 
    inflater.setInput
    (
        bytesToDecompress,
        0,
        numberOfBytesToDecompress
    );
 
    int compressionFactorMaxLikely = 3;
 
    int bufferSizeInBytes =
        numberOfBytesToDecompress
        * compressionFactorMaxLikely;
 
    byte[] bytesDecompressed = new byte[bufferSizeInBytes];
 
    byte[] returnValues = null;
 
    try
    {
        int numberOfBytesAfterDecompression = inflater.inflate(bytesDecompressed);
 
        returnValues = new byte[numberOfBytesAfterDecompression];
 
        System.arraycopy
        (
            bytesDecompressed,
            0,
            returnValues,
            0,
            numberOfBytesAfterDecompression
        );
 
    }
    catch (DataFormatException dfe)
    {
        dfe.printStackTrace();
    }
 
    inflater.end();
 
    return returnValues;
}

}
Posted 17-Feb-13 21:54pm
Daveedu429
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

Deflater and Inflater are presumably for zip file handling and not for video usage. Try finding a library for video handling instead.
  Permalink  
Comments
Daveedu at 18-Feb-13 4:33am
   
As i new to Java, i am not able to find the alternative way for this. Could you please direct the way to compress the video?
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 2

Be aware that characters (not bytes) in java are wide characters - each character is 16 bits wide. A byte is 8 bits. In almost every other language, a character defaults to 8 bit form.
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 475
1 Sergey Alexandrovich Kryukov 405
2 Maciej Los 290
3 ProgramFOX 265
4 CHill60 200
0 OriginalGriff 490
1 Sergey Alexandrovich Kryukov 405
2 Maciej Los 285
3 ProgramFOX 265
4 Peter Leow 210


Advertise | Privacy | Mobile
Web01 | 2.8.150331.1 | Last Updated 18 Feb 2013
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100