• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Apps MediaRecorder not getting initialized properly "start failed -19 which means "NO_INIT"" and "E/Media

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

cam.jpg
cam.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 file:-



<?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 !
 

BEST TECH IN 2023

We've been tracking upcoming products and ranking the best tech since 2007. Thanks for trusting our opinion: we get rewarded through affiliate links that earn us a commission and we invite you to learn more about us.

Smartphones