2010-07-08 26 views
3

J'essaie de créer un lecteur multimédia personnalisé dans Silverlight. Je travaille sur la barre de progression. Je veux que la barre de progression affiche la progression actuelle du téléchargement ainsi que la position actuelle du MediaElement en cours de lecture. Pour ce faire, j'ai une barre de progression pour afficher la progression du téléchargement et un curseur superposé pour afficher la position actuelle.Progrès Silverlight MediaElement

Je mis la valeur pour les deux en pourcentage sur 100.

Par exemple:

ProgressBar.Value = MediaElement.DownloadProgress; 
Slider.Value = (MediaElement.Position.TotalMilliseconds)/(MediaElement.NaturalDuration.TimeSpan.TotalMilliseconds); 

Le problème est le Slider.Value devient plus grand que le ProgressBar.Value. Comment est-ce possible? Comment puis-je lire la vidéo à une position plus éloignée que celle qui a été téléchargée?

Des conseils sur la façon de synchroniser correctement ces éléments?

Merci.

Répondre

4

Il est possible que les algorithmes de compression de flux vidéo n'aboutissent pas à un nombre d'octets proportionnel au temps. Prenez par exemple un fichier vidéo de 300 Mo qui s'exécute pendant 60 minutes par exemple, il ne s'ensuit pas automatiquement que 30 minutes dans le fichier serait le point de 150 Mo.

Si la première partie de la vidéo est relativement "silencieuse", il est probable qu'elle se compresse bien, tandis que les sections plus actives risquent de ne pas se compresser aussi bien. En conséquence, il est possible d'avoir téléchargé seulement un petit pourcentage de la taille du fichier et pourtant avoir joué un plus grand pourcentage de son temps de jeu global.

Modifier:

Alors, comment puis-je les obtenir de synchroniser?

Vous le fudgez en limitant le curseur au minimum de la progression du téléchargement ou de l'heure.

Slider.Value = Math.Min(mediaelement.Position.TotalMilliseconds/mediaelement.NaturalDuration.TimeSpan.TotalMilliseconds, mediaelement.downloadprogress); 
+0

Wow. Cela prend tout son sens quand on y pense comme ça. Le début de la vidéo est à peu près tout en noir, donc cela ne prendrait pas beaucoup de temps pour télécharger. Alors, comment puis-je les synchroniser? – Hunter

+0

@Hunter: Voir mes modifications – AnthonyWJones