《鸿蒙开发-答案之书》获取视频第一帧和视频时间
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];}