Pregunta

Estoy intentando crear un servicio WCF que aproveche el WPF MediaPlayer en el servidor para generar miniaturas para un video que sube un usuario. Encontré mucha información sobre cómo representar un marco y guardarlo en un archivo. Pero el problema es el evento clave MediaOpened (en realidad ninguno de los eventos) que necesito vincular a no - EDITAR fuego.

¿Alguien sabe si los eventos WPF MediaPlayer no se disparan si se usan en el contexto de un servicio WCF?

gracias Michael

¿Fue útil?

Solución

Decidí probar y usar el SDK de Expression Media Encoder 2 y funcionó muy bien.

Muy poco código para generar miniaturas de un video: aquí hay un fragmento

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);
}

}

Otros consejos

Es probable que necesite representar los datos en la pantalla para que se activen esos eventos; todo está relacionado con ser parte del árbol visual de WPF; que cuando se ejecuta como un servicio no lo es.

Hay muchas formas en que podría intentar resolver esto, todas las cuales son complicadas y probablemente no se escalarán. Sugiero usar las API normales de Windows Media (desde el SDK de Windows Media) para llegar al fondo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top