2009-07-16 9 views
0

Existe-t-il un moyen d'arrêter une vidéo à un emplacement particulier à l'aide de Windows Media Player SDK? J'utilise C# pour intégrer le lecteur et essayer de voir si l'interface IWMPControls3 a une capacité d'arrêt à un moment donné en termes de position ou de temps. Si cela peut être fait, alors comment le faire?Arrêter la vidéo à une position spécifique à l'aide de Windows Media Player SDK

+1

Pourquoi pas à utiliser pause puis put_currentPosition? –

+1

Supposons que vous mettiez en pause et que vous définissiez la position actuelle et que la vidéo commence à jouer à partir de cette position. Maintenant, comment arrêter la vidéo à un autre endroit? – Arvind

+0

Vous pouvez également lire à partir de la position. Réglez une minuterie pour lire la position, puis arrêtez le joueur lorsqu'il atteint la position qui vous intéresse. –

Répondre

1

Cela peut certainement être fait, même si je ne me souviens plus des techniques. Il existe des moyens d'accéder suffisamment aux données du flux pour reconstruire les images audio et individuelles de la vidéo. Les gens ont des systèmes écrits où l'utilisateur peut taper une heure précise et un numéro de cadre et le lecteur vidéo saute à cet endroit.

Puisque votre question était "est-ce qu'il y a un moyen", la réponse est "Oui". Cependant, je ne me souviens pas assez des détails pour vous dire comment le faire.

0

Comme je l'ai expliqué dans le same question here, vous pouvez utiliser une minuterie pour contrôler la currentPosition:

private Timer tmrWmpPlayerPosition; 
private TimeSpan StopPosition; 

private void btn_Click(object sender, EventArgs e) 
{ 
    wmpPlayer.Ctlcontrols.currentPosition = 4; 
    StopPosition=TimeSpan.Parse("00:20:20"); 
    StopWmpPlayerTimer(); 
    StartWmpPlayerTimer(); 
} 

private void tmrWmpPlayerPosition_Tick(object sender, EventArgs e) 
{ 
    if ((Convert.ToInt32(StopPosition.TotalSeconds) != Convert.ToInt32(wmpPlayer.Ctlcontrols.currentPosition))) return; 
    wmpPlayer.Ctlcontrols.pause(); 
    StopWmpPlayerTimer(); 
} 

private void StartWmpPlayerTimer() 
{ 
    tmrWmpPlayerPosition = new Timer(); 
    tmrWmpPlayerPosition.Tick += new EventHandler(tmrWmpPlayerPosition_Tick); 
    tmrWmpPlayerPosition.Enabled = true; 
    tmrWmpPlayerPosition.Interval = 1000; 
    tmrWmpPlayerPosition.Start(); 
} 

private void StopWmpPlayerTimer() 
{ 
    if (tmrWmpPlayerPosition != null) 
     tmrWmpPlayerPosition.Dispose(); 
    tmrWmpPlayerPosition = null; 
}