Как приостановить/возобновить запись видео

Я хочу реализовать функцию паузы/возобновления во время записи видео. MediaRecorder не имеет никакого метода для паузы/возобновления. В родном приложении камеры есть функция паузы/возобновления. Возможно ли это реализовать?

Пожалуйста, помогите мне. Любая помощь или руководство будут высоко оценены.


person abhishek kumar gupta    schedule 25.09.2014    source источник


Ответы (1)


Наконец-то я нашел ответ :) Я изучаю ffmpeg, он кажется более глубоким, и еще несколько дней копаюсь в нем, но не могу найти подходящий ресурс для ffmepg, и я пытаюсь использовать библиотеку mp4parser и успешно выполнил свое требование.

Код для слияния нескольких видео

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.

person Sandeep Kumar    schedule 25.09.2014
comment
Спасибо за ответ. Но есть ли другой способ, кроме как вручную объединить видеофайлы? - person abhishek kumar gupta; 25.09.2014
comment
Это не очень хорошее решение, так как для объединения 2 видео потребуется более 2 минут, общая продолжительность которых составляет около 5 минут... - person IYM-14; 02.06.2015
comment
немного поздно, но это решение создаст проблему синхронизации аудио/видео. как вы видите, когда вы создаете видео с помощью mediaRecorder, аудио- и видеопотоки имеют разную длину. разница будет между ~ 50 и ~ 100 мс (как минимум). если вы попытаетесь сшить 5 видео, вы увидите, что аудио/видео рассинхронизировано примерно на 500–1000 мс, что заметно. Кроме того, если вы попытаетесь записать видео и аудио отдельно, вы обнаружите, что запуск MediaRecorder займет от 250 до 800 мс, а AudioRecord (при условии, что вы его используете) запустится менее чем за 100 мс. их повторное слияние создаст проблему синхронизации. - person Ankit; 16.09.2015
comment
если для вашей реализации требуется максимум пара стежков (пауз), вы можете использовать это решение. - person Ankit; 16.09.2015