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