Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/11/2011, 02:45
Avatar de Nemutagk
Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Reproducción de vídeo bajo Streaming

Que tal compañeros, ando peleándome con Android desde hace unos días, estoy intentando reproducir un vídeo (mp4/3gp) desde internet, el problema es que el servidor donde esta alojado es necesario enviar una cookie para tener acceso al vídeo/archivo, por lo tanto, pasar directamente el url del vídeo al videoview no funciona en este caso (a menos que sepan como mandar la info de la cookie por este medio), por lo tanto estaba pensando en descargar primero el archivo y luego reproducirlo, pero me manda error al intentar reproducirlo (MediaPlayer error (1, -2147483648)), aquí dejo el código que tengo...

Código Java:
Ver original
  1. String urlVideo, cookieMU;
  2.     VideoView video;
  3.     MediaController mController;
  4.     SurfaceHolder holder;
  5.    
  6.     @Override
  7.     protected void onCreate(Bundle savedInstanceState) {
  8.         // TODO Auto-generated method stub
  9.         super.onCreate(savedInstanceState);
  10.         setContentView(R.layout.rep);
  11.        
  12.         Bundle extras = getIntent().getExtras();
  13.         urlVideo = extras.getString("urlvideo");
  14.         cookieMU = extras.getString("cookiemu");
  15.        
  16.         video = (VideoView)findViewById(R.id.videoView1);
  17.         Log.d("video","creamos el controlador de video");
  18.         mController = new MediaController(this);
  19.         Log.d("vide","asignamos el video!");
  20.         mController.setAnchorView(video);
  21.        
  22.         Log.d("video","comenzamos a intentar bajar el video");
  23.         downloadVideo();
  24.     }
  25.    
  26.     protected void downloadVideo() {
  27.         if (urlVideo != null) {
  28.             String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";
  29.             InputStream stream = null;
  30.             URLConnection conexion = null;
  31.             try {
  32.                 Log.d("video","preparamos  el url y la conexion");
  33.                 URL videoUrl = new URL(urlVideo);
  34.                 conexion = videoUrl.openConnection();
  35.                 Log.d("video","agregamos la cookie: " + cookieMU);
  36.                 conexion.setRequestProperty("Cookie", cookieMU);
  37.                 conexion.setRequestProperty("http.agent", userAgent);
  38.                 conexion.setRequestProperty("User-Agent", userAgent);
  39.                
  40.                 Log.d("video","Conectamos!!!");
  41.                 conexion.connect();
  42.                 int tamanio = conexion.getContentLength();
  43.                 Log.d("video","la data a recibir es de: " + (tamanio / 1024));
  44.                
  45.                 stream = conexion.getInputStream();
  46.                
  47.                 if (stream == null) {
  48.                     Log.d("video", "Streaming vacio!!!");
  49.                 }
  50.                
  51.                 Log.d("video","creamos el archivo temporal");
  52.                 File tmp = File.createTempFile("tmpVideo", "dat");
  53.                 String tmpPath = tmp.getAbsolutePath();
  54.                
  55.                 FileOutputStream out = new FileOutputStream(tmp);
  56.                 byte buff[] = new byte[1024];
  57.                
  58.                 Log.d("video","comenzamos a recibir data!!!");
  59.                 int recibido = 0;
  60.                 do {
  61.                     int numRead = stream.read(buff);
  62.                     if (numRead <= 0) {
  63.                         break;
  64.                     }
  65.                    
  66.                     out.write(buff,0,numRead);
  67.                    
  68.                     recibido = recibido + numRead;
  69.                     Log.d("video","recibido " + (recibido / 1024) + " de un total " + (tamanio / 1024));
  70.                 } while(true);
  71.                 Log.d("video","asignamos el archivo temporal al reproductor");
  72.                 video.setVideoPath(tmpPath);
  73.                 video.start();
  74.                
  75.                 stream.close();
  76.             } catch (MalformedURLException e) {
  77.                 // TODO Auto-generated catch block
  78.                 e.printStackTrace();
  79.             } catch (IOException e) {
  80.                 // TODO Auto-generated catch block
  81.                 e.printStackTrace();
  82.             } finally {
  83.                
  84.             }
  85.         }else {
  86.             Log.d("video","url del video nulo!!!");
  87.         }
  88.     }

En realidad "funciona" descarga la información y se crea el archivo temporal, pero al asignar el archivo al videoview es cuando "truena" la app

De antemano gracias por la ayuda
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)