以竖屏模式拍摄的旋转视频

15

我的应用程序允许用户拍摄视频:

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_VIDEO_REQUEST); 

或图片:

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 

对于照片的情况,我可以判断它们是否是在非横向模式下拍摄的,然后在上传到网站之前将它们旋转:

ExifInterface exif = new ExifInterface(fileName);
int exifOrientation = Integer.parseInt(exif.getAttribute(ExifInterface.TAG_ORIENTATION));
float rotate = 0;
switch (exifOrientation){
case ExifInterface.ORIENTATION_ROTATE_90:
    rotate = 90;
    break;
case ExifInterface.ORIENTATION_ROTATE_180:
    rotate = 180;
    break;
case ExifInterface.ORIENTATION_ROTATE_270:
    rotate = 270;
    break;
}

if(rotate > 0){
    Bitmap bitmap = BitmapFactory.decodeFile(fileName);
    Matrix matrix = new Matrix();
    matrix.postRotate(rotate);
    bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    OutputStream outStream = context.getContentResolver().openOutputStream(Uri.fromFile(file));
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
}

我如何用视频实现相同的效果?


https://dev59.com/e2865IYBdhLWcg3wM7q0 - Samir Mangroliya
1
是的,我想我可以将其直接发布到服务器上并在那里运行flvtool和ffmpeg。不过有没有办法在设备上完成这个操作呢? - shaharsol
2
嘿@shaharsol,你找到这个问题的解决方案了吗?我也遇到了同样的问题。 - cantfindaname88
1
我遇到了同样的问题,有人能提供有效的答案吗?我在录制后上传视频,但上传后方向发生了改变。 - Meenakshi Khandelwal
1个回答

2
我似乎没有完全理解你的问题。以下是我认为至少可以引导你朝正确方向思考的一些问题。希望能帮到你。
1. 你是否想要通过MediaPlayer旋转视频进行播放? 2. 你是否想要更改视频文件中的硬编码,使其在任何地方都可以旋转播放? 3. 旋转缓冲的视频方向?
================================================================================== 对问题#1的回答:

//rotating a SurfaceView that contains the MediaPlayer
/*
    Create a new MediaPlayer SurfaceView, then use the SurfaceHolder interface
*/
video = new SurfaceView();
video.getHolder().setType(SurfaceHolder.SURFACE_TYPE_NORMAL);

video.getHolder().lockCanvas().rotate(90);

第二个问题的答案:

关于更改视频的硬编码。我建议使用一个好的GUI视频编解码器来旋转视频,并保存其设置。否则,您将不得不访问解码器的源代码,然后按照我的建议进行操作。

第三个问题的答案:

下面的帖子解释了如何旋转缓冲视频和/或更改其不同模式的方向设置。

帖子链接:Android VideoView orientation change with buffered video

==================================================================================

如果这不能帮助你,我相信它会帮助其他人,祝你好运。


video.getHolder().lockCanvas().rotate(90); 这种方法在MediaPlayer上不可用,会显示未知错误并无法播放视频。 - Ernest Poletaev
@Ernest 你是在使用 video.getHolder().setType(SurfaceHolder.SURFACE_TYPE_NORMAL); 还是 video.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); ? - CommonKnowledge
这已经过去多年了,但我相信这对我起作用了。如果不起作用,也许可以尝试一下... https://dev59.com/Rl3Va4cB1Zd3GeqPD8sH - CommonKnowledge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接