【问题标题】:Divide the video to bytes将视频划分为字节
【发布时间】:2012-05-16 08:09:55
【问题描述】:

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

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

有什么帮助吗?

【问题讨论】:

  • 你想做什么?将视频内容转换为字节或文件名转换为字节?
  • 逐字节比较视频文件有什么意义?可以逐帧理解,但逐字节意义不大。
  • 我想把视频的内容转换成字节

标签: java video byte video-encoding bytebuffer


【解决方案1】:
String filename = "D:/try.avi";
byte[] myByteArray = filename.getBytes();

这是将文件 name 转换为字节,而不是文件 内容。

至于读取文件内容,见Java教程Basic I/O课。

【讨论】:

  • 那你知道如何转换文件的内容吗?
  • 再一次,这次声音大一点。 为什么?您打算为用户提供什么功能?
  • 我只想找到通过网状网络传输视频的服务质量,然后绘制结果,因此我想将视频转换为字节数据以进行统计
  • "mesh network" 呵呵,我的新名词。所以真正的问题归结为验证“通过网络发送”到原始文件的副本?
  • 唯一的问题是以字节为单位获取视频内容
【解决方案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;
    }

【讨论】:

  • System.IO.File.ReadAllBytes(filename); 呵呵..没听说过IO包或者那个方法。你能链接到 JavaDocs 吗?
  • 那是java吗?抱歉,我没有看到标签 :))) 这就是我们拥有两种如此相似的语言时得到的结果。
  • “那是java吗?” 和开始一样。 'Java',而不是'java'。
  • 我用java示例更新了答案,谢谢指出。
  • 虽然我同意拼写 JAVA 或 javaA 是错误的,虽然我试图支持所有语言倡导者按照他们的意愿拼写他们的语言(我不喜欢任何人将 Lisp 拼写为 LISP) ,我觉得Java也是java,Lisp也是lisp。虽然 C 不是 c。
【解决方案3】:

如果您想阅读视频文件的内容,请使用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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2021-08-15
    • 2011-12-16
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 2018-03-19
    相关资源
    最近更新 更多