Как записать с помощью пользовательского медиа-рекордера?

Я создаю приложение для телефонов Android 2.1–2.3, и мне нужно знать, как записывать видео и реализовывать вспышку во время записи видео. Я видел приведенный ниже пример кода на разных веб-сайтах, и он работает на 2.1, но на более высоких версиях экран предварительного просмотра остается темным.

    boolean recording=false;
    Camera camera = null;
    Parameters parameters;
    SurfaceView cameraView = (SurfaceView) findViewById(R.id.surface_view);
    holder = cameraView.getHolder();
    holder.addCallback(this);
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    holder.getSurface();

    private void prepareRecorder() 
{

    Log.d("BROADCAST", "Camera not null");
    recorder.setPreviewDisplay(holder.getSurface());
     try{

        recorder.prepare();


 //implementing flash button below but fails as soon as recording begins when turned on

      Button flash = (Button) findViewById (R.id.flash);
       flash.setOnClickListener(new Button.OnClickListener(){
      @Override
      public void onClick(View arg0) {
      // TODO Auto-generated method stub
      if(camera == null){
      camera = Camera.open();
      parameters = camera.getParameters();
      parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
       camera.setParameters(parameters);

       }else{
           parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
           camera.setParameters(parameters);
           camera.release();
           camera = null;
            }

        }});


    } catch (IllegalStateException e) {
        e.printStackTrace();
        finish();
    } catch (IOException e) {
        e.printStackTrace();
        finish();
    }


}



public void surfaceCreated(SurfaceHolder holder) 
   {
    prepareRecorder();
    Log.v(TAG,"surfaceCreated");
   }


public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {}

public void surfaceDestroyed(SurfaceHolder holder) 
    {

    recorder.release();

    }

Когда я нажимаю на эту кнопку внизу, запись начинается, но до этого экран черный и не показывает превью.

private Button.OnClickListener myButtonOnClickListener = new Button.OnClickListener (){
    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
          if (recording) {

                recorder.stop();
             recorder.release();// stops the recording process
             startActivity(new Intent(""));

      finish();
      } 
      else {
                recorder.start();
                counter.start();
                recording = true;

            }
    }

};

Я, вероятно, близок к ответу, но мне просто нужно какое-то руководство, возможно, я где-то что-то не так делаю? Любая помощь будет достаточно. заранее спасибо


person user875139    schedule 22.10.2011    source источник


Ответы (1)


В вашем методе prepareRecorder() добавьте эту строку перед вызовом prepare();

 recorder.setCamera(camera);
person anju_john    schedule 14.02.2012