uni-app chooseVideo getVideoInfo 返回值错误
uni-app chooseVideo getVideoInfo 返回值错误
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | 3.1.22 | HBuilderX |
操作步骤:
执行uni.chooseVideo
输出返回参数,参数值错误。
执行uni.getVideoInfo
输出返回参数,参数值错误。
预期结果:
执行uni.chooseVideo
输出返回参数,参数值正确。
执行uni.getVideoInfo
输出返回参数,参数值正确。
实际结果:
执行uni.chooseVideo
输出返回参数,参数值错误。
执行uni.getVideoInfo
输出返回参数,参数值错误。
bug描述:
手机操作系统:鸿蒙2.0.0.168
uni.chooseVideo
手机正常竖屏拍摄,返回参数为:
竖屏宽3456,高1944。不正确。
{
"errMsg": "chooseVideo:ok",
"tempFilePath": "file:///storage/emulated/0/Android/data/com.xxxx.xxxx/apps/UNIXXXXXX/temp/compress_video_550700592.mp4",
"size": 2339245,
"duration": 3.65,
"width": 3456,
"height": 1944
}
横屏拍摄宽3456,高1944。正确。
{
"errMsg": "chooseVideo:ok",
"tempFilePath": "file:///storage/emulated/0/Android/data/com.xxxx.xxxx/apps/UNIXXXXXX/temp/compress_video_550700592.mp4",
"size": 2339245,
"duration": 3.65,
"width": 3456,
"height": 1944
}
uni.getVideoInfo
竖屏视频返回参数,方向不正确。
{
"orientation": "right",
"type": "video/mp4",
"duration": 3.35,
"size": 1924866,
"height": 1944,
"width": 3456,
"fps": 17,
"bitrate": 4597,
"errMsg": "getVideoInfo:ok"
}
横屏视频返回参数,方向不正确。
{
"orientation": "up",
"type": "video/mp4",
"duration": 3.65,
"size": 2339245,
"height": 1944,
"width": 3456,
"fps": 19,
"bitrate": 5129,
"errMsg": "getVideoInfo:ok"
}
更多关于uni-app chooseVideo getVideoInfo 返回值错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html
没人解决吗
更多关于uni-app chooseVideo getVideoInfo 返回值错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我看看。你提供一下 出问题的代码 和视频。 我试试
回复 7***@qq.com: 你这个写的是 getImageInfo
回复 DCloud_Android_DQQ: 不好意思 上传错了 看这个代码 录制的时候,横屏和竖屏返回的不一样
回复 DCloud_Android_DQQ: 已上传最新方法
回复 7***@qq.com: 我试试
回复 7***@qq.com: 你直接给个完整的vue吧
你直接给一个完整的vue示例。
根据你提供的信息,这个问题主要出现在鸿蒙系统(HarmonyOS 2.0.0.168)上,涉及 uni.chooseVideo 和 uni.getVideoInfo 返回的视频宽高(width、height)和方向(orientation)参数错误。
问题分析:
uni.chooseVideo:在竖屏拍摄时,返回的width(3456) 和height(1944) 与实际不符。从数值看,它可能返回了传感器采集的原始分辨率(或横屏时的分辨率),而没有根据视频的实际显示方向进行交换。横屏拍摄时返回的宽高值在数值上“正确”,但结合orientation问题,可能也是基于错误的方向信息。uni.getVideoInfo:返回的orientation值("right"、"up")与视频实际方向不匹配。"up"通常表示设备顶部在上方(竖屏),"right"表示设备顶部在右侧(横屏)。你的测试结果显示,竖屏视频的orientation是"right",横屏视频的orientation是"up",这显然是颠倒的。同时,width和height也保持了与chooseVideo相同的问题。
根本原因:
这很可能是 uni-app 在鸿蒙系统上的原生层适配问题。在 Android 系统上,uni.chooseVideo 和 uni.getVideoInfo 通常会读取视频文件的元数据(如 MP4 文件中的旋转矩阵信息)来正确判断方向并据此调整宽高。鸿蒙系统虽然兼容 Android 应用,但其底层实现或媒体库行为可能存在差异,导致 uni-app 获取这些元数据时得到了错误的值,或者没有正确处理鸿蒙系统返回的方向信息。
临时解决方案:
由于这是平台兼容性问题,在官方修复前,你可以通过 orientation 参数来手动校正宽高。虽然你获取到的 orientation 值是错误的,但它的错误呈现是一致的(竖屏对应 "right",横屏对应 "up")。因此,可以建立一个新的映射逻辑:
// 在 uni.chooseVideo 或 uni.getVideoInfo 的成功回调中
function adjustVideoInfo(result) {
let { width, height, orientation } = result;
// 根据你测试出的错误映射关系进行校正
if (orientation === 'right') {
// 当前 orientation 为 'right' 时,实际是竖屏视频
// 如果需要,可以在这里交换宽高,但注意:result 中的 width/height 可能已经是传感器原始数据
// 更常见的做法是,根据 orientation 决定 UI 中视频容器的宽高比
console.log('实际为竖屏视频');
// 示例:如果你希望得到正确的显示宽高,可能需要手动交换
// [width, height] = [height, width];
} else if (orientation === 'up') {
// 当前 orientation 为 'up' 时,实际是横屏视频
console.log('实际为横屏视频');
}
// 使用校正后的逻辑进行后续处理
// ... your code ...
}
// 调用示例
uni.chooseVideo({
success: (res) => {
adjustVideoInfo(res);
// 或者直接使用 res.width, res.height,但结合你校正后的 orientation 理解其含义
}
});

