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 VideoView video;
MediaController mController;
SurfaceHolder holder;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.rep);
Bundle extras = getIntent().getExtras();
urlVideo = extras.getString("urlvideo");
cookieMU = extras.getString("cookiemu");
video = (VideoView)findViewById(R.id.videoView1);
Log.d("video","creamos el controlador de video");
mController = new MediaController(this);
Log.d("vide","asignamos el video!");
mController.setAnchorView(video);
Log.d("video","comenzamos a intentar bajar el video");
downloadVideo();
}
protected void downloadVideo() {
if (urlVideo != null) {
String userAgent
= "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)"; try {
Log.d("video","preparamos el url y la conexion");
URL videoUrl
= new URL(urlVideo
); conexion = videoUrl.openConnection();
Log.d("video","agregamos la cookie: " + cookieMU);
conexion.setRequestProperty("Cookie", cookieMU);
conexion.setRequestProperty("http.agent", userAgent);
conexion.setRequestProperty("User-Agent", userAgent);
Log.d("video","Conectamos!!!");
conexion.connect();
int tamanio = conexion.getContentLength();
Log.d("video","la data a recibir es de: " + (tamanio / 1024));
stream = conexion.getInputStream();
if (stream == null) {
Log.d("video", "Streaming vacio!!!");
}
Log.d("video","creamos el archivo temporal");
File tmp
= File.
createTempFile("tmpVideo",
"dat"); String tmpPath
= tmp.
getAbsolutePath();
byte buff[] = new byte[1024];
Log.d("video","comenzamos a recibir data!!!");
int recibido = 0;
do {
int numRead = stream.read(buff);
if (numRead <= 0) {
break;
}
out.write(buff,0,numRead);
recibido = recibido + numRead;
Log.d("video","recibido " + (recibido / 1024) + " de un total " + (tamanio / 1024));
} while(true);
Log.d("video","asignamos el archivo temporal al reproductor");
video.setVideoPath(tmpPath);
video.start();
stream.close();
// TODO Auto-generated catch block
e.printStackTrace();
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
}
}else {
Log.d("video","url del video nulo!!!");
}
}
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