HarmonyOS鸿蒙Next中如何获取沙箱目录下视频的首帧图片?现象:视频录制之后,获取不到首帧图片,视频预览页面黑屏了。
HarmonyOS鸿蒙Next中如何获取沙箱目录下视频的首帧图片?现象:视频录制之后,获取不到首帧图片,视频预览页面黑屏了。 请问如何获取沙箱目录下视频的首帧图片? 现象:视频录制之后,获取不到首帧图片,视频预览页面黑屏了。
3 回复
参考demo
import { media } from '@kit.MediaKit';
import { image } from '@kit.ImageKit';
import { fileIo } from '@kit.CoreFileKit';
const TAG = 'MetadataDemo'
let context = getContext(this)
let filesDir = context.filesDir
let filePath = filesDir + "/" + "test.mp4"
@Entry
@Component
struct Index {
@State message: string = 'Hello World'
@State pixelMap: image.PixelMap | undefined = undefined;
build() {
Row() {
Column() {
Text('保存到沙箱路径').fontSize(50).fontWeight(FontWeight.Bold).onClick(() => {
context.resourceManager.getRawFile("test.mp4", (err, value) => {
let file = fileIo.openSync(filePath, fileIo.OpenMode.CREATE | fileIo.OpenMode.READ_WRITE);
console.log(`${value.buffer.byteLength}`)
fileIo.writeSync(file.fd, value.buffer)
fileIo.closeSync(file.fd)
})
})
Button('获取封面')
.type(ButtonType.Capsule)
.margin({ top: 20 })
.backgroundColor('#0D9FFB')
.width('60%')
.height('5%')
.onClick(() => {
this.testFetchFrame()
})
Image(this.pixelMap).width(300).height(300)
.margin({ top: 20 })
}
.width('100%')
}
.height('100%')
}
async testFetchFrame() {
let avImageGenerator: media.AVImageGenerator = await media.createAVImageGenerator()
let file = fileIo.openSync(filePath, fileIo.OpenMode.CREATE | fileIo.OpenMode.READ_WRITE);
let dataSrc: media.AVFileDescriptor = {
fd: file.fd,
}
avImageGenerator.fdSrc = dataSrc
let timeUs = 0
let queryOption = media.AVImageQueryOptions.AV_IMAGE_QUERY_NEXT_SYNC
let param: media.PixelMapParams = {
width: 300,
height: 300
}
this.pixelMap = await avImageGenerator.fetchFrameByTime(timeUs, queryOption, param)
avImageGenerator.release()
console.info(TAG, `release success.`)
}
}
更多关于HarmonyOS鸿蒙Next中如何获取沙箱目录下视频的首帧图片?现象:视频录制之后,获取不到首帧图片,视频预览页面黑屏了。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,获取沙箱目录下视频的首帧图片可以通过AVMetadataHelper类来实现。首先,使用AVMetadataHelper初始化并设置数据源为沙箱目录下的视频文件路径。然后,调用getFrameAtTime方法获取视频的首帧图片,该方法返回一个PixelMap对象。如果获取失败,检查视频文件路径是否正确,以及视频文件是否损坏。若视频预览页面黑屏,可能是由于获取的首帧图片为空或渲染失败,需确保PixelMap对象正确传递给预览组件。
在HarmonyOS鸿蒙Next中,获取沙箱目录下视频的首帧图片,可以使用MediaMetadataRetriever类。首先,初始化MediaMetadataRetriever并设置视频路径,然后调用getFrameAtTime()方法获取首帧图片。代码示例如下:
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(videoPath);
Bitmap bitmap = retriever.getFrameAtTime();
确保视频路径正确,并且应用有读取沙箱目录的权限。如果视频预览页面黑屏,检查路径和权限设置是否正确。

