《鸿蒙开发-答案之书》获取视频第一帧和视频时间
public static async getSightInfo(uri: string): Promise<[string, number]> {
let file = fs.openSync(uri, fs.OpenMode.READ_ONLY);
let fdSrc: media.AVFileDescriptor = {
fd: file.fd
};
let base64 = '';
try {
let avImageGenerator: media.AVImageGenerator = await media.createAVImageGenerator();
avImageGenerator.fdSrc = fdSrc;
let timeUs = 0;
let queryOption = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC;
let param: media.PixelMapParams = {};
let pixelMap = await avImageGenerator.fetchFrameByTime(timeUs, queryOption, param);
await avImageGenerator.release();
const MAX_SIZE = 240;
const MIN_SIZE = 100;
await calculateThumbnailScaling(pixelMap, MAX_SIZE, MIN_SIZE);
const imagePackerApi: image.ImagePacker = image.createImagePacker();
let packOpts: image.PackingOption = { format: 'image/jpeg', quality: 80 };
let data: ArrayBuffer = await imagePackerApi.packing(pixelMap, packOpts);
let buf: buffer.Buffer = buffer.from(data);
base64 = buf.toString('base64', 0, buf.length);
} catch (error) {
let err = error as BusinessError;
hilog.error(0x0000, '', `error code: ${err.code}, error message: ${err.message}`);
}
let duration: number = 0;
try {
let aVMetadataExtractor: media.AVMetadataExtractor = await media.createAVMetadataExtractor();
aVMetadataExtractor.fdSrc = fdSrc;
let metadata = await aVMetadataExtractor.fetchMetadata();
aVMetadataExtractor.release();
duration = new Number(metadata.duration).valueOf();
hilog.error(0x0000, 'IM-APP', `metadata: %{public}s`, JSON.stringify(metadata));
} catch (error) {
let err = error as BusinessError;
hilog.error(0x0000, '', `error code: ${err.code}, error message: ${err.message}`);
}
return [base64, duration / 1000];
}