gpt4 book ai didi

java - 避免序列化视频并将其保存在设备上-Android

转载 作者:太空宇宙 更新时间:2023-11-04 09:30:19 24 4
gpt4 key购买 nike

我正在开发一个Android应用程序,我在其中录制视频并将其上传到服务器,但我不想将视频保存在设备上(内部存储或外部存储),在iOS中我使用了AVFoundation,我可以录制视频并将其上传到服务器而不将其保存到设备。

我在Android中使用了两种方式录制视频:

  1. Camera2 API 用于录制视频 - 提供 videoURI 和路径以及它将视频保存在内部存储中

  2. 视频捕获 Intent - 这也会在保存后返回 videoURI将视频传输到设备

但是我在医疗保健应用程序中工作,我根本不想将视频保存到设备上,目前,我在将视频上传到服务器后删除视频,但有时当应用程序最小化或退出时,在视频上传到应用程序之前,视频仍保留在应用程序的内部存储中,我正在寻找更好的解决方案,以不将视频保存到设备上,而是获取视频数据将其上传到后端

我正在设置 Media Recorder 并将路径设置为保存视频的位置

final File dir = context.getExternalFilesDir(null);
mNextVideoUri = android.net.Uri.parse(String.valueOf(dir.toURI()));
return (dir == null ? "" : (dir.getAbsolutePath() + "/")) + System.currentTimeMillis() + ".nomedia";

//从相机API获取的视频uri中读取视频字节的代码,并使用mutlipart请求将其上传到服务器

InputStream iStream = null;
try {
iStream = context1.getContentResolver().openInputStream(videoUri);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
byte[] bytesResult = null;
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int bufferSize = 1 * 1024 * 1024;


byte[] buffer = new byte[bufferSize];
try {
int len;
while ((len = iStream.read(buffer)) != -1) {
try {
byteBuffer.write(buffer, 0, len);
} catch (Exception e) {
e.printStackTrace();
}
}
bytesResult = byteBuffer.toByteArray();
} catch (IOException e) {
e.printStackTrace();
} finally {
// close the stream
try {
byteBuffer.close();
} catch (IOException ignored) { /* do nothing */ }
}
videoBytes = bytesResult;

最佳答案

你可以尝试一下这个问题答案中的方法。

Android record video into a circular buffer and storing it in RAM

基本上使用 JavaCV 库在内存中录制,然后刷新该内存,也称为分块或整个上传,具体取决于缓冲区的大小和视频录制限制。

关于java - 避免序列化视频并将其保存在设备上-Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57153303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com