Служба WCF для создания миниатюр видео
-
22-07-2019 - |
Вопрос
Я пытаюсь создать службу WCF, которая использует WPF MediaPlayer на сервере для создания миниатюр для видео, загружаемого пользователем.Я нашел много информации о том, как визуализировать кадр и сохранить его в файл.Но проблема в том, что ключевое событие MediaOpened (на самом деле ни одно из событий) мне нужно связать с не делает - РЕДАКТИРОВАТЬ огонь.
Кто-нибудь знает, не запускаются ли события WPF MediaPlayer, если они используются в контексте службы WCF?
Спасибо Майкл
Решение
Я решил попробовать использовать Expression Media Encoder 2 SDK, и он отлично сработал.
Очень мало кода для создания миниатюр из видео — вот фрагмент
public void GenerateThumbnails(string fileName, int numberOfThumbnails)
{Queue _positionstothumbnail = new queue ();Microsoft.Expression.Encoder.MediaItem video = новый 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;а при работе в качестве службы это не так.
Есть много способов решить эту проблему, но все они запутаны и, скорее всего, не будут масштабироваться.Я предлагаю использовать обычные API-интерфейсы Windows Media (из Windows Media SDK), чтобы разобраться в сути проблемы.