Невозможно записать видео, когда другое приложение для записи экрана работает в Android

Я использую MediaRecorder для записи видео. в то время как сторонний рекордер экрана работает во время записи мультимедиа за исключением незаконного состояния. Все работает как положено, если я убью приложение для записи экрана. Существует ли элегантное решение, позволяющее моему приложению получать доступ к MediaRecorder, даже если другое приложение уже использует его?

1 ответ

Решение

Только одно приложение одновременно может получить доступ к микрофону. пока приложение для записи экрана работает и может получить доступ к микрофону, когда я пытался записать видео с помощью встроенной встроенной камеры, но не могу записать видео из-за того, что микрофон занят другим приложением.

Кроме того, не существует стандартного способа сообщить другому приложению о том, что вы хотите получить доступ к микрофону (чтобы они высвобождали ресурсы и позволяли вам получить к нему доступ). Я бы порекомендовал вам просто сообщить пользователю, что микрофон в настоящее время недоступен, потому что вы больше ничего не можем сделать, или мы можем записать видео без звука.

Используя приведенный ниже код, я записал видео без звука.

private boolean prepareVideoRecorder() {
    mCamera = Camera.open(findBackFacingCamera());
    mediaRecorder = new MediaRecorder();
    // store the quality profile required
    windowwidth = getWindowManager().getDefaultDisplay().getWidth();
    CamcorderProfile profile;
    if (windowwidth > 2000) {
        profile= CamcorderProfile.get(camid, CamcorderProfile.QUALITY_HIGH);
    } else {
        profile= CamcorderProfile.get(camid, CamcorderProfile.QUALITY_480P);
    }
    // Step 1: Unlock and set camera to MediaRecorder
    mCamera.unlock();
    mediaRecorder.setCamera(mCamera);

    // Step 2: Set sources value i.e. CAMERA,SURFACE, or DEFAULT
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

    // Step 3: Set all other values contained in profile except audio settings
    mediaRecorder.setOutputFormat(profile.fileFormat);
    mediaRecorder.setVideoEncoder(profile.videoCodec);
    mediaRecorder.setVideoEncodingBitRate(profile.videoBitRate);
    mediaRecorder.setVideoFrameRate(profile.videoFrameRate);
    mediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);

    // Step 4: Seting output file
   // mediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString());
    File videoStorageDir = Const.getFileDirectory(MainActivity.this);
    mediaRecorder.setOutputFile(videoStorageDir.getPath()+ File.separator + "/videofile.mp4");

    // Step 5: Set the preview output
    mediaRecorder.setPreviewDisplay(mvPreview.getHolder().getSurface());

    mediaRecorder.setMaxDuration(42000); // for 40 second (you can set video recording limit here)

    // Step 6: Prepare configured MediaRecorder
    try {
        mediaRecorder.prepare();
    } catch (IllegalStateException e) {
        releaseMediaRecorder();
        return false;
    } catch (IOException e) {
        releaseMediaRecorder();
        return false;
    }
    return true;
}
Другие вопросы по тегам