我目前有一个系统可以将视频上传到Azure blob存储并且工作正常。我想实现一个功能,在上传时抓取视频中的缩略图并将其推送到Azure。
我按照建议使用了这个:
new FFMpegConverter().GetVideoThumbnail(file, outputJPEG);
问题是我不确定要使用什么作为outputJPEG,因为我没有写入的文件,而是想将该文件写入Azure的blob存储。
任何人都可以帮我解决这个问题,或者建议另一种方法吗?
我试过了:
创建一个新的空HttpPostedFileBase作为outputJPEG文件,但这是不可能的,因为它只接受用户上传的文件。
使用文件流但这似乎不起作用,因为它需要写入文件的位置,而不是让我只是推送到blob存储。 (via:blob.UploadFromStream(file.InputStream);)
提前感谢您的帮助!
答案 0 :(得分:0)
看起来有一个带有流的覆盖,所以你可以将它写入内存流然后获取内存流并在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);
答案 1 :(得分:0)
请注意,即使使用了接受Stream的重载,GetVideoThumbnail方法也始终为输出jpeg文件创建临时文件。
如果你的目标是避免创建临时文件,你可以使用FFMpegConverter.ConvertLiveMedia重载,它接受来自文件的inputSource并将结果写入输出流(提取视频缩略图相当于仅转换为只有1帧的MJPEG流)。