1

У меня есть рабочий код. Он был написан и протестирован на Samsung E55-GC110 (Android 4.1.2), и он отлично работает.Ошибка записи на носители для Android на Nexus 5 (Lolipop)

код инициирует экземпляр нового медиа-рекордер и готовит его для записи видео:

  • 5000 Кбит битрейта
  • 20 кадров в секунду
  • ограниченное время
  • нет аудио

Когда я бегу приложение на моем Nexus 5 (Android 5.0.1), которое я получаю: start failed: -19 ошибка и пустой файл mp4.

не могу понять, в чем проблема ...

Код:

mediaRecorder = new MediaRecorder(); 
    camera.unlock(); 
    long duration = calculateDuration(); 
    MAX_DURATION = (int)duration/1000; 
    mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface()); 
    mediaRecorder.setCamera(camera); 

    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 

    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    mediaRecorder.setVideoEncodingBitRate(5000000); 
    mediaRecorder.setVideoFrameRate(20); 
    mediaRecorder.setVideoSize(1280,720); 

    mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 

    mediaRecorder.setMaxDuration((int)duration); // Set max duration 
    mediaRecorder.setOnInfoListener(this); 

    String root = getSDCardPath(); 
    directory = new File(root + "/FileUpload/"); 
    if (!directory.exists()) 
     directory.mkdirs(); 

    long currentTime = System.currentTimeMillis(); 
    String uniqueOutFile = root + "/FileUpload/" 
      + timeFormatter.format(currentTime) 
      + ".mp4"; 
    File outFile = new File(directory, uniqueOutFile); 
    if (outFile.exists()) { 
     outFile.delete(); 
    } 
    mediaRecorder.setOutputFile(uniqueOutFile); 

    try { 
     mediaRecorder.prepare(); 
    } catch (Exception e) { 
    } 
    mediaRecorder.start(); 

стека Ошибка:

02-25 11:04:04.186 22334-22334/com.vp.fileupload.app I/Process﹕ Sending signal. PID: 22334 SIG: 9 
02-25 11:04:05.467 22470-22470/com.vp.fileupload.app I/MediaRecorderJNI﹕ prepare: surface=0xaf251400 
02-25 11:04:05.557 22470-22470/com.vp.fileupload.app E/MediaRecorder﹕ start failed: -19 
02-25 11:04:05.564 22470-22470/com.vp.fileupload.app D/AndroidRuntime﹕ Shutting down VM 
02-25 11:04:05.567 22470-22470/com.vp.fileupload.app E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.vp.fileupload.app, PID: 22470 
    java.lang.RuntimeException: start failed. 
      at android.media.MediaRecorder.start(Native Method) 
      at com.vp.fileupload.app.BackgroundVideoRecorder.cameraStart(BackgroundVideoRecorder.java:178) 
      at com.vp.fileupload.app.BackgroundVideoRecorder.surfaceCreated(BackgroundVideoRecorder.java:85) 
      at android.view.SurfaceView.updateWindow(SurfaceView.java:579) 
      at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:176) 
      at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847) 
      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1956) 
      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054) 
      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779) 
      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
      at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
      at android.view.Choreographer.doFrame(Choreographer.java:550) 
      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
      at android.os.Handler.handleCallback(Handler.java:739) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5221) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

ответ

0

Попробуйте установить профиль вместо пользовательской записи параметры.

mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_720P)); 
1

Я думаю, что ваша проблема в том, что аппаратное обеспечение не поддерживает захват по 20 кадров в секунду. Попробуйте удалить настройку fps и посмотреть, работает ли она.