[android-beginners] Re: Help Needed : MediaRecorder error: java.io.IOException: prepare failed

2009-10-12 Thread Mikhail G

Hi,

i'm seeing same issue.  were you able to find a solution?

thx,
Mikhail.

On Sep 8, 3:49 am, preetam_pict preetam.pa...@gmail.com wrote:
 Hi all

 I am trying to write a sample program to record the video (say
 camcorder application).
 When i run my program using the emulator (I have android-sdk-
 windows-1.5_r3) I see java.io.IOException:preparefailed. error in
 logcat output.

 Further I can see that I have came across this error when i call
 MediaRecorder.prepare()
 from CamcorderActivity.surfaceCreated()
 But I am surprised to see that activity got launched and I am seeing
 the camera preview!  Again the preview is seen only in half of the
 screen! Its weird!!!

 Further when i do recorder.start() to record the video I get
 java.lang.IllegalStateException. Yes this is obvious since theprepare
 () has failed.
 But the question is whyprepare() has failed ?

 Can someone please help me to understand whats happening here!
 Am i missing something ???

 thanks in advance
 ~pp

 Here is my code ...
 package com.example;

 import java.io.IOException;

 import android.app.Activity;
 import android.graphics.PixelFormat;
 import android.media.MediaRecorder;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;

 public class CamcorderActivity extends Activity implements
        SurfaceHolder.Callback
 {
    private MediaRecorder recorder;
    private SurfaceView   surfaceView;
    private SurfaceHolder surfaceHolder;

    private boolean       recording = false;

    /** Called when the activity is first created. */
   �...@override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        // configure the surface
        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        setContentView(R.layout.main);
        surfaceView = (SurfaceView) findViewById
 (R.id.camcordersurface);
        surfaceHolder = surfaceView.getHolder();
        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        configureRecorder();
    }

    private void configureRecorder()
    {
        // configure media recorder
        recorder = new MediaRecorder();
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
    }

    private void stopRecorder()
    {
        try
        {
            if (recorder == null)
            {
                return;
            }
            recorder.stop();
            recorder.reset();
            recorder.release();
            recording = false;
            recorder = null;
        }
        finally
        {
            if (recorder != null)
            {
                recorder.release();
            }
        }
    }

    private void startRecorder()
    {
        recorder.start();
        recording = true;
    }

   �...@override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER)
        {
            // if not recording then start
            if (!recording)
            {
                startRecorder();
            }
            else
            {
                // if already recording then stop
                stopRecorder();
                finish();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

   �...@override
    public void surfaceChanged(SurfaceHolder holder, int format, int
 width,
            int height)
    {
        // do nothing
    }

   �...@override
    public void surfaceCreated(SurfaceHolder holder)
    {
        recorder.setOutputFile(/sdcard/test + System.currentTimeMillis
 ()
                + .mp4);
        recorder.setPreviewDisplay(holder.getSurface());
        try
        {
            recorder.prepare();
        }
        catch (IOException e)
        {
            Log.e(error -- , e.toString(), e);
            // TODO:
            // show error message
        }
    }

   �...@override
    public void surfaceDestroyed(SurfaceHolder holder)
    {
        stopRecorder();
    }

 }

 And the layout ...

 ?xml version=1.0 encoding=utf-8?
 LinearLayout xmlns:android=http://schemas.android.com/apk/res/
 android
        android:orientation=vertical
 android:layout_width=fill_parent
        android:layout_height=fill_parent
        SurfaceView android:id=@+id/camcordersurface
                android:layout_width=fill_parent
 android:layout_height=10dip
                android:layout_weight=1
        /SurfaceView
 /LinearLayout

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google
Groups 

[android-beginners] Re: Help Needed : MediaRecorder error: java.io.IOException: prepare failed

2009-09-08 Thread preetam_pict

Hi all ...

I am seeing following errors in log ... Can someone please help me out
to resolve this ... !


09-08 12:30:26.174: ERROR/MediaPlayer(554): Unable to to create media
player
09-08 12:30:26.183: ERROR/CameraService(554): Failed to load
CameraService sounds.
09-08 12:30:26.203: ERROR/MediaPlayer(554): Unable to to create media
player
09-08 12:30:26.203: ERROR/CameraService(554): Failed to load
CameraService sounds.



thanks
~pp

On Sep 8, 1:49 pm, preetam_pict preetam.pa...@gmail.com wrote:
 Hi all

 I am trying to write a sample program to record the video (say
 camcorder application).
 When i run my program using the emulator (I have android-sdk-
 windows-1.5_r3) I see java.io.IOException: prepare failed. error in
 logcat output.

 Further I can see that I have came across this error when i call
 MediaRecorder.prepare()
 from CamcorderActivity.surfaceCreated()
 But I am surprised to see that activity got launched and I am seeing
 the camera preview!  Again the preview is seen only in half of the
 screen! Its weird!!!

 Further when i do recorder.start() to record the video I get
 java.lang.IllegalStateException. Yes this is obvious since the prepare
 () has failed.
 But the question is why prepare() has failed ?

 Can someone please help me to understand whats happening here!
 Am i missing something ???

 thanks in advance
 ~pp

 Here is my code ...
 package com.example;

 import java.io.IOException;

 import android.app.Activity;
 import android.graphics.PixelFormat;
 import android.media.MediaRecorder;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;

 public class CamcorderActivity extends Activity implements
        SurfaceHolder.Callback
 {
    private MediaRecorder recorder;
    private SurfaceView   surfaceView;
    private SurfaceHolder surfaceHolder;

    private boolean       recording = false;

    /** Called when the activity is first created. */
   �...@override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        // configure the surface
        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        setContentView(R.layout.main);
        surfaceView = (SurfaceView) findViewById
 (R.id.camcordersurface);
        surfaceHolder = surfaceView.getHolder();
        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        configureRecorder();
    }

    private void configureRecorder()
    {
        // configure media recorder
        recorder = new MediaRecorder();
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
    }

    private void stopRecorder()
    {
        try
        {
            if (recorder == null)
            {
                return;
            }
            recorder.stop();
            recorder.reset();
            recorder.release();
            recording = false;
            recorder = null;
        }
        finally
        {
            if (recorder != null)
            {
                recorder.release();
            }
        }
    }

    private void startRecorder()
    {
        recorder.start();
        recording = true;
    }

   �...@override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER)
        {
            // if not recording then start
            if (!recording)
            {
                startRecorder();
            }
            else
            {
                // if already recording then stop
                stopRecorder();
                finish();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

   �...@override
    public void surfaceChanged(SurfaceHolder holder, int format, int
 width,
            int height)
    {
        // do nothing
    }

   �...@override
    public void surfaceCreated(SurfaceHolder holder)
    {
        recorder.setOutputFile(/sdcard/test + System.currentTimeMillis
 ()
                + .mp4);
        recorder.setPreviewDisplay(holder.getSurface());
        try
        {
            recorder.prepare();
        }
        catch (IOException e)
        {
            Log.e(error -- , e.toString(), e);
            // TODO:
            // show error message
        }
    }

   �...@override
    public void surfaceDestroyed(SurfaceHolder holder)
    {
        stopRecorder();
    }

 }

 And the layout ...

 ?xml version=1.0 encoding=utf-8?
 LinearLayout xmlns:android=http://schemas.android.com/apk/res/
 android
        android:orientation=vertical
 android:layout_width=fill_parent