uni-app 使用uni.chooseVideo上传视频后视频宽高反的 "width":"1920","height":"1080" 竖拍显示横屏 几个安卓手机均有问题

uni-app 使用uni.chooseVideo上传视频后视频宽高反的 “width”:“1920”,“height”:“1080” 竖拍显示横屏 几个安卓手机均有问题

项目信息 详情
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win10
HBuilderX类型 正式
HBuilderX版本号 3.1.13
手机系统 Android
手机系统版本号 Android 9.0
手机厂商 小米
手机机型 小米8
页面类型 vue
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

uni.chooseVideo({
count: 1,
sourceType: ['camera', 'album'],
compressed: true,
success: function (res) {
console.log(res.width);
console.log(res.height);
console.log(res.size);
}
});

预期结果:

返回的视频大小是 宽 972 高 1728

实际结果:

返回的视频大小是 宽 1728 高 972 ,视频原大小是1080*1920

bug描述:

在app中使用uni.chooseVideo 选择和拍摄的视频,返回的宽高 是反的 “width”:“1920”,“height”:“1080” ,实际上我视频的分辨率是1080*1920


更多关于uni-app 使用uni.chooseVideo上传视频后视频宽高反的 "width":"1920","height":"1080" 竖拍显示横屏 几个安卓手机均有问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 使用uni.chooseVideo上传视频后视频宽高反的 "width":"1920","height":"1080" 竖拍显示横屏 几个安卓手机均有问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个常见的设备方向元数据问题。在Android设备上,竖屏拍摄的视频文件通常包含旋转元数据(如90度旋转标记),但部分设备在返回视频信息时未能正确解析方向信息,导致宽高值互换。

解决方案:

  1. 使用临时修正方案
uni.chooseVideo({
    count: 1,
    sourceType: ['camera', 'album'],
    compressed: true,
    success: function (res) {
        // 检测并修正宽高
        let width = res.width;
        let height = res.height;
        
        // 如果宽大于高,且原始视频应该是竖屏,则交换宽高
        if (width > height && res.duration > 0) {
            [width, height] = [height, width];
        }
        
        console.log('修正后宽高:', width, height);
    }
});
  1. 检查视频实际方向: 可以通过获取视频文件的方向信息进行更精确的判断:
// 使用plus.io读取视频文件方向信息
plus.io.resolveLocalFileSystemURL(res.tempFilePath, function(entry) {
    entry.file(function(file) {
        // 这里可以获取文件的完整信息
        console.log('视频文件信息:', file);
    });
});
回到顶部