Servizio WCF per creare miniature video
-
22-07-2019 - |
Domanda
Sto provando a creare un servizio WCF che sfrutta WPF MediaPlayer sul server per generare miniature per un video che un utente carica. Ho trovato molte informazioni su come rendere un frame e salvarlo in un file. Ma il problema è l'evento chiave MediaOpened (in realtà nessuno degli eventi) che devo collegare in non - EDIT fire.
Qualcuno sa se gli eventi WPF MediaPlayer non si attivano se utilizzati nel contesto di un servizio WCF?
grazie Michael
Soluzione
Ho deciso di provare a utilizzare Expression Media Encoder 2 SDK e ha funzionato alla grande.
Pochissimo codice per generare miniature da un video - ecco uno snippet
public void GenerateThumbnails(string fileName, int numberOfThumbnails)
{ Queue _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);
}
}
Altri suggerimenti
Probabilmente dovrai renderizzare i dati sullo schermo, affinché quegli eventi vengano generati - è tutto legato all'essere parte dell'albero visivo di WPF; che quando viene eseguito come servizio non lo è.
Ci sono molti modi in cui potresti provare a risolvere questo problema, tutti contorti e che probabilmente non si ridimensioneranno. Suggerisco di utilizzare le normali API di Windows Media (dall'SDK di Windows Media) per arrivare alla fine.