使用视频录制服务导致IOException“无效的预览曲面”

时间:2014-05-12 16:49:49

标签: android

我见过类似的问题,但与我读过的关于这个问题的线程相比,我的代码结构完全不同。

我的问题是当我尝试设置MediaRecorder的previewDisplay

mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());

我得到IOException“无效的预览表面” Log.v(TAG, mSurfaceHolder.getSurface().toString()给出“Surface(name = null)/ @ 0x42333f90”所以我认为表面是否以某种方式为空?

我正在努力将这款相机录制成一项服务,让我不确定我的表面和表面光洁度应该是什么。

目前,RecorderService.class的onCreate()是:

SurfaceView view = new SurfaceView(getActivity());
mSurfaceHolder = view.getHolder();

其中getActivity()返回启动服务的活动。

相机启动时间:

Log.v(TAG, "Starting camera");
Intent intent = new Intent(getActivity(), CameraRecorder.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getActivity().startActivity(intent);

因此,当我尝试停止录制时,由于IllegalStateException,应用程序在mMediaRecorder.stop()崩溃。

总结一下:

  1. 我想要一个RecorderService.class,可以从任何活动开始,它会记录摄像头直到stopService()
  2. 我不确定SurfaceView会使用什么。我目前正在使用录制开始的活动,但这会产生一个null SurfaceView(我认为)。
  3. 如果需要,我可以提供更多代码。

    提前致谢!

3 个答案:

答案 0 :(得分:1)

我设法通过创建一个新的活动CameraRecorder.java来解决这个问题,该活动的唯一目的是启动服务。在CameraRecorder的布局xml文件中,我添加了一个用于预览的SurfaceView。因为我在启动服务时在CameraRecorder.java中运行了finish(),所以屏幕上看不到预览!

答案 1 :(得分:1)

我使用java.io.IOException: invalid preview surface修复了SurfaceHolder.Callback。在调用回调方法surfaceCreated()之前,您无法使用预览曲面。一个人必须使用像

这样的东西
mSurfaceView.getHolder().addCallback(mSurfaceHolderCallback);

答案 2 :(得分:0)

我已经在scanf中进行了这样的初始化:

atoi

并使相机准备在服务本身的oncreate()中发生错误。

我希望这是同样的问题。无法实现上述代码。