MediaRecorder怎么在竖屏的时候录像结果是横屏录的结果?

十三邵 2015-07-29 01:46:26
public class VideoActivity extends Activity implements SurfaceHolder.Callback {
private Button start;// 开始录制按钮
private Button stop;// 停止录制按钮
private MediaRecorder mediarecorder;// 录制视频的类
private SurfaceView surfaceview;// 显示视频的控件
private SurfaceHolder surfaceHolder;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
// WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏
//// 设置横屏显示
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//// 选择支持半透明模式,在有surfaceview的activity中使用。
// getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(R.layout.video);
init();
}

private void init() {
start = (Button) this.findViewById(R.id.start);
stop = (Button) this.findViewById(R.id.stop);
start.setOnClickListener(new TestVideoListener());
stop.setOnClickListener(new TestVideoListener());
surfaceview = (SurfaceView) this.findViewById(R.id.surfaceview);
SurfaceHolder holder = surfaceview.getHolder();// 取得holder
holder.addCallback(this); // holder加入回调接口
// setType必须设置,要不出错.
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
Camera camera;
class TestVideoListener implements OnClickListener {

@Override
public void onClick(View v) {
if (v == start) {
mediarecorder = new MediaRecorder();// 创建mediarecorder对象
// 设置录制视频源为Camera(相机)
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
if (camera != null) {
// camera.setDisplayOrientation(90);//摄像图旋转90度
camera.unlock();
mediarecorder.setCamera(camera);
}
mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
mediarecorder.setPreviewDisplay(surfaceHolder.getSurface());
// mediarecorder.setOrientationHint(90);//视频旋转90度,没有用
System.out.println("手机默认地址:" + Environment.getExternalStorageDirectory());
// 设置视频文件输出的路径
mediarecorder.setOutputFile(Environment.getExternalStorageDirectory() + "/" + "test.mp4");
try {
// 准备录制
mediarecorder.prepare();
// 开始录制
mediarecorder.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (v == stop) {
if (mediarecorder != null) {
// 停止录制
mediarecorder.stop();
// 释放资源
mediarecorder.release();
mediarecorder = null;
}
}

}

}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// 将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder
surfaceHolder = holder;
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
// 将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder
surfaceHolder = holder;
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// surfaceDestroyed的时候同时对象设置为null
surfaceview = null;
surfaceHolder = null;
mediarecorder = null;
}
}

像做朋友圈视频那样的,竖着拿手机,然后压缩显示出横着拿手机拍摄的效果,现在代码显示出的还是竖屏拍摄结果,设置camera.setDisplayOrientation(90)现实的虽然是横屏,但明显是把竖屏给纵向压缩了,比例都变了。。。
...全文
2738 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
I0v0I 2017-11-16
  • 打赏
  • 举报
回复
解决办法:把楼主的代码中那两句,注释的旋转90度的代码都取消注释,经本人测试可用
7i昂 2017-02-22
  • 打赏
  • 举报
回复
微信小视频不是竖屏拍出横屏的效果,而是竖屏拍摄截取了屏幕中央三分之一的部分而已
shi1984 2016-08-31
  • 打赏
  • 举报
回复
你们都解决了吗?我也遇到这个问题了,研究了一个星期了。
yuelong_nj 2016-08-16
  • 打赏
  • 举报
回复
有没有解决方案啊,我也遇到了,可以联系下吗 12641172 qq
hh105 2016-01-05
  • 打赏
  • 举报
回复
引用 14 楼 weskmoon 的回复:
楼主,我也碰到了你这个问题,网上找了很多资料,都解决不了,你现在解决了吗?
大神,我现在也是这个问题吖不知道咋解决了
flying8127 2015-12-30
  • 打赏
  • 举报
回复
camera.setDisplayOrientation(90)只是把竖屏录的视频旋转了,并不是采用了横屏的摄像角度, -------------------------------------------- 这个只是把显示旋转了,摄像头采集默认是按横屏来采集的,你可以把录制的文件放电脑看是旋转90度的。 竖屏拍出横屏效果是没有什么直接接口可用的,需要自己去处理。
flying8127 2015-12-30
  • 打赏
  • 举报
回复
引用 10 楼 u014765620 的回复:
[quote=引用 9 楼 lxfhjjsfq 的回复:] 昨天我也试了好长时间,也没找到办法,设置的一些参数只是对显示起作用,对应生成的视频不起作用,所以我觉得还是在输出格式或录制到生成文件的那个步骤需要设置,但是没有找到地方。
现在只能先截取视频的中间部分,造成是横屏录的感觉了。。。[/quote] 这个方法可以试试
weskmoon 2015-11-09
  • 打赏
  • 举报
回复
楼主,我也碰到了你这个问题,网上找了很多资料,都解决不了,你现在解决了吗?
七月0504 2015-09-24
  • 打赏
  • 举报
回复
楼主解决这个问题了没???能否指点我一下?
七月0504 2015-09-24
  • 打赏
  • 举报
回复
引用 11 楼 u014765620 的回复:
引用 9 楼 lxfhjjsfq 的回复:
昨天我也试了好长时间,也没找到办法,设置的一些参数只是对显示起作用,对应生成的视频不起作用,所以我觉得还是在输出格式或录制到生成文件的那个步骤需要设置,但是没有找到地方。
找到了麻烦告诉我一声啊兄弟
楼主解决这个问题了没? 我找了3天资料,还是没办法。感激不尽。。。。。。。。。。。。。。。。。。。。。
十三邵 2015-08-03
  • 打赏
  • 举报
回复
引用 9 楼 lxfhjjsfq 的回复:
昨天我也试了好长时间,也没找到办法,设置的一些参数只是对显示起作用,对应生成的视频不起作用,所以我觉得还是在输出格式或录制到生成文件的那个步骤需要设置,但是没有找到地方。
找到了麻烦告诉我一声啊兄弟
十三邵 2015-07-31
  • 打赏
  • 举报
回复
引用 9 楼 lxfhjjsfq 的回复:
昨天我也试了好长时间,也没找到办法,设置的一些参数只是对显示起作用,对应生成的视频不起作用,所以我觉得还是在输出格式或录制到生成文件的那个步骤需要设置,但是没有找到地方。
现在只能先截取视频的中间部分,造成是横屏录的感觉了。。。
_xianfeng99 2015-07-30
  • 打赏
  • 举报
回复
昨天我也试了好长时间,也没找到办法,设置的一些参数只是对显示起作用,对应生成的视频不起作用,所以我觉得还是在输出格式或录制到生成文件的那个步骤需要设置,但是没有找到地方。
十三邵 2015-07-30
  • 打赏
  • 举报
回复
引用 7 楼 boatwater 的回复:
判断状态然后转换?纯属个人想法,错了勿怪哈。
引用 7 楼 boatwater 的回复:
判断状态然后转换?纯属个人想法,错了勿怪哈。
关键就是不知道转这步代码怎么写。。。都不用判断状态。。。
boatwater 应用层 2015-07-30
  • 打赏
  • 举报
回复
判断状态然后转换?纯属个人想法,错了勿怪哈。
JPF1024 2015-07-30
  • 打赏
  • 举报
回复
引用 5 楼 u014765620 的回复:
[quote=引用 4 楼 dcxy0 的回复:] http://blog.csdn.net/licui1000/article/details/7591080 看下这个呢。

camera.setDisplayOrientation(90);//摄像图旋转90度
camera.unlock();
mediarecorder.setCamera(camera);
}
// 设置录制视频源为Camera(相机)
mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediarecorder.setOrientationHint(90);//视频旋转90度
camera.setDisplayOrientation(90)只是把竖屏录的视频旋转了,并不是采用了横屏的摄像角度,mediarecorder.setOrientationHint(90);//视频旋转90度压根就不起作用啊。。。不过还是谢谢啦。[/quote] 是不是跟你SDK版本有关系,可以换个新版本,或者换一个低版本试试
十三邵 2015-07-30
  • 打赏
  • 举报
