如何解决MediaRecoder和MediaPlayer冲突
使用MediaRecorder
和MediaPlayer
时遇到问题。我需要在我的应用程序中同时播放指南音频和录制视频。它在现代android设备中工作正常。但是在某些旧设备(三星Galaxy J7和Android 7)中,MediaRecorder的视频记录似乎被MediaPlayer
打断了。播放音频时,当音频结束视频帧变为正常时,输出视频的帧停止。
如果MediaRecorder
不setAudioSource
,则视频记录为预期的。有人对此有想法吗?谢谢。
这是功能设置MediaRecorder
private void setUpMediaRecorder() throws IOException {
if (null == activity) {
return;
}
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
if (mVideoAbsolutePath == null || mVideoAbsolutePath.isEmpty()) {
mVideoAbsolutePath = checkAndGetVideoFilePath(activity);
}
mMediaRecorder.setOutputFile(mVideoAbsolutePath);
mMediaRecorder.setVideoEncodingBitRate(Constants.VIDEO_BIT_RATE);
mMediaRecorder.setVideoFrameRate(Constants.VIDEO_FPS);
mMediaRecorder.setVideoSize(mVideoSize.getWidth(),mVideoSize.getHeight());
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
switch (mSensorOrientation) {
case SENSOR_ORIENTATION_DEFAULT_DEGREES:
mMediaRecorder.setOrientationHint(DEFAULT_ORIENTATIONS.get(rotation));
break;
case SENSOR_ORIENTATION_INVERSE_DEGREES:
mMediaRecorder.setOrientationHint(INVERSE_ORIENTATIONS.get(rotation));
break;
}
mMediaRecorder.prepare();
}
此功能可播放资源中的音频文件
private void playAudio(int audioResourceId,MediaPlayer.OnCompletionListener onPlayComplete) {
mediaPlayer = MediaPlayer.create(getContext(),audioResourceId);
mediaPlayer.setVolume(1.0f,1.0f); //set volume takes two paramater
mediaPlayer.start(); // no need to call prepare(); create() does that for you
mediaPlayer.setOnCompletionListener(onPlayComplete);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。