2010-11-24 8 views
6

Tengo un problema extraño. Mi aplicación reproduce películas desde posiciones específicas, por lo que incluso una posición mencionada en milisegundos me importa. Estoy asignando una posición a un elemento multimedia, pero muestra el fotograma equivocado. No sé por qué el reproductor multimedia no está jugando desde la posición que estoy dando.Problema de posición del reproductor de medios Silverlight

Aquí hay un código de ejemplo:

TimeSpan oTimeSpan = TimeSpan.FromMilliseconds(16800200); // This shows 04:40:00.2000000 

MediaPlayer.Position = oTimeSpan;  // But after assigning, value is 04:40:00.1990000 

Aquí es una captura de pantalla antes y después de la asignación: alt text

alt text

Alguien puede decirme lo que estoy haciendo mal aquí?

+0

¿Está seguro de que se está mostrando el fotograma equivocado, que hay un fotograma a 200 ms y otro a 199 ms? – AnthonyWJones

+0

en realidad estoy más preocupado de cómo 04: 40: 00.2000000 se convirtió a 04: 40: 00.1990000 ?? – Singleton

+0

Esto también podría deberse al códec particular que se utiliza para la reproducción, solo que es capaz de posicionarse en un inicio de cuadro. En algún trabajo que estoy haciendo, tengo un códec que solo puede posicionarse en un fotograma clave (que en mi caso hace que el posicionamiento esté desactivado hasta en un segundo entero). Lo soluciono haciendo que el resto de mi interfaz reaccione a lo que el jugador dice que soy, incluso después de decirle a dónde quiero ir. – Duane

Respuesta

1

Aunque el intervalo de tiempo expone sus propiedades como ints, sospecho que está usando un valor de coma flotante internamente. Tales problemas se deben a la forma en que se almacenan los valores de coma flotante.

¿Ha intentado con lo que obtiene de TimeSpan.Equals(MediaPlayer.Position, oTimeSpan)? Sospecho que esto indicaría que son iguales.

+0

Se almacena en un Int64 como ticks y se convierte a/desde según sea necesario. – Duane

3

Si bien quizás le preocupen las diferencias de los milisegundos fraccionarios en este caso, debe recordar que el video solo tendrá un fotograma cada ~ 33 milisegundos más o menos (usando NTSC estándar 29.97 FPS). Entonces, a menos que esté haciendo un análisis de nivel forense (en cuyo caso MediaPlayer no es la herramienta correcta), eso es más precisión de la que debería necesitar.

Dado que TimeSpan usa Int64 internamente y, por lo tanto, no debería haber problemas de redondeo, supongo que MediaPlayer se está ajustando al marco de video más cercano disponible.

+0

Esa fue también mi evaluación, la propiedad para el reproductor de video muestra la firma de tiempo para el fotograma actual, no necesariamente será la misma que el lapso de tiempo que pasa, porque puede no haber un inicio de fotograma en ese milisegundo exacto. – EtherDragon

Cuestiones relacionadas