如何暂停/恢复视频录制

时间:2014-09-25 09:51:34

标签: android mediarecorder android-mediarecorder

我想在录制视频时实现暂停/恢复功能。 MediaRecorder没有任何暂停/恢复方法。原生相机应用程序具有暂停/恢复功能。是否可以实施它?

请指导我。任何帮助或指导都将受到赞赏。

1 个答案:

答案 0 :(得分: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。