Параллельное использование MediaRecorder.AudioSource.CAMCORDER - PullRequest
0 голосов
/ 29 августа 2018

У меня странная проблема, и я не могу найти ответ. Я использовал wowza для трансляции в прямом эфире. Он используется внутри AudioRecord recorder = new AudioRecord(this.mAudioSource, ... ) и mAudioSource по умолчанию = 5 (например, MediaRecorder.AudioSource.CAMCORDER), он работает хорошо, но в то же время мне нужно записать это видео со звуком в памяти устройства с большим качеством видео.

Для внутренней записи я использую MediaRecorder.

        mWZCameraView.getCamera().getPlatformDevice().unlock();

        mMediaRecorder = new MediaRecorder();
        mMediaRecorder.setCamera(mWZCameraView.getCamera().getPlatformDevice());

        //mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
        mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);

        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

        //mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

        mMediaRecorder.setVideoEncodingBitRate(15000000);
        mMediaRecorder.setVideoFrameRate(30);
        mMediaRecorder.setVideoSize(1920, 1080);

        try {
            mMediaRecorder.prepare();
        } catch (Exception e) {
            // This is thrown if the previous calls are not called with the
            // proper order
            e.printStackTrace();
        } finally {
            mMediaRecorder.start();
        }

Как вы можете видеть setAudioSource в комментарии, в этом случае живое видео получает аудио, а видео на устройстве не получает аудио. Если открыто setAudioSource & setAudioEncoder, мое живое видео будет без аудиозаписи и на устройстве со звуком.

Я пробовал разные комбинации AudioSource и AudioEncoder, но он всегда делает аудиозапись в одном из видео.

Я не могу найти ответ, если возможно использовать CAMCORDER параллельно.

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

1 Ответ

0 голосов
/ 04 сентября 2018

Кажется, я нашел ответ, может, кому-то это поможет. Ответ для записи здесь: https://stackoverflow.com/a/12935309/7917629, "Устройства Android основаны на ограничении количества открытых аудиовходов до 1".

Wowza используется внутри audioRecorder для получения звука, и, похоже, когда я добавляю в mediaRecorder setAudioSource, он тоже пытается использовать audioRecorder. Поэтому опция устанавливает обратный вызов на wowza, например mWZAudioDevice.registerAudioSampleListener(new WZAudioDevice.AudioSampleListener()), чтобы получить byte [] из audioRecord.

...