我正在使用Android摄像头视频流一段时间。我首先尝试了libstreaming包,但问题是this。所以我按照Google相机示例code编写了我自己的课程。但在我将ParcelFileDescriptor
传递给mMediaRecorder.setOutputFile
之后,我收到了此错误:
E/MediaRecorder: start failed: -2147483648
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: sharedcameraandroid, PID: 14868
java.lang.RuntimeException: start failed.
at android.media.MediaRecorder.start(Native Method)
at MainActivity.startRecordingVideo(MainActivity.java:268)
at MainActivity.setUpMediaRecorder(MainActivity.java:257)
所以我在网上查了一下this(将输出格式更改为3GPP),this更改为add Thread.sleep
和this。但他们都没有工作。所以我来问是否有人知道如何解决这个问题。
这是我的代码:
private void setUpMediaRecorder() throws IOException {
final Activity activity = mActivity;
if (null == activity) {
return;
}
ParcelFileDescriptor[] parcelFileDescriptors = ParcelFileDescriptor.createPipe();
mParcelRead = new ParcelFileDescriptor(parcelFileDescriptors[0]);
mParcelWrite = new ParcelFileDescriptor(parcelFileDescriptors[1]);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
// mMediaRecorder.setOutputFile((new File(mActivity.getExternalFilesDir(null), "video.mp4")).getAbsolutePath());
// Log.d(TAG, (new File(mActivity.getExternalFilesDir(null), "video.mp4")).getAbsolutePath());
mMediaRecorder.setOutputFile(mParcelWrite.getFileDescriptor());
mMediaRecorder.setVideoEncodingBitRate(10000000);
mMediaRecorder.setVideoFrameRate(30);
// mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight());
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.prepare();
startRecordingVideo();
// https://stackoverflow.com/questions/14598299/how-to-record-video-on-android-into-stream
InputStream is = new ParcelFileDescriptor.AutoCloseInputStream(mParcelRead);
RtspClient client = new RtspClient(is, releaseSampleFile());
client.startStream();
}
如果我用注释行更改mMediaRecorder.setOutputFile(mParcelWrite.getFileDescriptor());
,一切都很好。
感谢您的帮助!