2011-10-10 35 views
5

Actualmente estoy desarrollando un reproductor de video para Android. Creé una vista de texto simple que muestra el subtítulo actual.Reproductor nativo de Android con subtítulos

El problema es: El método MediaPlayer getCurrentPosition() solo me da tiempo en segundos. Y necesito ese valor en milisegundos para sincronizar correctamente los subtítulos con la película.

Se supone que getCurrentPosition me da el tiempo en milisegundos, pero da el tiempo en segundos * 1000 (cada número termina en "000").

  1. ¿Conoces una mejor manera de hacerlo?
  2. ¿Cómo obtengo el tiempo en milisegundos?
  3. Generar un evento exactamente en el momento del segundo (000ms) también funcionaría.

¿Alguna sugerencia?

+0

De donde u han aprendido añadiendo subtítulos en video.Can ¿Me compartas el enlace? –

Respuesta

3

Por si alguien necesita, hice mi solución.

Desarrollé el módulo de subtítulos. Para obtener los milisegundos precisos, hice un sincronizador para los temporizadores de sistema y jugador.

Cada 20 segundos de reproducción de vídeo que hacen este procedimiento:

  1. Preguntar al reproductor multimedia de segundos actuales (segundos conseguido s)
  2. Pregunta al reproductor multimedia de segundos actuales hasta que el resultado es s + 1 (S0)
  3. Obtener la hora del sistema (milisegundos) para que el tiempo (M0)

Ahora, si quiero los milisegundos película actual:

  1. Obtener la hora actual del sistema (millisecons) (m1)
  2. película en tiempo real es: s0 + (M1-M0)

fácil, y dio lugar a subtítulos sincronizados;)

+2

es posible compartir el código. Estoy trabajando en un requisito similar. Cualquier ayuda sería apreciada – maxwells

+0

Desafortunadamente el código está protegido por derechos de autor. No me pertenece:/ – inversus

+0

Pero puedes compartir partes de él ... – user1767754

0

1) Analizar el archivo de subtítulos
2) Usar la clase CounterTimer en set to player.getDuration() luego establecer un intervalo de tu elección en el método tick (que se activa al marcar cada intervalo) obtener la posición actual de tu jugador usando player.getCurrentPosition(); (Recuerde que esto le devolverá el tiempo en milisegundos). Recuerde también almacenar y mantener milisegundos a la izquierda.
3) conviértalo en el formato deseado y compárelo con el hashmap de tiempo o la matriz que haya tomado.
4) Actualice su TextView que se superpone en el reproductor con el Texto adecuado.
5) cancele el temporizador para el período de duración y luego (puede implementar un nuevo temporizador con tiempo de duración).
6) Una vez que finalice el temporizador de duración en onFinish() puede iniciar el temporizador de edad con el tiempo millisecondLeft lo guardó en el paso 2.

Eso es todo;)

+0

Tnks para la respuesta. Mi player.getCurrentPosition() devolvió el valor en segundos: 53000ms, 54000ms. Fue imposible usarlo para obtener el ms real. – inversus

Cuestiones relacionadas