Pergunta

Eu estou tentando criar um serviço WCF que aproveita a WPF MediaPlayer no servidor para gerar miniaturas de um vídeo que um usuário fizer uploads. Eu encontrei um monte oif informações sobre como tornar um quadro e salve-o em um arquivo. Mas o problema é o evento chave MediaOpened (na verdade nenhum dos eventos) eu preciso amarrar em não -. EDIT fogo

Alguém sabe se os eventos WPF MediaPlayer não incêndios, se ion usada no contexto de um serviço WCF?

graças Michael

Foi útil?

Solução

Eu decidi tentar e usar o Expression Media Encoder 2 SDK e funcionou muito bem.

Muito pouco código para gerar miniaturas de um vídeo - aqui é um trecho

public void GenerateThumbnails(string fileName, int numberOfThumbnails)

{ Fila _positionsToThumbnail = nova fila (); Microsoft.Expression.Encoder.MediaItem vídeo = 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);
}

}

Outras dicas

Você provavelmente precisará processar os dados na tela, para esses eventos para ser demitido - é tudo amarrado para fazer parte da árvore visual WPF; que quando executado como um serviço que não é.

Há muitas maneiras que você poderia tentar resolver este, todos os quais são complicadas, e provavelmente não vão escala. Eu sugiro usar o normal, de API windows media (a partir do Windows Media SDK) para chegar ao fundo da questão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top