gpt4 book ai didi

android - 元数据旋转不对怎么获取视频旋转角度?

转载 作者:行者123 更新时间:2023-11-30 00:38:15 26 4
gpt4 key购买 nike

我有一个视频文件,我从下面的代码中得到它的分辨率(3840x2160)和旋转(0):

        MediaMetadataRetriever retr = new MediaMetadataRetriever();
retr.setDataSource(mVideoFile);
String height = retr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
String width = retr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
String rotation = retr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);

但是实际上,视频旋转角度不对,应该是 90、2160x3840 分辨率,所以我的视频总是无法在我的 android 应用程序中正确显示。

有趣的是,一些第3方视频播放器(如VLC)可以检测到这个视频文件的实际旋转,而且它的显示也没有问题,他们是怎么做到的?

最佳答案

虽然为时已晚,但可能会对 future 的访问者有所帮助。

下一行将返回视频的旋转。四个可能的值将是 0,90,180,270。

rotation = Integer.parseInt(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION));

如果旋转为 90 度或 270 度,则宽度和高度将调换。

Android MediaMetadataRetriever wrong video height and width

所以滑动宽度和高度,如果旋转是 90 或 270。

if(rotation == 90 || rotation == 270)
{
int swipe = width;
width = height;
height = swipe;
}

完整代码如下。我将结果与 MXPlayer 结果进行比较。

public static String getVideoResolution(File file)
{
try
{
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(file.getPath());
int width = Integer.parseInt(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH));
int height = Integer.parseInt(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT));
int rotation = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
rotation = Integer.parseInt(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION));
}
retriever.release();

if(rotation != 0)
{
if(rotation == 90 || rotation == 270)
{
int swipe = width;
width = height;
height = swipe;
}
}

return width + " x " + height;
}
catch (Exception e)
{
e.printStackTrace();
return "Information not found.";
}
}

以下是设置屏幕方向的代码。

int width;
int height;
int rotation = 0;
try {
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(filePath);
width = Integer.parseInt(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH));
height = Integer.parseInt(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT));

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
rotation = Integer.parseInt(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION));
}
retriever.release();

if(rotation != 0)
{
if(rotation == 90 || rotation == 270)
{
int swipe = width;
width = height;
height = swipe;
}
}
this.setRequestedOrientation(width < height ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
catch (Exception e){
e.printStackTrace();
}

在低于 Build.VERSION_CODES.JELLY_BEAN_MR1 的版本上运行的设备呢?

答:我不知道。但上面的代码适用于大多数设备。

以下是最佳答案:https://stackoverflow.com/a/56337044/8199772

关于android - 元数据旋转不对怎么获取视频旋转角度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43041799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com