Ниже описана структура моего рабочего кода для записи видео и аудио:Использование андроида MediaRecorder
Вопросы: 1) Почему CamcorderProfile
нужен? setProfile(...)
, как представляется, устанавливает размеры независимо от того, что дает QUALITY_HIGH, но позже я установил размеры, которые я хочу, с setVideoSize(...)
, что переопределяет это. Однако, когда я удаляю две строки CamcorderProfile, приложение падает с setVideoSize(...)
с помощью LogCat E/MediaRecorder(19526): setVideoSize called in an invalid state: 2
.
2) Как мне не записывать аудио? В документации указано, что если не вызывается setAudioSource(...)
, звуковой дорожки не будет. Однако, когда я удаляю эту строку, приложение падает с setProfile(...)
с помощью LogCat E/MediaRecorder(19946): try to set the audio encoder without setting the audio source first
.
3) Если я удаляю линии линии CamcorderProfile и линию setAudioSource(...)
, она сработает, как в 1).
4) Кроме того, я попытался добавить строку
recorder.setOutputFormat(OutputFormat.DEFAULT);
вместо CamcorderProfile линий. Но теперь он падает на perpare()
. Если setAudioSource(...)
называется LogCat является: E/MediaRecorder(20737): audio source is set, but audio encoder is not set
, если она не называется LogCat является: E/MediaRecorder(20544): video source is set, but video encoder is not set
Я посмотрел повторяющийся в Интернете, и я не могу найти хороший пример правильного пути для настройки MediaRecorder. Here это означает, что после API 8 вы должны использовать класс CamcorderProfile, но мне кажется, что он вызывает проблемы.
Любая помощь будет замечательной! Благодаря!
код (который работает при запуске в нем ниже):
recorder = new MediaRecorder();
recorder.setCamera(<<camera>>);
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
recorder.setProfile(profile);
recorder.setOutputFile(<<Path String>>);
recorder.setVideoSize(<<Width>>, <<Height>>);
recorder.setPreviewDisplay(<<Surface>>);
recorder.setOrientationHint(0);
recorder.setMaxDuration(10000);
recorder.setOnInfoListener(this);
try
{
recorder.prepare();
recorder.start();
} catch ...
Вы правы, так как я опубликовал это, я нашел код для функции 'setProfile()'. Он всегда вызывает 'setAudioEncoder()', поэтому, если вы не установите источник звука, он сработает. Ответ заключается в том, чтобы скопировать эту функцию, таким образом вы все равно можете использовать встроенные настройки «CamcorderProfile», но также можете выбрать, какие настройки вы хотите установить (то есть аудио). Спасибо – jacobianism
Да, если вы хотите использовать видеокамеру, чтобы получить только видео, вы тоже можете это сделать. То, что вы можете получить оптимальные доступные значения для любого устройства без необходимости их жесткого кодирования. –
После долгих поисков ваш пост сделал мой день. Помещение setVideoSize до того, как setVideoEncoder и setAudioEncoder сделали трюк. благодаря – gtsouk