我正在尝试制作自定义视频应用.我只使用清单2.2中的设置(API 8).
一切顺利,但我不明白为什么肖像模式视频与lanscape视频没有区别.
为了检测设备改变方向,我在surfaceChanged()中使用此代码
if (mCamera != null) {
Camera.Parameters p = mCamera.getParameters();
try {
mCamera.stopPreview();
} catch (Exception e) {
// Todo: handle exception
}
int previewWidth = 0;
int previewHeight = 0;
if (mPreviewSize != null) {
display display = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultdisplay();
int rotation = display.getRotation();
switch (rotation) {
case Surface.ROTATION_0:
previewWidth = mPreviewSize.height;
previewHeight = mPreviewSize.width;
mCamera.setdisplayOrientation(90);
break;
case Surface.ROTATION_90:
previewWidth = mPreviewSize.width;
previewHeight = mPreviewSize.height;
mCamera.setdisplayOrientation(0);
break;
case Surface.ROTATION_180:
previewWidth = mPreviewSize.height;
previewHeight = mPreviewSize.width;
mCamera.setdisplayOrientation(270);
break;
case Surface.ROTATION_270:
previewWidth = mPreviewSize.width;
previewHeight = mPreviewSize.height;
mCamera.setdisplayOrientation(180);
break;
}
p.setPreviewSize(previewWidth,previewHeight);
mCamera.setParameters(p);
}
try {
mCamera.setPreviewdisplay(mHolder);
mCamera.startPreview();
} catch (Exception e) {
Log.d(TAG,"Cannot start preview.",e);
}
}
奇迹般有效.如果我旋转设备表面更改方向,请调用surfaceChanged,其中camera设置为适当的displayRotation.
问题是如何在以后以景观模式或纵向模式捕获视频时如何确定.因为我得到的所有视频都是横向拍摄的.它不依赖于setdisplayOrientation,它只影响预览过程.
同时探索这个问题我注意到如果要使用标准相机应用程序,它会将特殊标签写入视频文件(在MediaInfo中看到):旋转:90为肖像拍摄的视频.
但是MediaRecorder类没有.
似乎这就是问题所在.有人要解决这个问题吗?
解决方法
找到了 !
实际上,你可以改变预览,你可以标记视频,但没有办法真正改变视频…(可能是速度问题或其他)
实际上,你可以改变预览,你可以标记视频,但没有办法真正改变视频…(可能是速度问题或其他)
camera.setdisplayOrientation(90);
要旋转预览,那么
recorder.setorientationHint(90);
要将视频标记为旋转90°,手机会在阅读时自动旋转.
所以你要做的就是
camera = Camera.open();
//Set preview with a 90° ortientation
camera.setdisplayOrientation(90);
camera.unlock();
holder = getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
recorder = new MediaRecorder();
recorder.setCamera(camera);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
recorder.setoutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
recorder.setoutputFile(getVideoFolder()+rnd.nextString()+".mp4");
recorder.setPreviewdisplay(holder.getSurface());
//Tags the video with a 90° angle in order to tell the phone how to display it
recorder.setorientationHint(90);
if (recorder != null) {
try {
recorder.prepare();
} catch (IllegalStateException e) {
Log.e("IllegalStateException",e.toString());
} catch (IOException e) {
Log.e("IOException",e.toString());
}
}
recorder.start();
希望能帮助到你
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。