【发布时间】:2019-07-22 20:29:38
【问题描述】:
我正在开发一个 android 应用程序,我在其中录制视频并将其上传到服务器,但我不想将视频保存在设备上(内部存储或外部存储),在 iOS 中我使用了 AVFoundation我可以录制视频并将其上传到服务器,而无需将其保存到设备中。
我在Android中使用了两种方式录制视频:
Camera2 API 用于录制视频 - 它提供 videoURI 和路径以及 它将视频保存在内部存储中
视频捕获意图 - 这也会在保存后返回 videoURI 视频到设备
但我正在使用医疗保健应用程序,我根本不想将视频保存到设备上,目前,我将视频上传到服务器后删除,但有时视频仍保留在在将视频上传到应用程序之前最小化或退出应用程序时应用程序的内部存储,我正在寻找更好的解决方案,以便根本不将视频保存到设备,而是获取视频数据以将其上传到后台
我正在设置媒体记录器并将路径设置为保存视频的位置
final File dir = context.getExternalFilesDir(null);
mNextVideoUri = android.net.Uri.parse(String.valueOf(dir.toURI()));
return (dir == null ? "" : (dir.getAbsolutePath() + "/")) + System.currentTimeMillis() + ".nomedia";
//从我从Camera API获得的视频uri中读取视频字节的代码,我使用多部分请求将其上传到服务器
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;
【问题讨论】:
-
欢迎来到 Stackoverflow。您能否在您目前尝试上传文件的方式中添加您的源代码?这将有助于我们找到解决方案。
-
添加了代码,使用多部分请求将其发送到服务器,视频字节和与应用程序相关的其他数据分别分为两部分..但甚至在我开始上传到服务器之前,我已将视频保存到设备上,我不希望发生这种情况,谢谢!
-
好...您可以在录制视频的方式中附加代码吗?因为从理论上讲,您只需将字节直接写入您的
ByteArrayOutputStream byteBuffer甚至更好......直接将其发送到您的服务器。