【问题标题】:MediaRecorder, start failed: -19MediaRecorder,启动失败:-19
【发布时间】:2013-12-19 01:35:04
【问题描述】:

有没有人成功地在 Glass 上使用 MediaRecorder 录制视频?

这是我用来准备记录器的代码。我不断收到错误 -19。

    recorder = new MediaRecorder();

    recorder.setOutputFile(videoFile);

    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
    recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);

    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

    recorder.setVideoFrameRate(15);
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);

    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 

谢谢。

更新: 这似乎是一个 GDK 错误。我已经报告了它并被接受了。如果您遇到同样的问题,只需在错误报告中加注星标以随时了解情况:

https://code.google.com/p/google-glass-api/issues/detail?id=360

【问题讨论】:

    标签: android google-glass video-recording google-gdk


    【解决方案1】:

    要在 Glass 上开始视频捕获,您似乎必须完全停止视频预览。如果您使用的是预览相机,在使用 MediaRecorder 执行任何操作之前,只需运行:

    try {
        mCamera.setPreviewDisplay(null);
    } catch (java.io.IOException ioe) {
        Log.d(TAG, "IOException nullifying preview display: " + ioe.getMessage());
    }
    mCamera.stopPreview();
    mCamera.unlock();
    

    更多信息在这里:https://code.google.com/p/google-glass-api/issues/detail?id=360#c6

    【讨论】:

      【解决方案2】:

      经过多次挫折和反复,我很高兴地向大家报告,可以在 Glass XE12 上使用 MediaRecorder。以下代码适用于我运行 XE12 的 Glass 版本 1:

          mMediaRecorder = new MediaRecorder();
          mMediaRecorder.setCamera(mCamera);
          mMediaRecorder.setPreviewDisplay(preview.getHolder().getSurface());
          mCamera.unlock();
          // Step 2: Set sources
      
          mMediaRecorder.setOnErrorListener(new android.media.MediaRecorder.OnErrorListener() {
              public void onError(MediaRecorder mediarecorder1, int k, int i1)
              {
                  Log.e(TAG,String.format("Media Recorder error: k=%d, i1=%d", k, i1));
              }
      
          });
          mMediaRecorder.setVideoSource(0);
          mMediaRecorder.setAudioSource(0);
          mMediaRecorder.setOutputFormat(2);
          mMediaRecorder.setVideoEncoder(2);
          mMediaRecorder.setVideoEncodingBitRate(0x4c4b40);
          mMediaRecorder.setVideoFrameRate(30);
          mMediaRecorder.setVideoSize(1280, 720);
          mMediaRecorder.setAudioChannels(2);
          mMediaRecorder.setAudioEncoder(3);
          mMediaRecorder.setAudioEncodingBitRate(0x17700);
          mMediaRecorder.setAudioSamplingRate(44100);
          mMediaRecorder.setMaxDuration(0);
          mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString());
          mMediaRecorder.setMaxDuration(-1);
      
          // Step 5: Set the preview output
          // Step 6: Prepare configured MediaRecorder
          try {
              mMediaRecorder.prepare();
              mMediaRecorder.start();
          } catch (IllegalStateException e) {
              Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage());
              releaseMediaRecorder();
              return false;
          } catch (IOException e) {
              Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage());
              releaseMediaRecorder();
              return false;
          } catch (Exception e) {
              Log.d(TAG, "Unknown exception preparing MediaRecorder: " + e.getMessage());
              releaseMediaRecorder();
              return false;
          }
      

      【讨论】:

      • 谢谢奥利弗!我将 Glass 送去更换第 2 版,我会在拿回来后立即对其进行测试。
      • 不幸的是 Olivier 它对我不起作用。还是谢谢你。
      【解决方案3】:

      您何时准备记录器,是在您启动应用程序时发生的事情吗?如果是这样,您是否使用语音触发器启动它?

      如果这两件事都成立,那么这可能是the bug described here 的一个实例。您可以在该线程中尝试解决方法(指数退避)并查看它是否有效?

      【讨论】:

      • 不幸的是,事实并非如此。我可以成功启动应用程序(它是一个活动,而不是实时卡片),并且可以在 Surface 上看到相机的预览。一旦我尝试使用 MediaRecorder 录制视频,就会出现问题。感谢您的回复!
      猜你喜欢
      • 2016-12-30
      • 2012-06-30
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多