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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top