视频文件到字符串和返回 - 损坏的文件

时间:2016-04-17 18:48:54

标签: java android file video fileutils

我正在编写一个需要5秒钟视频(.mp4文件)的应用程序,并将其作为base64字符串上传到服务器。用户可以下载视频,此时应将字符串转换回文件。

我遇到了保存下载文件的问题,但它比原始文件略小(比原始文件小2到3 KB)且无法播放。每次拍摄视频时都不会发生此问题;我一直试图找到这种行为的模式,但还没有找到。

videoFile是通过MediaRecorder录制创建的文件。我可以毫无问题地播放这个原始文件。

编码片段:

//videoFile path: Environment.getExternalStorageDirectory() + "/Pictures/" + timestamp + ".mp4"
byte[] bytes = FileUtils.readFileToByteArray(videoFile);
String encodedVideo = Base64.encodeToString(bytes, Base64.URL_SAFE);

解码片段:

File download = new File(Environment.getExternalStorageDirectory() +"/Pictures/test_"+videoFile.getName());
byte[] decode = Base64.decode(encodedVideo, Base64.URL_SAFE);
FileUtils.writeByteArrayToFile(download, decode);
Log.i("compare arrays",""+(Arrays.toString(bytes)).compareTo(Arrays.toString(decoded)));

下载的文件存储在与原始文件相同的目录中。

修改以澄清:

“比较数组”Log语句的结果为0,因此数组bytesdecode应具有相同的内容。

我添加了其他日志语句:

Log.i("compare contents", ""+FileUtils.contentEquals(videoFile,download));
Log.i("original checksum", ""+FileUtils.checksumCRC32(videoFile));
Log.i("download checksum", ""+FileUtils.checksumCRC32(download));

更直接地比较文件的内容。

比较数组的日志语句总是返回0,但contentEquals日志语句并不总是如此。如果为false,则文件的校验和不同。由于字节数组具有相同的内容,我相信校验和和实际文件内容也是一样的。这显然是不正确的,但我不知道如何解决这个问题。同样,我没有找到下载文件不正确的可识别模式。

感谢任何帮助。我哪里错了?

0 个答案:

没有答案