我想知道是否有办法以编程方式检索AVI的第一帧并获取位图图像以向用户显示预览。 Silverlight中的MediaControl显示Silverlight支持的视频文件的预览,但不显示AVI。因为我在Silverlight环境中,所以不能使用非托管代码或库。我只能访问文件流。
答案 0 :(得分:1)
类似的问题已发布在Silverlight forum上。论坛帖子包含代码示例。
您可能希望在视频中选择一个帧,因为前几帧可能会淡入,或者不能很好地代表视频。
根据编码,MediaPlayer类可能无法读取您的AVI文件。 (有关兼容的编码,请参阅here)。您可能需要对视频进行转码以使用托管代码执行此操作。除非您找到/编写自己的解码器。
答案 1 :(得分:1)
Silverlight运行时本身不支持AVI文件,因此您将无法使用MediaElement。
您需要做的是实际手动解析AVI文件并从该文件中提取帧。一旦你到了解析帧的地步,它可能会变得有点棘手。
如果您打算在Silverlight 2上进行此项工作,则您的AVI文件需要包含Silverlight支持的图像格式(JPG或PNG)之一的WMV帧或帧。如果你正在使用WMV,我会设置一个MediaStreamSource并将所需的视频帧传递给MediaStreamSource作为我的第一个样本。如果您正在使用其中一种图像格式,则应使用Image并将其源设置为流。您可以看到Joe Stegman使用此示例帮助Silverlight 2支持非本地image formats的示例。
如果你在Silverlight 3中做到这一点(它现在处于测试阶段),技术通常是相同的,但媒体格式支持增长了一些(除了WMV):H264,Raw YV12或Raw ARGB帧。类似地,在成像前端,您现在拥有可用于绘制框架的WriteableBitmap。
如果您的视频类似于Theora,Divx,Xvid,VP6等,您需要找到解码该帧的方法,以便在Silverlight中显示它。