Mostre o primeiro quadro de vídeo no WPF MediasElement
-
20-09-2019 - |
Pergunta
Eu tenho uma aplicação WPF com um mediarelement que eu uso para executar um vídeo. Não quero que o vídeo seja automaticamente quando carregado, então eu defino o comportamento carregado como manual.
<MediaElement LoadedBehavior="Manual"
Source="foo.wmv"
MediaOpened="videoElement_MediaOpened" />
No entanto; Quero que o elemento mostre o primeiro quadro do vídeo quando carregado. Existe alguma maneira mágica de fazer isso?
Solução
Você também precisa
ScrubbingEnabled="True"
Em seguida, defina um evento na carga
Loaded="Video1_Loaded"
No método Video1_load Adicione o seguinte:
Video1.Play();
Video1.Pause();
Nenhum conteúdo de vídeo é renderizado antes que o método de reprodução seja chamado. Portanto, mesmo se você definir a posição após o primeiro quadro, não receberá nenhum dado renderizado.
Eu acho que o MediaLement.ScrubbingEnabled A propriedade é a chave.
Obtém ou define um valor que indica se o mediarelement atualizará os quadros para operações de busca durante a pausa. Esta é uma propriedade de dependência.
Eu tentei a mesma abordagem sem limpar a NECENDABLED, mas descobri que o primeiro quadro não renderizaria. Não tenho certeza se é apenas o hardware que estou usando para isso. O outro item a ser Rember é que a maneira como o mediarelement funciona, depois de ligar para o play (), você pode realmente não fazer paus Pausa.
Outras dicas
Você não precisa criar um evento, veja seguintes
<MediaElement Source="foo.wmv"
MediaOpened="videoElement_MediaOpened"
LoadedBehavior="Pause" ScrubbingEnabled="True" />
Não posso comentar, então aqui está minha resposta: Labar se refere à atualização da imagem renderizada quando o mediarelement é pausado.
//Todo: Set your source
//if not stated in the xmal, you can still set this here.
Player.LoadedBehavior = MediaState.Manual;
//Turn scrubbing on
Player.ScrubbingEnabled = true;
Player.Pause();
Player.Position = TimeSpan.FromTicks(1);
Obrigado pela ponta da lavagem!