![]() |
|
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
«
Tema Anterior
|
Siguiente tema
»
|
|
Herramientas |
|
#1
|
||||
|
||||
|
Controlar video
Hola a todos, vengo con otra duda.
Me gustaría saber si se puede seleccionar un fragmento de vídeo para que se reproduzca, es decir, yo quiero que de un vídeo que tengo reproducir unos 20 segundos en una determinada posición y me gustaría que al darle a un botón se abriera un reproductor que iniciara el vídeo donde empezaran esos 20 segundos y que al pasar los 20 segundos se parase y volviese a la pantalla anterior. Se como reproducir un vídeo y también creo saber como hacer que empiece desde el momento que yo quiero pero no se como hacer que se pare en un sitio concreto que no sea el final de vídeo. Espero respuestas. |
|
|
|
#2
|
||||
|
||||
|
Supongo que usas el MediaPlayer, ¿no? Con el método seek lo pones para que empiece a los 20 segundos, que es lo que harás seguramente. Luego tienes que ir comprobando (cada segundo por ejemplo) el getCurrentPosition() del media player que te dice por dónde va. Si ha llegado donde quieres lo paras o haces lo que necesites.
P.D: La comprobación periódica la puedes hacer con un Runnable que haga la comprobación y si no se cumple se programe para otra ejecución dentro de un segundo. Para evitar andar con hilos innecesariamente, puedes hacerlo con un Handler o con el método postDelayed de la vista que tengas a mano. Última edición por mocelet Día 14/04/16 a las 09:44:45 |
|
#3
|
||||
|
||||
|
Cita:
Código:
public class ReproducirVideo extends Activity {
@override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reproducir_video);
VideoView videoView = (VideoView) findViewById(R.id.videoView1);
Uri path = Uri.parse(Controlador.getInstance().getActual().getURL());
MediaController mc = new MediaController(this);
videoView.setMediaController(mc);
videoView.setVideoURI(path);
videoView.start();
}
@override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.reproducir_video, menu);
return true;
}
@override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
pd: En el emulador al reproducir un video solo escucho el sonido y no se ve el video, sabeis por que puede ser? Última edición por lionheart23 Día 14/04/16 a las 10:15:01 |
|
#4
|
||||
|
||||
|
Te doy las pautas, no esperes copiarlo y que funcione, es solo un esqueleto escrito al vuelo.
Siendo un VideoView, para que empiece en los 20 segundos por ejemplo tienes que llamar al videoView.seekTo(20000). Aunque supongo que te dará error si llamas al método antes de que el vídeo esté preparado para la reproducción (ahí tendrás que usar el OnPreparedListener del videoView) Para la comprobación, algo así: [PHP] boolean cancelFlag = false; final Runnable r = new Runnable(){ public void run(){ if (cancelFlag){ // Por si quieres cancelar la comprobación periódica return; } if (videoView.getCurrentPosition() > 40000){ // Ya hemos llegado al segundo 40 (20 de inicio y 20 de duración que querías) videoView.stopPlayback(); }else{ // Todavía no, programar siguiente comprobación en un segundo videoView.postDelayed(this, 1000); } } } [/PHP] En algún momento después de iniciar la reproducción del vídeo llamas a esto para iniciar las comprobaciones periódicas: videoView.post(r); |
| Gracias de parte de: | ||
|
#5
|
||||
|
||||
|
Cita:
|
|
#6
|
||||
|
||||
|
No uses el emulador para temas de vídeo porque no está preparado para ello, igual los que vienen con Android Studio 2.0 sí, pero vamos, eso mejor probarlo en un dispositivo fisico que tiene los códecs, hardware, etc.
|
|
#7
|
||||
|
||||
|
Cita:
Me pusiste que debía ponerlo después de iniciarlo pero al ponerlo tanto después del start como antes no funciona, es decir, el vídeo si empieza en el segundo 20 pero en el 40 no termina. Dejo el código por si es que estoy cometiendo algun error tonto: Código:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reproducir_video);
final VideoView videoView = (VideoView) findViewById(R.id.videoView1);
Uri path = Uri.parse(Controlador.getInstance().getActual().getURL());
MediaController mc = new MediaController(this);
videoView.setMediaController(mc);
videoView.setVideoURI(path);
videoView.seekTo(24000);
videoView.start();
Log.d("VideoView", "Previa reproduccion");
Runnable r = new Runnable(){
public void run(){
if (videoView.getCurrentPosition() > 40000){
// Ya hemos llegado al segundo 40 (20 de inicio y 20 de duración que querías)
Log.d("VideoView", "Legamos al seg 40");
videoView.stopPlayback();
}else{
// Todavía no, programar siguiente comprobación en un segundo
Log.d("VideoView", "Estamos en antes del 40");
videoView.postDelayed(this, 1000);
}
}
};
videoView.post(r);
}
|
|
#8
|
||||
|
||||
|
¿El runnable se llega a ejecutar? Debería salirte alguna de esas trazas que has puesto
Si no igual es mejor hacerlo con un Handler, que es casi igual, sólo que tienes que crear un Handler handler = new Handler () y hacer los post al handler en vez de al videoView (tanto el delayed como el post inicial para que arranque) |
|
#9
|
||||
|
||||
|
No se ejecuta por que no sale ningún log, probare con eso que dices.
Existe alguna manera de poder cortar el vídeo y hacer trozos es decir, crear un nuevo vídeo que sea un trozo del original(lo k viene siendo que de un vídeo poder crear otro mas pequeño k se pueda manejar) directamente desde el código? |
|
#10
|
||||
|
||||
|
Cita:
1) Son lentas, va a tardar en comprimirlo mucho más que en reproducirlo. 2) La mayoría requieren NDK, o en el mejor de los casos, depender de código NDK. Por lo tanto es posible que en algunos dispositivos no funcione, sobre todo los Intel. 3) Suelen pesar un huevo, puede incrementar en tamaño de tu app en 10 MB o más. No estoy muy al día de las librerías actualmente, lo que te he dicho es de hace un par de años, lo mismo ahora hay algunas que con el punto 2 y 3 no sean tan salvajes. El punto 1 no te lo va a quitar nadie. |
|
#11
|
||||
|
||||
|
Cita:
|
| Respuesta |
Estás aquí
|
||||||
|
||||||
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 14:39:02 (GMT +1)
HTCMania: líderes desde el 2007






