Android——MediaCodec录制视频保存后,视频被旋转90度了

u0129672752 2014-07-30 12:23:39

/**
*开始录制
*/
public void startCapture() {
if (!isCapturing && initCodec()) {
codec.start();
inputBuffers = codec.getInputBuffers();
outputBuffers = codec.getOutputBuffers();
frameFetcher = new FrameFetcher();
frameFetcher.start();
colorConverter = YUV420Converter.create(MyCamera.PREVIEW_FORMAT, currentSize);
isCapturing = true;
Log.i(TAG, "Start capture.");
}
}
/**
*初始化
*/
private boolean initCodec() {
codec = MediaCodec.createEncoderByType("video/avc");
MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", currentSize.width,
currentSize.height);
int bitRate = camera.getFpsRange()[1] * currentSize.width * currentSize.height / 15;
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, COLOR_FORMAT);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, bitRate);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, camera.getFpsRange()[1]);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 3);
mediaFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, camera.getCurrentFrameSize());
try {
codec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);

} catch (IllegalStateException e) {
codec.release();
codec = null;
return false;
}
return true;
}
...全文
4318 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
blueray_026 2015-06-08
  • 打赏
  • 举报
回复 1
手机相机录出来的数据本身就是横着的,要作的处理是,将相机输出的图像数据(一般是YUV420SP或YUV420P)旋转90°之后再写入到编码器进行编码,输出的H264流就是角度正常的。关于YUV420旋转网上有很多代码。同时需要注意的时候,图像旋转90°后宽高会对调,在编解码的时候注意一下宽高的设定,否则会出现花屏。
  • 打赏
  • 举报
回复
LZ,其他的方法,我 不知道,不过我当时解决的方法,其实不是方法的方法。 我偶然的一次测试发现,在手机上面自己写的录像机,录制出来的视频,导出到PC上面,播放时,是被旋转的90度,但是在手机上面用手机的播放器,播放,就是没问题的,所以,关于旋转90度的问题,我就让客户在手机上播放,(不过没给他们直接说,呵呵,),有的时候,想想也是,谁手机录制视频,放到PC上面播放,至少我的项目里面没这个需要。 希望对你有帮助。要是你解决了这个问题,给我私信,多谢!
jeky_zhang2013 2014-07-31
  • 打赏
  • 举报
回复
还没研究过,帮顶下
u0129672752 2014-07-31
  • 打赏
  • 举报
回复
longzhanfeng 2014-07-31
  • 打赏
  • 举报
回复
我跟你遇到一样的问题 而且代码也是跟你一样的。。。晕死了。刚接手一个新公司的项目 有个bug就是这个,不知道楼主解决了没 或者留个联系方式给我,大家一起解决一下 ,实在搞不定 打算用MediaRecord算了
u0129672752 2014-07-30
  • 打赏
  • 举报
回复
Darcy杨 2014-07-30
  • 打赏
  • 举报
回复
MediaCodec我没用过,不过摄像头默认是landscape的,就算用setDisplayOrientation修正过,获取的preview也不受影响。 参考下面的方法说明 android.hardware.Camera.Parameters.setRotation(int) 另外,可以试试先把获取的preview转一下再传递给encoder
u0129672752 2014-07-30
  • 打赏
  • 举报
回复
u0129672752 2014-07-30
  • 打赏
  • 举报
回复
难道就没有可以提供帮助的大神么。
u0129672752 2014-07-30
  • 打赏
  • 举报
回复
mediaFormat 的属性设置好像没有关于旋转
lionfresh 2014-07-30
  • 打赏
  • 举报
回复
检查下mediaFormat的属性设置。
u0129672752 2014-07-30
  • 打赏
  • 举报
回复
有没有人知道? 有想法都可以说出来。

80,471

社区成员

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

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