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

1 回复

更多关于uni-app 鸿蒙平台choosemedia 接口录制视频返回的数据异常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙平台上,uni.chooseMedia 接口返回的视频数据确实存在单位不一致和宽高颠倒的问题。根据你提供的日志,duration 返回了5601(毫秒),而其他平台统一返回秒;同时竖屏视频的 width (1920) 大于 height (1080),与实际分辨率不符。

这属于鸿蒙平台适配问题。目前可通过以下方式临时处理:

  1. 时长单位转换:将返回的 duration 除以1000转换为秒
const fixedDuration = tempFiles[0].duration / 1000
  1. 宽高校正:交换 widthheight
const fixedWidth = tempFiles[0].height
const fixedHeight = tempFiles[0].width
回到顶部