将视频划分为字节

时间:2012-05-16 08:09:55

标签: java video byte video-encoding bytebuffer

我想将视频转换为它给我结果的字节,但我认为结果不正确,因为我测试了不同的视频,并给了我相同的结果所以 可以任何人帮忙请做如何将视频转换为字节

String filename = "D:/try.avi";
byte[] myByteArray = filename.getBytes();
for(int i = 0; i<myByteArray.length;i ++)
{
    System.out.println(myByteArray[i]);
}

请帮忙吗?

3 个答案:

答案 0 :(得分:4)

String filename = "D:/try.avi";
byte[] myByteArray = filename.getBytes();

即将文件名称转换为字节,而不是文件内容。

至于阅读文件内容,请参阅Java教程的Basic I/O课程。

答案 1 :(得分:2)

相同容器格式的视频以相同的字节开头。使用的编解码器确定实际的视频文件。

如果您计划开发视频应用程序,我建议您先阅读有关容器文件格式和编解码器的更多信息。

但是你有一个不同的问题。正如Andrew Thompson正确指出的那样,你得到了文件名字符串的字节

正确的方法是:

private static File fl=new File("D:\video.avi");
byte[] myByteArray = getBytesFromFile(fl);

请注意,终端通常具有固定的缓冲区大小(在Windows上,它是几行),因此输出大量数据只会显示最后几行。

编辑:以下是getBytesFromFile的实现;一位java专家可能会提供更多标准方法。

public static byte[] getBytesFromFile(File file) throws IOException {
        InputStream is = openFile(file.getPath());

        // Get the size of the file
        long length = file.length();

        if (length > Integer.MAX_VALUE) {
            // File is too large
            Assert.assertExp(false);
            logger.warn(file.getPath()+" is too big");
        }

        // Create the byte array to hold the data
        byte[] bytes = new byte[(int)length];

        // debug - init array
        for (int i = 0; i < length; i++){
            bytes[i] = 0x0;
        }

        // Read in the bytes
        int offset = 0;
        int numRead = 0;
        while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
            offset += numRead;
        }

        // Ensure all the bytes have been read in
        if (offset < bytes.length) {
            throw new IOException("Could not completely read file "+file.getName());
        }

        // Close the input stream and return bytes
        is.close();
        return bytes;
    }

答案 2 :(得分:-2)

如果您想阅读视频文件的内容,请使用File

String filename = "D:/try.avi";
File file=new File(filename);
byte myByteArray[]=new byte[(int)file.length()];
RandomAccessFile raf=new RandomAccessFile(file,"rw");
raf.read(myByteArray);