i want to record a video (with audio) from this app

but as soon as i press start recording it gives "E/MediaRecorder: start 
failed: -19"

i referred to this link ---> 
http://stackoverflow.com/questions/10496969/android-mediarecorder-start-failed-19
 
 and according to them i set the supported videoSize but again i failed 


and i have set the method calls according to the state diagram given on --->
"**developer.android.com/reference/android/media/MediaRecorder.html**" 
website

and i have set audio and video parameters as given on ---> 
"**developer.android.com/guide/appendix/media-formats.html**" website

but nothing seems to work :( 


i am testing this on my **phone Mi Redmi 2 running MIUI**

this is how UI looks like  ---> [Cam UI][1] 

  [1]: http://i.stack.imgur.com/z7hW2.jpg


this is my code below:-


   

    public class AndroidCamera extends Activity implements 
SurfaceHolder.Callback {
    TextView testView;

    Camera camera;
    SurfaceView surfaceView;
    SurfaceHolder surfaceHolder;
    MediaRecorder mRecorder;
    private boolean mCaptureFrame = false;
    private boolean recording = false;
    File audiofile = null;
    private final String tag = "VideoServer";

    Button start, stop, startrec, stoprec;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        start = (Button) findViewById(R.id.startcamerapreview);
        start.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View arg0) {
                start_camera();
            }
        });

        stop = (Button) findViewById(R.id.stopcamerapreview);
        stop.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View arg0) {
                stop_camera();
            }
        });

        startrec = (Button) findViewById(R.id.startrecording);
        startrec.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View arg0) {
                startRecording();
            }
        });

        stoprec = (Button) findViewById(R.id.stoprecording);
        stoprec.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View arg0) {
                stopRecording();
            }
        });

        surfaceView = (SurfaceView) findViewById(R.id.surfaceview);
        surfaceHolder = surfaceView.getHolder();
        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);


    }

    private void start_camera() {
        try {
            camera = Camera.open();
            setCameraDisplayOrientation(this, 
Camera.CameraInfo.CAMERA_FACING_BACK, camera);
        } catch (RuntimeException e) {
            Log.e(tag, "init_camera: " + e);
            return;
        }
        try {
            camera.setPreviewDisplay(surfaceHolder);
            Camera.Parameters parameters = camera.getParameters();
            parameters.setPreviewSize(1280, 720);
            surfaceView.requestLayout();
            if (parameters.getSupportedFocusModes().contains(
                    Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
                
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
            }
            parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
            camera.setParameters(parameters);
            camera.startPreview();
            camera.autoFocus(null);
        } catch (Exception e) {
            Log.e(tag, "init_camera: " + e);
            return;
        }
    }

    private void stop_camera() {
        camera.stopPreview();
        camera.release();
    }

    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int 
arg3) {
        // TODO Auto-generated method stub
    }

    public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub

    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub
    }

    public static void setCameraDisplayOrientation(Activity activity, int 
cameraId, android.hardware.Camera camera) {
        android.hardware.Camera.CameraInfo info = new 
android.hardware.Camera.CameraInfo();
        android.hardware.Camera.getCameraInfo(cameraId, info);
        int rotation = 
activity.getWindowManager().getDefaultDisplay().getRotation();
        int degrees = 0;
        switch (rotation) {
            case Surface.ROTATION_0:
                degrees = 0;
                break;
            case Surface.ROTATION_90:
                degrees = 90;
                break;
            case Surface.ROTATION_180:
                degrees = 180;
                break;
            case Surface.ROTATION_270:
                degrees = 270;
                break;
        }

        int result;
        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
            result = (info.orientation + degrees) % 360;
            result = (360 - result) % 360;  // compensate the mirror
        } else {  // back-facing
            result = (info.orientation - degrees + 360) % 360;
        }
        camera.setDisplayOrientation(result);
    }

    public void startRecording() {
        Log.e("", "Begin StartRecording");
        Toast.makeText(this, "Recording....", Toast.LENGTH_SHORT).show();
        mCaptureFrame = true;
        if (mRecorder != null) {
            mRecorder.stop();
            mRecorder.release();
        }
        mRecorder = new MediaRecorder();
        mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mRecorder.setAudioChannels(1);
        mRecorder.setAudioSamplingRate(24);
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        mRecorder.setVideoEncodingBitRate(56);
        mRecorder.setAudioEncodingBitRate(24);
        final List<Camera.Size> mSupportedVideoSizes = 
getSupportedVideoSizes(camera);
        for (Camera.Size str : mSupportedVideoSizes)
            Log.e(tag, "mSupportedVideoSizes "+str.width + ":" + str.height 
+ " ... "
                    + ((float) str.width / str.height));

        File dir = Environment.getExternalStorageDirectory();
        try {
            audiofile = File.createTempFile("sound", ".mp4", dir);
        } catch (IOException e) {
            Log.e(tag, "external storage access error");
            return;
        }
        mRecorder.setOutputFile(audiofile.getAbsolutePath());
        mRecorder.setVideoSize(176, 144);
        mRecorder.setVideoFrameRate(12);
        mRecorder.setMaxDuration(20000);
        mRecorder.setPreviewDisplay(surfaceHolder.getSurface());

        try {
            mRecorder.prepare();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            mRecorder.start();

        } catch (Throwable t) {
            t.printStackTrace();
            Log.w(tag, t);

            recording = true;
        }

    }

    public void stopRecording() {
        Log.e("", "Begin StopChange");
        Toast.makeText(this, "Recording STOPPED .. ", 
Toast.LENGTH_SHORT).show();


        if (mRecorder != null)
            try {
                mRecorder.stop();
                Toast.makeText(this, "Recording STOPPED .. ", 
Toast.LENGTH_SHORT).show();
            } catch (RuntimeException e) {
                e.printStackTrace();
            } finally {
                mRecorder.release();

                mRecorder = null;
                recording = false;
            }
    }
    public List<Camera.Size> getSupportedVideoSizes(Camera camera) {
        if (camera.getParameters().getSupportedVideoSizes() != null) {
            return camera.getParameters().getSupportedVideoSizes();
        } else {
            // Video sizes may be null, which indicates that all the 
supported
            // preview sizes are supported for video recording.
            return camera.getParameters().getSupportedPreviewSizes();
        }
    }


}
      

