HarmonyOS 鸿蒙Next 从相册选择视频,获取视频的宽高数据有误

发布于 1周前 作者 nodeper 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 从相册选择视频,获取视频的宽高数据有误
 
我从相册选择视频,之后通过uri获取这个视频的基本信息,如宽高信息,从网络保存的视频获取视频宽高没有问题,通过手机相机拍摄的视频,宽高值是反的,获取视频信息的代码如下

async getPhotoAsset(uri: string) {
//async getPhotoAsset(uri: string): Promise<photoAccessHelper.PhotoAsset | null> {
try {
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(getContext());
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
// 配置查询条件,使用PhotoViewPicker选择图片返回的uri进行查询
predicates.equalTo('uri', uri);
let fetchOption: photoAccessHelper.FetchOptions = {
// 成员参数名称,在get时,除了'uri'、'media_type'、'subtype'和'display_name'四个属性之外,其他的属性都需要在fetchColumns中填入需要get的PhotoKeys
// fetchColumns: ['media_type', 'display_name', 'size', 'title', 'width', 'height', 'date_taken',
// 'uri', 'duration', 'orientation', 'date_added', 'date_modified', 'is_favorite'],
fetchColumns: [photoAccessHelper.PhotoKeys.WIDTH, photoAccessHelper.PhotoKeys.HEIGHT, photoAccessHelper.PhotoKeys.TITLE, photoAccessHelper.PhotoKeys.DURATION,photoAccessHelper.PhotoKeys.ORIENTATION],
predicates: predicates
};
let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> =
await phAccessHelper.getAssets(fetchOption);
// 得到uri对应的PhotoAsset对象,读取文件的部分信息
if (fetchResult !== undefined) {
const photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
if (photoAsset !== undefined) {
let w = photoAsset.get(photoAccessHelper.PhotoKeys.WIDTH);
let h = photoAsset.get(photoAccessHelper.PhotoKeys.HEIGHT);
let orientation = photoAsset.get('orientation');
let pixelMap: image.PixelMap = await photoAsset.getThumbnail();
let imageInfo: image.ImageInfo = await pixelMap.getImageInfo();
console.info('getThumbnail successful, pixelMap ImageInfo size: ' + JSON.stringify(imageInfo.size));
router.pushUrl({ url: DDPagesPath.VideoCreate_Page,params: { width:w,height:h,uri:uri,orientation:orientation } })
//return photoAsset;
}
}
//return null;
} catch (err) {
let error = err as BusinessError;
LogUtil.error(`PhotoHelper-getPhotoAsset-异常 ~ code: ${error.code} -·- message: ${error.message}`);
//return null;
}
}


更多关于HarmonyOS 鸿蒙Next 从相册选择视频,获取视频的宽高数据有误的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
获取相册视频的宽高需要结合PhotoKeys的orientation属性(旋转角度),手机录制视频,是从相机得到文件,相机框架默认的宽高是手机横着的时候的宽高,所以

竖着录制视频时,宽还是1920,高1080,orientation(旋转角度)为90;

手机横着录制视频,,宽还是1920,高1080,orientation(旋转角度)为0。

更多关于HarmonyOS 鸿蒙Next 从相册选择视频,获取视频的宽高数据有误的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next系统中,如果从相册选择视频并获取到的视频宽高数据有误,可能的原因及解决方法如下:

  1. 元数据读取问题:视频文件的元数据可能不包含准确的宽高信息,或者读取元数据的方式有误。确保使用鸿蒙系统提供的API正确读取视频文件的元数据。

  2. 视频编码格式:不同视频编码格式的视频文件,其元数据格式和存储方式可能不同。确认视频文件的编码格式是否被鸿蒙系统完全支持,并尝试使用标准编码格式(如H.264)的视频文件。

  3. 文件损坏:视频文件可能已损坏,导致无法正确读取宽高信息。尝试使用其他视频播放器打开该视频文件,确认视频文件是否完整且可正常播放。

  4. API使用错误:检查代码中用于获取视频宽高的API使用是否正确。确保按照鸿蒙系统API文档的要求正确调用相关函数,并处理可能的异常情况。

  5. 系统更新:检查鸿蒙系统是否为最新版本,有时系统更新会修复已知的问题。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部