我正在开发一个Android应用程序,我在其中录制视频并将其上传到服务器,但我不想将视频保存在设备上(内部存储或外部存储),在iOS中我使用了AVFoundation,我可以录制视频并将其上传到服务器而不将其保存到设备。
我在Android中使用了两种方式录制视频:
Camera2 API 用于录制视频 - 提供 videoURI 和路径以及 它将视频保存在内部存储中
视频捕获 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/