here is the Android Manifest fie:-

   

    <?xml version="1.0" encoding="utf-8"?>
       <manifest xmlns:android="http://schemas.android.com/apk/res/android";
        package="pkg.android.chintan.khetiya.cp"
        android:versionCode="1"
        android:versionName="1.0" >

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission 
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission 
android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.RECORD_VIDEO" />
    <uses-permission android:name="android.permission.STORAGE" />



    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name="pkg.android.chintan.khetiya.cp.AndroidCamera"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <uses-sdk android:minSdkVersion="4" />

</manifest>



Logcat :--->

    E/MediaRecorder: start failed: -19
    02-24 13:40:32.070 14892-14892/pkg.android.chintan.khetiya.cp 
W/System.err: java.lang.RuntimeException: start failed.
    02-24 13:40:32.070 14892-14892/pkg.android.chintan.khetiya.cp 
W/System.err:     at android.media.MediaRecorder.start(Native Method)
    02-24 13:40:32.070 14892-14892/pkg.android.chintan.khetiya.cp 
W/System.err:     at 
pkg.android.chintan.khetiya.cp.AndroidCamera.startRecording(AndroidCamera.java:240)
    02-24 13:40:32.070 14892-14892/pkg.android.chintan.khetiya.cp 
W/System.err:     at 
pkg.android.chintan.khetiya.cp.AndroidCamera$3.onClick(AndroidCamera.java:65)
    02-24 13:40:32.070 14892-14892/pkg.android.chintan.khetiya.cp 
W/System.err:     at android.view.View.performClick(View.java:4802)
    02-24 13:40:32.070 14892-14892/pkg.android.chintan.khetiya.cp 
W/System.err:     at android.view.View$PerformClick.run(View.java:20102)
    02-24 13:40:32.070 14892-14892/pkg.android.chintan.khetiya.cp 
W/System.err:     at android.os.Handler.handleCallback(Handler.java:810)
    02-24 13:40:32.070 14892-14892/pkg.android.chintan.khetiya.cp 
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
    02-24 13:40:32.070 14892-14892/pkg.android.chintan.khetiya.cp 
W/System.err:     at android.os.Looper.loop(Looper.java:189)


THESE are the supported video sizes from logcat :--->

    E/VideoServer: mSupportedVideoSizes 176:144 ... 1.2222222
    E/VideoServer: mSupportedVideoSizes 320:240 ... 1.3333334
    E/VideoServer: mSupportedVideoSizes 352:288 ... 1.2222222
    E/VideoServer: mSupportedVideoSizes 480:320 ... 1.5
    E/VideoServer: mSupportedVideoSizes 480:368 ... 1.3043479
    E/VideoServer: mSupportedVideoSizes 640:480 ... 1.3333334
    E/VideoServer: mSupportedVideoSizes 720:480 ... 1.5
    E/VideoServer: mSupportedVideoSizes 800:480 ... 1.6666666
    E/VideoServer: mSupportedVideoSizes 800:600 ... 1.3333334
    E/VideoServer: mSupportedVideoSizes 864:480 ... 1.8
    E/VideoServer: mSupportedVideoSizes 960:540 ... 1.7777778
    E/VideoServer: mSupportedVideoSizes 1280:720 ... 1.7777778
    E/VideoServer: mSupportedVideoSizes 1280:768 ... 1.6666666
    E/VideoServer: mSupportedVideoSizes 1600:1200 ... 1.3333334
    E/VideoServer: mSupportedVideoSizes 1920:1088 ... 1.7647059


> first i press the  **1) start preview button** 
>      then **2) start recording button**
>      then after making vid **3) stop recording**
>       finally **4) stop preview**


please please tell me where am i wrong ... 
any help will be appreciated thanks in advance !

-- 
You received this message because you are subscribed to the Google Groups 
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/android-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/android-developers/08a91231-1f3f-49be-b1f5-1e4ee1308d80%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to