【发布时间】:2016-06-06 07:36:27
【问题描述】:
我想从这个应用程序录制视频(带音频)
但只要我按下开始录制,它就会给出“E/MediaRecorder:启动失败:-19”
我参考了这个链接 ---> Android MediaRecorder - "start failed: -19" 并根据他们设置了支持的 videoSize 但我又失败了
并且我已经根据 ---> 上给出的状态图设置了方法调用 “developer.android.com/reference/android/media/MediaRecorder.html”网站
并且我已经按照 ---> "developer.android.com/guide/appendix/media-formats.html" 网站
上的方式设置了音频和视频参数但似乎没有任何效果:(
我正在我的运行 MIUI 的手机 Mi Redmi 2
上对此进行测试这就是 UI 的样子 ---> Cam UI
这是我下面的代码:-
/*to Start recording*/
public void startRecording() {
Log.e(tag, "Begin StartRecording");
if (mRecorder != null) {
mRecorder.stop();
mRecorder.release();
}
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mRecorder.setAudioChannels(1);
mRecorder.setAudioSamplingRate(24);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mRecorder.setAudioEncodingBitRate(24);
mRecorder.setVideoEncodingBitRate(56);
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 | IOException e) {
e.printStackTrace();
Log.w(tag, e);
}
try {
mRecorder.start();
Toast.makeText(this, "Recording....", Toast.LENGTH_SHORT).show();
} catch (Throwable t) {
t.printStackTrace();
Log.w(tag, t);
}
}
/*To stop recording*/
public void stopRecording() {
Log.e("", "Begin StopChange");
if (mRecorder != null)
try {
mRecorder.stop();
Toast.makeText(this, "Recording STOPPED .. ", Toast.LENGTH_SHORT).show();
} catch (RuntimeException e) {
e.printStackTrace();
} finally {
mRecorder.reset();
mRecorder.release();
mRecorder = null;
}
}
这里是 Android Manifest 权限:---
<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" />
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:
02-25 16:40:28.952 10315-10315/pkg.android.chintan.khetiya.cp I/Choreographer: Skipped 37 frames! The application may be doing too much work on its main thread.
首先我按下 1) 开始预览按钮 然后 2) 开始录制按钮 然后在制作 vid 3) 停止录制 最后4) 停止预览
请告诉我我哪里错了... 任何帮助将不胜感激提前感谢!
【问题讨论】:
-
在看到文件大小之前是否停止录制?
-
是的...我这里有 4 个按钮 1) 开始预览 2) 停止预览 3) 开始录制 4) 停止录制
-
我应该也发布 xml 代码吗?
-
您是否允许写入外部存储(清单)?
-
是的,我也发布了清单文件
标签: android