Reproducción de vídeo desde el servidor http en android
Tengo una lista de vista en la que estoy cargando todos los videos de la carpeta particular del servidor. Ahora lo que estoy tratando de hacer es haciendo clic en un elemento de lista que debe reproducir ese video en la vista de vídeo. Todo parece funcionar perfecto, pero sólo el problema que estoy enfrentando es cuando hago clic en el elemento de vista de lista que no está reproduciendo ese video.
PD. Estoy recibiendo después de iniciar sesión en el registro de errores, pero mi aplicación no se detiene por desgracia, mi pantalla es seguir mostrándome que el video está cargando en la barra de progreso que establecí en Asynctask, pero cuando me registré log cat vi este error.
- VideoView no se procesa correctamente después de desaparecer el teclado de Dialog
- Webview de Android: vídeo en el área de pantalla personalizada como una superposición para el streaming de vídeo en vivo de rtsp
- Android VideoView No se puede reproducir el error de vídeo especialmente .mp4
- El video no se detiene en el fragmento ViewPager
- VideoView y Progressive descargar
Por supuesto que he buscado en google, así como SO, pero no obtuvo resultado satisfactorio.
Folowwing es mi mensaje del gato del registro.
02-21 11:08:52.964: W/SurfaceFlinger(101): nothing to do with mask 0x00000000 02-21 11:08:52.974: W/System.err(1992): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 02-21 11:08:52.976: W/System.err(1992): at android.os.Handler.<init>(Handler.java:121) 02-21 11:08:52.976: W/System.err(1992): at android.widget.MediaController$3.<init>(MediaController.java:474) 02-21 11:08:52.977: W/System.err(1992): at android.widget.MediaController.<init>(MediaController.java:474) 02-21 11:08:52.978: W/System.err(1992): at android.widget.MediaController.<init>(MediaController.java:210) 02-21 11:08:52.978: W/System.err(1992): at iqual.fidol_final.ServerFileList.playVideo(ServerFileList.java:225) 02-21 11:08:52.979: W/System.err(1992): at iqual.fidol_final.ServerFileList.access$3(ServerFileList.java:221) 02-21 11:08:52.979: W/System.err(1992): at iqual.fidol_final.ServerFileList$PlayVideo$1.run(ServerFileList.java:181) 02-21 11:08:52.979: W/System.err(1992): at java.lang.Thread.run(Thread.java:856)
Y el siguiente es mi código.
mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String url1 = null; Object o1 = myList.get(position); url1 = o1.toString().replace(" ", "%20").trim(); playVideo = (PlayVideo) new PlayVideo(url1).execute(); } });
Y este es mi Asynctask para reproducir video
class PlayVideo extends AsyncTask<String, Void, Boolean> { String baseURL; public PlayVideo(String baseURL) { this.baseURL = baseURL; } @Override protected void onPreExecute() { super.onPreExecute(); pDialog = ProgressDialog.show(ServerFileList.this, " Buffering...", "please wait..", false); pDialog.setCancelable(false); } @Override protected Boolean doInBackground(String... urls) { Thread thread = new Thread(new Runnable() { @Override public void run() { try { playVideo(baseURL); } catch (Exception e) { e.printStackTrace(); } } }); thread.start(); return true; } @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); } }
Y el siguiente es mi método playVideo.
private void playVideo(String baseURL) { Uri myUri = Uri.parse(baseURL); MediaController mc; mc = new MediaController(this); mVideoView.setMediaController(mc); mVideoView.setVideoURI(myUri); System.out.println("====Myuri=====" + myUri); mVideoView.requestFocus(); mVideoView.start(); }
También intenté crear el nuevo hilo en método del doInbackground y quitando el hilo también, pero estos trucos no trabajaron para mí.
También una cosa que muestra error en la línea 225 que es mc = new MediaController(this);
- Streaming de vídeos de Youtube
- Dibujar superposición (HUD) en Android VideoView?
- Fragmento retenido no retenido
- Cómo hacer que una videoview NO se inicie automáticamente después de preparado
- VideoView onResume pierde la parte del video almacenada en búfer
- Android 3.1 / Galaxy Tab / VideoView no se reproducirá
- VideoView se convierte en pantalla negra
- Android: carga el video desde la carpeta privada de la aplicación
Puedes quitar tu AsyncTask y reproducir tu video directamente usando el siguiente código,
String url1 = null; Object o1 = myList.get(position); url1 = o1.toString().replace(" ", "%20").trim(); playVideo(url1);
U puede reproducir vídeo en VideoView Intente esto con Asynctask
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.playvideo); VideoView v=(VideoView)findViewById(R.id.videoview); new BackgroundAsyncTask().execute("Video Url"); } public class BackgroundAsyncTask extends AsyncTask<String, Uri, Void> { Integer track = 0; ProgressDialog dialog; protected void onPreExecute() { dialog = new ProgressDialog(PlayVideo.this); dialog.setMessage("Loading, Please Wait..."); dialog.setCancelable(true); dialog.show(); } protected void onProgressUpdate(final Uri... uri) { try { media = new MediaController(PlayVideo.this); v.setMediaController(media); media.setPrevNextListeners(new View.OnClickListener() { @Override public void onClick(View v) { // next button clicked } }, new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); media.show(10000); v.setVideoURI(uri[0]); v.requestFocus(); v.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer arg0) { v.start(); dialog.dismiss(); } }); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected Void doInBackground(String... params) { try { Uri uri = Uri.parse(params[0]); publishProgress(uri); } catch (Exception e) { e.printStackTrace(); } return null; }
- ADB repentinamente no detecta mi dispositivo
- AVD Manager en Android Studio 1.5.1 e instalar en un emulador de ubicación personalizado no se ejecutará