回复
引用 4 楼 dcxy0 的回复:
http://blog.csdn.net/licui1000/article/details/7591080 看下这个呢。

camera.setDisplayOrientation(90);//摄像图旋转90度
camera.unlock();
mediarecorder.setCamera(camera);
}
// 设置录制视频源为Camera(相机)
mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediarecorder.setOrientationHint(90);//视频旋转90度
camera.setDisplayOrientation(90)只是把竖屏录的视频旋转了,并不是采用了横屏的摄像角度,mediarecorder.setOrientationHint(90);//视频旋转90度压根就不起作用啊。。。不过还是谢谢啦。
JPF1024 2015-07-29
  • 打赏
  • 举报
回复
http://blog.csdn.net/licui1000/article/details/7591080 看下这个呢。

camera.setDisplayOrientation(90);//摄像图旋转90度
camera.unlock();
mediarecorder.setCamera(camera);
}
// 设置录制视频源为Camera(相机)
mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediarecorder.setOrientationHint(90);//视频旋转90度
十三邵 2015-07-29
  • 打赏
  • 举报
回复
怎样才能竖屏拍出横屏的效果啊。。。像朋友圈小视频那样的,跪求啊。。。
十三邵 2015-07-29
  • 打赏
  • 举报
回复
引用 1 楼 gao_chun 的回复:
不用去camera.setDisplayOrientation(90),应该直接可以在拍摄时去判断是横向还是纵向的吧
关键问题就是不知道怎么设置。。。
加载更多回复(1)

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