android - soportado - Función VideoView seekto() extremadamente inconsistente
Estoy tratando de buscar una ubicación en particular en un video en Android y estoy completamente atascado debido a las inconsistencias que muestra en su comportamiento. Aquí hay una lista de cosas que he hecho
- ¡VideoView.Seekto va a 5:19 para un video, 5:17 para un video y 5:32 para otro por los mismos milisegundos (326000 ms)!
- Dado que VideoView no admite onSeekListener, modifiqué la fuente VideoView y le agregué soporte. Sin embargo, no se detiene y comienza a buscar desde donde lo quiero, ¡siempre hay un retraso! El onSeekListener se llama inmediatamente unos 6 s antes de donde quiero que se detenga. En muchos casos, la barra de búsqueda muestra el momento adecuado y, de repente, retrocede unos segundos, aunque estoy llamando a video.start desde onSeekCompleteListener
¿Por qué es esto tan inconsistente? ¿Hay una forma definitiva de buscar a dónde quieres ir en milisegundos en videoview? Sé que debería usar MediaPLayer + Surface, pero como VideoView es solo una envoltura de los dos, lo estoy modificando en la fuente pero sin éxito.
Soy consciente de esto: http://code.google.com/p/android/issues/detail?id=9135 Pero hay alguna forma de evitar esto y tener una forma definitiva de
1.) Buscando la hora exacta en milisegundos.
2.) ¿Pausa y reanudación a la hora exacta?
Sé que esta no es la solución adecuada para su pregunta, pero eche un vistazo a esta biblioteca que se está realizando a través de la vista de video predeterminada de Google
https://github.com/brianwernick/ExoMedia
Tiene toda la funcionalidad y más que está soportada por la vista de video predeterminada.
Puede usar esta vista de video y emVideoView.seekTo(1000);
Para saltar a 1000 milisegundos en el video. También puede tener setOnSeekCompletionListener
para realizar el proceso cuando se complete la búsqueda.
Tienes que esperar a que la búsqueda se complete.
VideoView no tiene un OnSeekCompleteListener () pero puede acceder al MediaPlayer desde el método onPrepared del VideoView y luego configurar el OnSeekCompleteListener, de esta manera:
videoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setOnSeekCompleteListener(new OnSeekCompleteListener() {
@Override
public void onSeekComplete(MediaPlayer mp) {
//Seek completed. Move seekbar
}
});
}
});