медиа-сервер умер, сервис камеры умер. Android-студия, Google Glass - PullRequest
0 голосов
/ 04 сентября 2018

Я новичок в 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);. Я попытался это решение, но я не мог решить. Я не знаю почему. Я хочу устранить эту ошибку. пожалуйста, помогите мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...