媒体服务器死亡,相机服务死亡。 -Android Studio,Google Glass

时间:2018-09-04 01:25:45

标签: android android-studio google-glass

我是Android Studio的初学者。我制作了Google Glass App来录制视频,但是出现了相机错误。我在StackOverflow中尝试了解决方案,但无法解决此错误。

我的应用代码在这里:

import java.io.File;
import java.io.IOException;

import android.app.Activity;
import android.hardware.Camera;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;

public class VideoActivity extends Activity implements SurfaceHolder.Callback {
    String fileOutput = "DCIM/Camera/imgtest.mp4";
    String path = Environment.getExternalStorageDirectory() + File.separator + fileOutput;
    private android.hardware.Camera mCamera;
    private MediaRecorder mediaRecorder;
    SurfaceHolder mHolder;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.preview);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        SurfaceView mPreview = (SurfaceView)findViewById(R.id.preview);
        mHolder = mPreview.getHolder();
        mHolder.addCallback(this);
        mPreview.postDelayed(Record, 500);
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        mCamera = Camera.open();
        this.setCameraParameters(mCamera);

        try {
            mCamera.setPreviewDisplay(holder);
        } catch (Exception e) {
            this.releaseCamera();
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        if (mCamera != null) {
            mCamera.startPreview();
        }
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        this.releaseCamera();
    }

    public void releaseCamera() {
        if (mCamera != null) {
            mCamera.release();
            mCamera = null;
        }
    }

    public void setCameraParameters(Camera camera) {
        if (camera != null) {
            Camera.Parameters parameters = camera.getParameters();
            parameters.setPreviewFpsRange(30000, 30000);
            camera.setParameters(parameters);
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (mCamera != null) {
            releaseCamera();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (mCamera != null) {
            releaseCamera();
        }
    }

    private boolean Recording ()
    {
        mediaRecorder = new MediaRecorder();
        mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
        mediaRecorder.setMaxDuration(1000);
        mediaRecorder.setCaptureRate(15);
        mediaRecorder.setVideoFrameRate(15);
        mediaRecorder.setOutputFile(path);
        mediaRecorder.setPreviewDisplay(mHolder.getSurface());
        try {
            mediaRecorder.prepare();
        } catch (IOException e) {
            e.printStackTrace();
            mediaRecorder.release();
            return false;
        }
        return true;
    }

    private Runnable Record = new Runnable()
    {
        @Override
        public void run() {
            if (Recording()) {
                mediaRecorder.start();
            }
        }
    };
}

错误代码:

D/RenderScript: Load RS driver 'libRSDriver.so' successfully.
V/AppDrawer: surfaceDestroyed
W/View: requestLayout() improperly called by android.widget.FrameLayout{212a561c V.E..... ......ID 0,0-640,360} during layout: running second layout pass
D/CardScrollView: Deactivating.
D/SliderSubMenuProvider: Close top-level menu
D/SliderMenuView: Performed action on 1 : true
I/Choreographer: Skipped 46 frames!  The application may be doing too much work on its main thread.
I/MediaRecorderJNI: prepare: surface=0x59f6ea28
I/Choreographer: Skipped 33 frames!  The application may be doing too much work on its main thread.
W/IMediaDeathNotifier: media server died
W/CameraBase: Camera service died!
W/CameraBase: mediaserver's remote binder Camera object died
E/Camera: Error 100
W/SurfaceComposerClient: ComposerService remote (surfaceflinger) died [0x591f3a40]
E/DisplayEventReceiver: Display event receiver pipe was closed or an error occurred.  events=0x9
Application terminated.

我收到此错误,并且Google Glass重新启动。 在其他帖子答案中,他们通过添加mediaRecorder.setPreviewDisplay(mHolder.getSurface());解决了问题,但我无法解决此错误。 另一个答案给了我尝试parameters.setRecordingHint(true);的解决方案。我尝试了此解决方案,但无法解决。 我不知道为什么我想解决这个错误。请帮助我。

0 个答案:

没有答案
相关问题