2015-12-16 9 views
2

Я поймаю это исключение на 23+ api. На api 22 и меньше все работает нормально. Не могли бы вы помочь мне, чтобы найти решение? Я использую 23 api цели и пробовал разные конфигурации, но до сих пор вопросMediaRecorder: start failed: -2147483648

E/MediaRecorder: start failed: -2147483648 
W/System.err: java.lang.RuntimeException: start failed. W/System.err: at android.media.MediaRecorder.start(Native Method) 
W/System.err: at com.ksy.recordlib.service.recoder.RecoderVideoSource.prepare(RecoderVideoSource.java:105) 
W/System.err: at com.ksy.recordlib.service.recoder.RecoderVideoSource.run(RecoderVideoSource.java:173) 
W/System.err: at java.lang.Thread.run(Thread.java:818) 

я обнаружил, что причина аварии является моим выходом

>try { 
> this.piple = ParcelFileDescriptor.createPipe(); 
>} catch (IOException e) { 
> e.printStackTrace(); 
>} 
>mediaRecorder.setOutputFile(this.piple[1].getFileDescriptor()); 

Как я могу решить эту проблему?

+0

Запись аудио опасное разрешение на зефир, так что вы должны проверить разрешение, прежде чем перейти в противном случае он будет бросать исключение. –

+0

Спасибо! Я проверил разрешения, но исключение все еще существует. – user2768856

+0

просмотрите изменения +23, необходимые для рамок разрешений ... http://developer.android.com/training/permissions/index.html –

ответ

3

Начиная с уровня API Android = 23, при кодировании видео в формате MPEG4 больше невозможно использовать файловые дескрипторы без поиска (так же ParcelFileDescriptor). Как можно видеть в этом документе commit MPEG4Writer был изменен для печати ошибки и выхода, когда он обнаруживает дескриптор файла, который не доступен для поиска.

Оклейка упомянутый ниже код для Вашего удобства:

// Verify mFd is seekable 
off64_t off = lseek64(mFd, 0, SEEK_SET); 
if (off < 0) { 
    ALOGE("cannot seek mFd: %s (%d)", strerror(errno), errno); 
    release(); 
} 
+0

Любое решение этой проблемы ... Любая другая альтернатива ... – DAC84