2014-09-25 259 views
2

我想在录制视频时实现暂停/恢复功能。 MediaRecorder没有任何暂停/恢复的方法。本机相机应用程序具有暂停/恢复功能。有没有可能实现它?如何暂停/恢复视频录制

请指导我。任何帮助或指导将不胜感激。

回答

2

最后我找到了答案:) 我研究有关的FFmpeg似乎更深入,一些多天挖周围,但不能得到ffmepg 适当的资源,我尝试使用mp4parser lib和成功地完成了我的要求。

代码对于合并多个视频

public class MergeVide extends AsyncTask<String, Integer, String> { 

@Override 
protected void onPreExecute() { 
    progressDialog = ProgressDialog.show(Video.this, 
      "Preparing for upload", "Please wait...", true); 
    // do initialization of required objects objects here 
}; 

@Override 
protected String doInBackground(String... params) { 
    try { 
     String paths[] = new String[count]; 
     Movie[] inMovies = new Movie[count]; 
     for (int i = 0; i < count; i++) { 
      paths[i] = path + filename + String.valueOf(i + 1) + ".mp4"; 
      inMovies[i] = MovieCreator.build(new FileInputStream(
        paths[i]).getChannel()); 
     } 
     List<Track> videoTracks = new LinkedList<Track>(); 
     List<Track> audioTracks = new LinkedList<Track>(); 
     for (Movie m : inMovies) { 
      for (Track t : m.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 out = (BasicContainer) new DefaultMp4Builder() 
       .build(result); 

     @SuppressWarnings("resource") 
     FileChannel fc = new RandomAccessFile(String.format(Environment 
       .getExternalStorageDirectory() + "/wishbyvideo.mp4"), 
       "rw").getChannel(); 
     out.writeContainer(fc); 
     fc.close(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    String mFileName = Environment.getExternalStorageDirectory() 
      .getAbsolutePath(); 
    mFileName += "/wishbyvideo.mp4"; 
    filename = mFileName; 
    return mFileName; 
} 

@Override 
protected void onPostExecute(String value) { 
    super.onPostExecute(value); 
    progressDialog.dismiss(); 
    Intent i = new Intent(Video.this, VideoUpload.class); 
    i.putExtra("videopath", value); 
    i.putExtra("id", id); 
    i.putExtra("name", name); 
    i.putExtra("photo", photo); 
    startActivity(i); 
    finish(); 
    } 
} 

计数无非是视频文件的数量。

上述代码用于合并更多视频并将最终代码发送到另一个活动,因为我决定预览该视频。 使用上面的代码之前请确保使用mp4parser lib。

+0

感谢您的回复。但除手动连接视频文件外,还有其他方法吗? – 2014-09-25 11:13:16

+0

如果你接受上述answer.please投票并接受支持的答案 – 2014-09-25 11:17:15

+0

这不是一个好的解决方案,因为它将花费2+分钟合并2视频总共约5分钟... – 2015-06-02 03:25:34