暂停.....选项,如默认的相机应用程序?

时间:2015-06-01 13:06:15

标签: android mediarecorder android-mediarecorder video-recording

我一直在努力寻找更好的解决方案来暂停和恢复视频录制。 据我所知,Media Recorder类不允许在Android 4.3或更低版本的录制过程中暂停。

我找到了可以将多个视频文件合并为一个视频文件的mp4parser库。 我正在使用以下罐子:

aspectjrt-1.7.3.jar

isoparser-1.0.6.jar

问题是将它们合并在一起需要花费太长时间。 例如, 总共约5分钟的2-3个视频文件需要至少2分钟才能合并!!

我的Galaxy S3和Note 2附带的默认相机应用程序,它在视频录制中具有暂停选项。 他们暂停的视频只需不到1秒即可完成合并。

有人可以告诉我这里的错误吗?

我使用下面的代码合并视频文件:

for (ArrayList<String> PathList : VideoList) {
            VideoPathList = PathList;
        }

        for (String mMovie : VideoPathList) {
            Movie movie = MovieCreator.build(mMovie);
            MovieList.add(movie);
        }

        List<Track> videoTracks = new LinkedList<Track>();
        List<Track> audioTracks = new LinkedList<Track>();
        for (Movie mMovie : MovieList) {
            for (Track t : mMovie.getTracks()) {
                if (t.getHandler().equals("soun")) {
                    audioTracks.add(t);
                }
                if (t.getHandler().equals("vide")) {
                    videoTracks.add(t);
                }
            }
        }

          Movie result = new Movie();

          if(audioTracks.size() > 0) {
             result.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()])));
          }
          if(videoTracks.size() > 0) {
             result.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()])));
          }

          BasicContainer basicContainer = (BasicContainer) new DefaultMp4Builder().build(result);

          final String FileLocation = (UserSavedDirectoryPATH + "/");
          final File DirectoryExistCheck = new File(FileLocation);
          if(!DirectoryExistCheck.exists()) {
              DirectoryExistCheck.mkdir();
          }
          NewVideo = FileLocation + "Video " + ".mp4"; 

          FileChannel fileChannel = new FileOutputStream(new File(String.format(NewVideo))).getChannel();
          basicContainer.writeContainer(fileChannel);
          fileChannel.close();
        } catch(Exception error) {  }
        GalleryAddNewVideo(NewVideo);   
        Delete_VideoPaths(VideoPathList);

非常感谢您的帮助,

非常感谢

1 个答案:

答案 0 :(得分:0)

也许用raw进行录制可能会提高性能:

  1. 将录制内容保存为原始文件(而不是采用编码格式)。
  2. 每次用户恢复录制时,追加到同一原始文件的末尾。
  3. 最后,在停止时,将原始文件转换为所需的格式(mp4或其他)
  4. 这样,您就不需要mp4parser或其他任何东西来合并视频。