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

标签 java android video

我正在开发一个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/

相关文章:

java - tomcat7 的当前服务器状态信息

java - java中如何将对象发送到服务器

java - 为什么我们需要 9-patch?

java - Android 复杂的折叠工具栏过渡

java - Android 视频录制格式 .mkv

javascript - android 4 上的 video.js requestFullScreen

java - ClassCastException 使用 Class.cast 使用泛型

java - 向 JPanel 添加组件

java.lang.IllegalArgumentException : Unable to create call adapter for interface retrofit. 调用

javascript - HTML5 将加密的视频帧绘制到 Canvas (使用 clearkey 的加密媒体扩展)