我正在尝试创建一个 WCF 服务,该服务利用服务器上的 WPF MediaPlayer 为用户上传的视频生成缩略图。我发现了很多关于如何渲染帧并将其保存到文件的 oif 信息。但问题是我需要绑定的关键事件 MediaOpened (实际上没有任何事件)- EDIT 触发。
有谁知道如果在 WCF 服务的上下文中使用 WPF MediaPlayer 事件是否不会触发?
谢谢迈克尔
我正在尝试创建一个 WCF 服务,该服务利用服务器上的 WPF MediaPlayer 为用户上传的视频生成缩略图。我发现了很多关于如何渲染帧并将其保存到文件的 oif 信息。但问题是我需要绑定的关键事件 MediaOpened (实际上没有任何事件)- EDIT 触发。
有谁知道如果在 WCF 服务的上下文中使用 WPF MediaPlayer 事件是否不会触发?
谢谢迈克尔
我决定尝试使用 Expression Media Encoder 2 SDK,效果很好。
从视频生成缩略图的代码很少 - 这是一个片段
public void GenerateThumbnails(string fileName, int numberOfThumbnails)
{ 队列 _positionsToThumbnail = 新队列();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);
}
}
您可能需要在屏幕上呈现数据,以便触发这些事件——这一切都与 WPF 可视化树的一部分有关;当作为服务运行时,它不是。
有很多方法可以尝试解决这个问题,所有这些方法都很复杂,而且可能无法扩展。我建议使用普通的 Windows Media API(来自 Windows Media SDK)来深入了解它。