我目前有一个系统可以将视频上传到Azure blob存储,并且运行良好。我想实现一个功能,在上传时从视频中获取缩略图,并将其推送到Azure。
我试着按照建议使用这个:
new FFMpegConverter().GetVideoThumbnail(file, outputJPEG);
问题是,我不确定使用什么作为outputJPEG,因为我没有要写入的文件,而是想将该文件写入Azure的blob存储。
有人能帮我解决这个问题吗,或者提出一个替代方法吗?
我试过:
创建一个新的、空的HttpPostedFileBase作为outputJPEG文件,但这是不可能的,因为它只接受用户上传的文件。
使用文件流,但这似乎不起作用,因为它需要写入文件的位置,而不是让我直接推送到blob存储。(通过:blob.UploadFromStream(file.InputStream);)
提前感谢您的帮助!
注意,即使使用了接受Stream的重载,GetVideoThumbnail方法也总是为输出jpeg文件创建临时文件。
如果您的目标是避免创建临时文件,您可以使用FFMpegConverter.ConvertLiveMedia重载,该重载接受文件中的inputSource并将结果写入输出流(提取视频缩略图相当于转换为只有1帧的MJPEG流)。
看起来有一个覆盖可以获取流,所以您可以将其写入内存流,然后获取内存流并在blob存储中创建一个新文件:
MemoryStream ms = new MemoryStream();
var converter = new FFMpegConverter();
converter.GetVideoThumbnail(file, ms);
ms.Position = 0;
// Write ms to a blob object here
blockblob.UploadFromStream(ms);