我尝试从属于视频的字节数组中获取持续时间和缩略图,我使用客户端流通过gRPC方法发送视频
info := firstMessage.GetInfo()
if info == nil {
return errors.Errorf(errors.FirstMessageNotInfo)
}
imageSize := 0
fileBytes := make([]byte, 0)
writer, fileName, err := i.service.CreateFileWriter(info.Type)
if err != nil {
return errors.Errorf(errors.UnknownError, err)
}
// All the messages except the first one is bytes of data that constitutes a part of the file
for {
req, dataErr := stream.Recv()
if dataErr != nil {
break
}
chunk := req.GetData()
imageSize += len(chunk)
fileBytes = append(fileBytes, chunk...)
}
if info.GetType() == "video" {
duration, thumbnail , err := utils.ExtractDurationAndFrameFromVideo(fileBytes)
}
有没有一种方法可以从字节数组中获取这些细节,而不用保存视频并使用一些库(如ffmpeg)重新打开它?
一种从字节数组中提取时长和帧的方法
1条答案
按热度按时间0lvr5msh1#
你的要求并不完全清楚,你试图避免将文件保存到磁盘,但你在内存中保留了整个文件的副本,这不是更昂贵的资源吗?
还有:你是想避免ffmpeg,还是避免写磁盘?
我建议将数据流传输到ffmpeg的stdin,这样可以避免整个视频的磁盘和内存拷贝。
如果内存中的拷贝不成问题,那么https://pkg.go.dev/github.com/3d0c/gmf或https://pkg.go.dev/github.com/AlexEidt/Vidio等库可以为您调用ffmpeg。