我正在做android摄像头应用程序。它应该具有使用后置和前置摄像头进行录制的功能。我完成了后置摄像头,一切都很好。但是当我用前置摄像头录制时,视频会颠倒过来。我必须播放我的应用程序本身录制的视频。我正在使用VideoView,如何设置方向或使其正确播放?在默认媒体播放器中播放的视频也在颠倒播放。尝试将视频发送到iPhone并进行检查,但仍然会颠倒。我有setOrientationHint到MediaRecorder但没有解决方案。
我的所有代码与agargenta's Video Capture Demo类似,我已完成自定义。
问题似乎很奇怪,我很震惊。
this.mediaRecorder = new MediaRecorder();
this.mediaRecorder.setCamera(this.mCamera);
this.mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
this.mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
if (Build.VERSION.SDK_INT <= 10) {
CamcorderProfile camcorderProfile = CamcorderProfile
.get(CamcorderProfile.QUALITY_HIGH);
camcorderProfile.videoFrameWidth = 320;
camcorderProfile.videoFrameHeight = 480;
// camcorderProfile.videoFrameRate = 15;
camcorderProfile.videoCodec = MediaRecorder.VideoEncoder.H264;
// camcorderProfile.audioCodec = MediaRecorder.AudioEncoder.DEFAULT;
camcorderProfile.fileFormat = MediaRecorder.OutputFormat.MPEG_4;
this.mediaRecorder.setProfile(camcorderProfile);
mediaRecorder.setOrientationHint(90);
} else {
if (tgbSwitchCamera.isChecked()) {
mediaRecorder
.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
// mediaRecorder.setVideoSize(320, 480);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
CameraInfo cameraInfo = new CameraInfo();
Camera.getCameraInfo(CameraInfo.CAMERA_FACING_FRONT, cameraInfo);
rotation = (cameraInfo.orientation - 180 + 360) % 360;
mediaRecorder.setOrientationHint(rotation);
} else {
CamcorderProfile camcorderProfile = CamcorderProfile
.get(CamcorderProfile.QUALITY_LOW);
camcorderProfile.videoFrameWidth = 640;
camcorderProfile.videoFrameHeight = 480;
camcorderProfile.videoCodec = MediaRecorder.VideoEncoder.H264;
// camcorderProfile.audioCodec =
// MediaRecorder.AudioEncoder.DEFAULT;
camcorderProfile.fileFormat = MediaRecorder.OutputFormat.MPEG_4;
this.mediaRecorder.setProfile(camcorderProfile);
mediaRecorder.setOrientationHint(90);
}
}
this.mediaRecorder.setOutputFile(this.initFile().getAbsolutePath());
this.mediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());
try {
this.mediaRecorder.prepare();
// start the actual recording
// throws IllegalStateException if not prepared
Handler h = new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
this.mediaRecorder.start();
pgv.setStart(true);
pgv.invalidate();
CountDownTimer cdt = new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
if (isRecording) {
handler.removeMessages(STOP);
stopRecording();
}
}
};
cdt.start();
}
}, 1000);
// enable the stop button by indicating that we are recording
} catch (Exception e) {
Toast.makeText(this, "cannot record", Toast.LENGTH_SHORT).show();
e.printStackTrace();
this.releaseMediaRecorder();
}
答案 0 :(得分:8)
此行将专门将视频旋转180度:
rotation = (cameraInfo.orientation - 180 + 360) % 360;
除非你有理由这样做我没有看到,这就是为什么你的视频是颠倒的。