我正在尝试创建一个WCF服务,该服务利用服务器上的WPF MediaPlayer为用户上传的视频生成缩略图。我发现了很多关于如何渲染帧并将其保存到文件的信息。但问题是关键事件MediaOpened(实际上没有任何事件)我需要绑定到不 - EDIT fire。
有人知道如果在WCF服务的上下文中使用WPF MediaPlayer事件是否会触发吗?
感谢 迈克尔
答案 0 :(得分:1)
我决定尝试使用Expression Media Encoder 2 SDK,效果很好。
从视频生成缩略图的代码很少 - 这是一个片段
public void GenerateThumbnails(string fileName, int numberOfThumbnails)
{ 队列_positionsToThumbnail = new Queue(); Microsoft.Expression.Encoder.MediaItem video = new Microsoft.Expression.Encoder.MediaItem(fileName);
var totalMilliseconds = video.FileDuration.TotalMilliseconds;
//create a queue of timespans for the thumbnails
for (int i = 0; i < numberOfThumbnails; i++)
{
_positionsToThumbnail.Enqueue(TimeSpan.FromMilliseconds((((2 * i) + 1) * totalMilliseconds) / (2 * numberOfThumbnails)));
}
//create the thumbnails and save them to disk
while(_positionsToThumbnail.Count > 0)
{
Bitmap bitMap = video.GetThumbnail(_positionsToThumbnail.Dequeue(), new System.Drawing.Size(100,100));
bitMap.Save(@"F:\thumbs\" + _positionsToThumbnail.Count.ToString() + ".png", ImageFormat.Png);
}
}
答案 1 :(得分:0)
您可能需要在屏幕上呈现数据,以便触发这些事件 - 它们都与WPF可视树的一部分相关联;当作为服务运行时,它不是。
有许多方法可以尝试解决这个问题,所有这些方法都很复杂,而且可能无法扩展。我建议使用普通的Windows Media API(来自Windows Media SDK)来深入了解它。