uni-app 鸿蒙平台choosemedia 接口录制视频返回的数据异常
uni-app 鸿蒙平台choosemedia 接口录制视频返回的数据异常
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | 13-inch, M1, 2020 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
HBuilderX类型:正式
HBuilderX版本号:4.85
手机系统:HarmonyOS NEXT
手机系统版本号:HarmonyOS 6.0.0
手机厂商:华为
手机机型:huawei mate 60 pro
页面类型:vue
vue版本:vue3
打包方式:离线
项目创建方式:HBuilderX
示例代码:
调用接口返回的数据不对。duration 单位不对 height和 width 是颠倒的。
uni.chooseMedia({ count: PICKER_MAX_COUNT, mediaType, sourceType, maxDuration: VIDEO_MAX_DURATION, success: (res) => { const { tempFiles } = res; console.log(‘tempFiles=====’, tempFiles); }, fail: (err) => { console.error(‘chooseMedia fail’, err); }, });
操作步骤:
调用接口,录制视频,点击确认拿到数据
预期结果:
预期和其他平台一致返回 s,不要返回毫秒,宽高比例正常
实际结果:
返回数据错误
bug描述:
调用接口返回的数据不对。duration 单位不对 height和 width 是颠倒的。
uni.chooseMedia({ count: PICKER_MAX_COUNT, mediaType, sourceType, maxDuration: VIDEO_MAX_DURATION, success: (res) => { const { tempFiles } = res; console.log(‘tempFiles=====’, tempFiles); }, fail: (err) => { console.error(‘chooseMedia fail’, err); }, });
录制 5s 左右视频,打印出的数据如下,duration 返回了 5601,猜测是毫秒单位。其他平台返回都是 s,竖屏录制视频返回width比 height 还大。 [ { “fileType”: “video”, “tempFilePath”: “file://media/Photo/955/VID_1764236590_357/VID_20251127_174138.mp4”, “size”: 17241.0185546875, “byteSize”: 17654803, “thumbTempFilePath”: “/data/storage/el2/base/cache/UNI60FEE81/uni-media/VID_20251127_174138_thumbnail_2.jpg”, “duration”: 5601, “height”: 1080, “width”: 1920 } ]
更多关于uni-app 鸿蒙平台choosemedia 接口录制视频返回的数据异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app 鸿蒙平台choosemedia 接口录制视频返回的数据异常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙平台上,uni.chooseMedia 接口返回的视频数据确实存在单位不一致和宽高颠倒的问题。根据你提供的日志,duration 返回了5601(毫秒),而其他平台统一返回秒;同时竖屏视频的 width (1920) 大于 height (1080),与实际分辨率不符。
这属于鸿蒙平台适配问题。目前可通过以下方式临时处理:
- 时长单位转换:将返回的
duration除以1000转换为秒
const fixedDuration = tempFiles[0].duration / 1000
- 宽高校正:交换
width和height值
const fixedWidth = tempFiles[0].height
const fixedHeight = tempFiles[0].width

