我需要捕获在asp.net网站上传的视频的第一帧。我真的很想用WPF做这件事(如果可能的话),但如果有人知道更简单的方法,我也会对此持开放态度。
我在WPF中看过使用MediaPlayer和RenderTargetBitmap的示例,但每个示例都假设视频可以通过URI访问。在我的场景中,我只有文件字节,我不想直接将视频存储在FS上。
非常感谢任何帮助!
答案 0 :(得分:2)
我不知道这是可取的,因为它很可能要求你运行某种类型的消息泵,这在ASP.NET站点中是个坏主意。
相反,我会使用DirectShow API来尝试和处理视频。您应该能够使用它将内容作为字节流式传输,并且您不需要消息循环来处理视频。
您可以使用位于此处的DirectShow .NET包装器通过.NET访问它:
http://directshownet.sourceforge.net/
您将需要查看MSDN上的Sample Grabber示例:
http://msdn.microsoft.com/en-us/library/ms787867(VS.85).aspx
请注意,您可能不一定需要第一帧,就像许多视频一样,它们可能是黑色的,并且不是缩略图的理想选择。相反,你可能想要做Vista所做的事情,并寻找第一个非黑框。
答案 1 :(得分:2)
我最终使用FFMpeg.exe(Downloaded from here)来捕获上传到我网站的视频的第一帧。这可能不是最理想的解决方案,但我没有任何DirectShow体验,在我看来,这个解决方案比提到的其他建议简单得多。
我无法将文件保存到文件系统,因此我只是将上传的字节写入磁盘上的临时文件,使用FFMpeg执行工作,然后删除在此过程中生成的每个文件。 / p>
此处理是在与请求线程不同的线程上完成的。如果我发现这是一个问题,我有一个单独的Windows服务,我可以卸载工作没有问题。
获取单个帧的语法如下:
FFMpeg.exe -i "c:\MyPath\MyVideo" -vframes 1 "c:\MyOutputPath\MyImage%d.jpg"
%d非常重要。如果不包含此项,FFMpeg将抛出错误。在写出文件时,%d将替换序列号。
我希望这有帮助!
答案 2 :(得分:0)