Как записать с помощью нестандартного медиа-рекордера? - PullRequest
0 голосов
/ 22 октября 2011

Я создаю приложение для телефонов 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;

            }
    }

};

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

1 Ответ

0 голосов
/ 14 февраля 2012

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

 recorder.setCamera(camera);
...