Commit 13c43e11eeab434e5677189fa6664cd494d2f43c

Authored by Imanol-Mikel Barba Sabariego
1 parent 29086b71

Reproductor funcionando 100%

src/com/upc/pbe/upcnews/BandwidthMeasurer.java
1 package com.upc.pbe.upcnews; 1 package com.upc.pbe.upcnews;
2 2
3 import android.net.TrafficStats; 3 import android.net.TrafficStats;
  4 +import android.util.Log;
4 5
5 //Mesura la velocitat (Bandwidth) d'Internet 6 //Mesura la velocitat (Bandwidth) d'Internet
6 public class BandwidthMeasurer 7 public class BandwidthMeasurer
7 { 8 {
8 - public double Measure(long rxBytes, long Time){ 9 + private final static String TAG = "Measurer";
  10 + public double Measure(long rxBytes, long Time)
  11 + {
9 long AfterTime = System.currentTimeMillis(); 12 long AfterTime = System.currentTimeMillis();
10 double bps; 13 double bps;
11 long TotalRxAfterTest = TrafficStats.getTotalRxBytes(); 14 long TotalRxAfterTest = TrafficStats.getTotalRxBytes();
12 double TimeDifference = AfterTime - Time; 15 double TimeDifference = AfterTime - Time;
13 double rxDiff = TotalRxAfterTest - rxBytes; 16 double rxDiff = TotalRxAfterTest - rxBytes;
14 - 17 + Log.d(TAG,"Time difference = " + TimeDifference/1000);
  18 + Log.d(TAG, "Bytes difference = " + rxDiff);
15 if(rxDiff != 0){ 19 if(rxDiff != 0){
16 bps = ((rxDiff*8) / (TimeDifference/1000)); // total rx bits per second. 20 bps = ((rxDiff*8) / (TimeDifference/1000)); // total rx bits per second.
17 } 21 }
src/com/upc/pbe/upcnews/Descarrega.java
@@ -7,7 +7,6 @@ import java.io.IOException; @@ -7,7 +7,6 @@ import java.io.IOException;
7 import java.io.InputStream; 7 import java.io.InputStream;
8 import java.io.InputStreamReader; 8 import java.io.InputStreamReader;
9 import java.io.OutputStream; 9 import java.io.OutputStream;
10 -import java.net.MalformedURLException;  
11 import java.net.URL; 10 import java.net.URL;
12 import java.net.URLConnection; 11 import java.net.URLConnection;
13 12
@@ -15,72 +14,60 @@ import android.os.AsyncTask; @@ -15,72 +14,60 @@ import android.os.AsyncTask;
15 import android.util.Log; 14 import android.util.Log;
16 15
17 //Descarrega un arxiu i el guarda o retorna en String 16 //Descarrega un arxiu i el guarda o retorna en String
18 -public class Descarrega extends AsyncTask<Object, Object, Object> {  
19 - 17 +public class Descarrega extends AsyncTask<Object, Object, Object>
  18 +{
  19 +
20 final static String TAG = "Descarrega"; 20 final static String TAG = "Descarrega";
21 - private String url, carpeta, nomarxiu, html;  
22 - private File arxiu; 21 + private String html;
23 22
24 - public Descarrega() {  
25 - nomarxiu = "ejemplo.xml";  
26 - carpeta = "Environment.getExternalStorageDirectory.getPath()";  
27 - this.carpeta = null;  
28 - this.html = "";  
29 - this.arxiu = null; 23 + public Descarrega()
  24 + {
  25 + html = "";
30 } 26 }
31 27
32 - public void descarregarguardar(String u, String nom, String car) {  
33 - //Descarrega un arxiu i el guarda  
34 - this.nomarxiu = nom;  
35 - this.carpeta = car;  
36 - this.url = u;  
37 - //Creem el directori  
38 - File dir = new File(carpeta);  
39 - if (!dir.exists()) {  
40 - if (!dir.mkdir()) {  
41 - return; // No s'ha pogut crear (ja existeix)  
42 - }  
43 - }  
44 - //Creem l'arxiu  
45 - arxiu = new File(carpeta + nomarxiu);  
46 - //Iniciem la descarrega  
47 - try {  
48 - URLConnection conn = new URL(url).openConnection();  
49 - conn.connect();  
50 - Log.d(TAG, "\nDescarregant: \n");  
51 - Log.d(TAG, " >> URL: " + url + " >> Nom: " + nomarxiu  
52 - + " >> Tamany: " + conn.getContentLength() + " bytes");  
53 - //Llegeix cada byte i l'escriu en un arxiu fins que arriba a -1  
54 - InputStream in = conn.getInputStream();  
55 - OutputStream out = new FileOutputStream(arxiu);  
56 - int b = 0;  
57 - while (b != -1) {  
58 - b = in.read();  
59 - if (b != -1) {  
60 - out.write(b);  
61 - } 28 + public long descarregarguardar(String url, String path) throws IOException
  29 + {
  30 + // Descarrega un arxiu i el guarda
  31 + // Creem l'arxiu
  32 + File file = new File(path + url.substring(url.lastIndexOf("/")+1, url.length()));
  33 + // Iniciem la descarrega
  34 +
  35 + URLConnection conn = new URL(url).openConnection();
  36 + conn.connect();
  37 + Log.d(TAG, "\nDescarregant: \n");
  38 + Log.d(TAG, " >> URL: " + url + " >> Desti: " + path + " >> Tamany: "
  39 + + conn.getContentLength() + " bytes");
  40 + // Llegeix cada byte i l'escriu en un arxiu fins que arriba a -1
  41 + InputStream in = conn.getInputStream();
  42 + OutputStream out = new FileOutputStream(file);
  43 + int b = 0;
  44 + while (b != -1)
  45 + {
  46 + b = in.read();
  47 + if (b != -1)
  48 + {
  49 + out.write(b);
62 } 50 }
63 - out.close();  
64 - in.close();  
65 - } catch (MalformedURLException e) {  
66 - e.printStackTrace();  
67 - } catch (IOException e) {  
68 - e.printStackTrace();  
69 } 51 }
  52 + out.close();
  53 + in.close();
  54 + return conn.getContentLength();
70 } 55 }
71 56
72 - protected String doInBackground(String u) throws IOException {  
73 - //Descarrega un arxiu i el retorna en un String  
74 - this.url = u; 57 + protected String doInBackground(String url) throws IOException
  58 + {
  59 + // Descarrega un arxiu i el retorna en un String
75 html = ""; 60 html = "";
76 - //Iniciem la connexió i creem els Streams 61 + // Iniciem la connexi� i creem els Streams
77 URLConnection conn = new URL(url).openConnection(); 62 URLConnection conn = new URL(url).openConnection();
78 BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 63 BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
79 - //Iniciem la descarrega i anem guardant al String 64 + // Iniciem la descarrega i anem guardant al String
80 Log.d(TAG, "\nDescarregant: \n"); 65 Log.d(TAG, "\nDescarregant: \n");
81 - Log.d(TAG, ">> URL: " + url + " >> Tamany: " + conn.getContentLength()+ " bytes"); 66 + Log.d(TAG, ">> URL: " + url + " >> Tamany: " + conn.getContentLength()
  67 + + " bytes");
82 String inputLine; 68 String inputLine;
83 - while ((inputLine = in.readLine()) != null) { 69 + while ((inputLine = in.readLine()) != null)
  70 + {
84 html = html + "\n" + inputLine; 71 html = html + "\n" + inputLine;
85 } 72 }
86 Log.d(TAG, "Descarrega finalitzada"); 73 Log.d(TAG, "Descarrega finalitzada");
@@ -89,8 +76,9 @@ public class Descarrega extends AsyncTask&lt;Object, Object, Object&gt; { @@ -89,8 +76,9 @@ public class Descarrega extends AsyncTask&lt;Object, Object, Object&gt; {
89 } 76 }
90 77
91 @Override 78 @Override
92 - protected Object doInBackground(Object... arg0) {  
93 - //Metode Overrided, no te utilitat 79 + protected Object doInBackground(Object... arg0)
  80 + {
  81 + // Metode Overrided, no te utilitat
94 return null; 82 return null;
95 } 83 }
96 } 84 }
src/com/upc/pbe/upcnews/HLS.java
1 package com.upc.pbe.upcnews; 1 package com.upc.pbe.upcnews;
2 2
3 -  
4 import java.io.File; 3 import java.io.File;
  4 +import java.io.IOException;
5 import java.util.ArrayList; 5 import java.util.ArrayList;
  6 +
  7 +import android.net.TrafficStats;
6 import android.util.Log; 8 import android.util.Log;
7 9
8 //Gestor del protocol HTTP Live Streaming 10 //Gestor del protocol HTTP Live Streaming
9 -public class HLS 11 +public class HLS
10 { 12 {
11 private static final String TAG = "HLS"; 13 private static final String TAG = "HLS";
12 private ArrayList<ParentList> videos; 14 private ArrayList<ParentList> videos;
13 private ArrayList<Segment> segments; 15 private ArrayList<Segment> segments;
14 private ArrayList<Video> qualities; 16 private ArrayList<Video> qualities;
15 - private int currentVideo ;  
16 - private int currentQuality; //0 es la mas alta 17 + private int currentVideo;
  18 + private int currentQuality; // 0 es la mas alta
17 private int currentSegment; 19 private int currentSegment;
18 private boolean endReached; 20 private boolean endReached;
19 private String localFolder; 21 private String localFolder;
20 - //private FileDownloader fd; 22 + private Descarrega d;
21 private BandwidthMeasurer bm; 23 private BandwidthMeasurer bm;
22 - 24 +
23 public HLS(ArrayList<ParentList> parsed, String localFolder) 25 public HLS(ArrayList<ParentList> parsed, String localFolder)
24 { 26 {
25 /* 27 /*
@@ -27,10 +29,10 @@ public class HLS @@ -27,10 +29,10 @@ public class HLS
27 */ 29 */
28 File dir = new File(localFolder); 30 File dir = new File(localFolder);
29 String[] files = dir.list(); 31 String[] files = dir.list();
30 - for(int i = 0; i < files.length; i++) 32 + for (int i = 0; i < files.length; i++)
31 { 33 {
32 - File deleteme = new File(dir,files[i]);  
33 - Log.d(TAG,"Deleted " + files[i].toString()); 34 + File deleteme = new File(dir, files[i]);
  35 + Log.d(TAG, "Deleted " + files[i].toString());
34 deleteme.delete(); 36 deleteme.delete();
35 } 37 }
36 currentVideo = currentQuality = currentSegment = 0; 38 currentVideo = currentQuality = currentSegment = 0;
@@ -38,31 +40,21 @@ public class HLS @@ -38,31 +40,21 @@ public class HLS
38 endReached = false; 40 endReached = false;
39 this.localFolder = localFolder; 41 this.localFolder = localFolder;
40 bm = new BandwidthMeasurer(); 42 bm = new BandwidthMeasurer();
41 - //fd = new FileDownloader(); 43 + d = new Descarrega();
42 } 44 }
43 - 45 +
44 public void loadVideo() 46 public void loadVideo()
45 { 47 {
46 qualities = videos.get(currentVideo++).getLists(); 48 qualities = videos.get(currentVideo++).getLists();
47 segments = qualities.get(currentQuality).getSegments(); 49 segments = qualities.get(currentQuality).getSegments();
48 - if(currentVideo == videos.size()) 50 + if (currentVideo == videos.size())
49 { 51 {
50 endReached = true; 52 endReached = true;
51 } 53 }
52 } 54 }
53 -  
54 - public String next() 55 +
  56 + public String next() throws IOException
55 { 57 {
56 - Segment seg = segments.get(currentSegment++);  
57 - Log.d(TAG, seg.getName() + " " + seg.getURL());  
58 - long startTime = System.currentTimeMillis();  
59 - //long segmentBytes = fd.Download(seg.getURL(),localFolder);  
60 - long segmentBytes = 0;  
61 - double bps = bm.Measure(segmentBytes,startTime);  
62 - if((bps < qualities.get(currentQuality).getQuality()) && (bps != -1))  
63 - {  
64 - currentQuality++;  
65 - }  
66 if(currentSegment == segments.size()) 58 if(currentSegment == segments.size())
67 { 59 {
68 if(endReached) 60 if(endReached)
@@ -71,7 +63,17 @@ public class HLS @@ -71,7 +63,17 @@ public class HLS
71 } 63 }
72 loadVideo(); 64 loadVideo();
73 } 65 }
74 - 66 + Segment seg = segments.get(currentSegment++);
  67 + Log.d(TAG, seg.getName() + " " + seg.getURL());
  68 + long startTime = System.currentTimeMillis();
  69 + long segmentBytes = TrafficStats.getTotalRxBytes();
  70 + d.descarregarguardar(seg.getURL(),localFolder);
  71 + double bps = bm.Measure(segmentBytes,startTime);
  72 + Log.d(TAG, "Current KB/s: " + (bps/8e3));
  73 + if((bps < qualities.get(currentQuality).getQuality()) && (bps != -1))
  74 + {
  75 + currentQuality++;
  76 + }
75 return localFolder + seg.getURL().substring(seg.getURL().lastIndexOf("/")+1, seg.getURL().length()); 77 return localFolder + seg.getURL().substring(seg.getURL().lastIndexOf("/")+1, seg.getURL().length());
76 } 78 }
77 } 79 }
78 \ No newline at end of file 80 \ No newline at end of file
src/com/upc/pbe/upcnews/MainActivity.java
@@ -107,7 +107,7 @@ public class MainActivity extends Activity implements OnClickListener { @@ -107,7 +107,7 @@ public class MainActivity extends Activity implements OnClickListener {
107 /* 107 /*
108 * COSAS POR HACER 108 * COSAS POR HACER
109 * Qué coño pasa con los codecs -- Yo 109 * Qué coño pasa con los codecs -- Yo
110 - * Descargador de archivos binario -- Marc 110 + * CRASH AL DARLE A LA TECLA MENU DENTRO DE LAS PREFERENCES -- Marc
111 * Poner la defaultURL al server de PBE 111 * Poner la defaultURL al server de PBE
112 * Unificar la lengua de todo (WERT STYLE FUCK YES) y que cada uno documente minimamente su codigo 112 * Unificar la lengua de todo (WERT STYLE FUCK YES) y que cada uno documente minimamente su codigo
113 * Borrar esta puta mierda 113 * Borrar esta puta mierda
src/com/upc/pbe/upcnews/VideoActivity.java
1 package com.upc.pbe.upcnews; 1 package com.upc.pbe.upcnews;
2 2
  3 +import java.io.IOException;
  4 +
3 import android.app.Activity; 5 import android.app.Activity;
4 import android.media.MediaPlayer; 6 import android.media.MediaPlayer;
5 import android.net.Uri; 7 import android.net.Uri;
@@ -7,6 +9,7 @@ import android.os.Bundle; @@ -7,6 +9,7 @@ import android.os.Bundle;
7 import android.util.Log; 9 import android.util.Log;
8 import android.view.Menu; 10 import android.view.Menu;
9 import android.widget.MediaController; 11 import android.widget.MediaController;
  12 +import android.widget.Toast;
10 import android.widget.VideoView; 13 import android.widget.VideoView;
11 14
12 public class VideoActivity extends Activity 15 public class VideoActivity extends Activity
@@ -24,8 +27,7 @@ public class VideoActivity extends Activity @@ -24,8 +27,7 @@ public class VideoActivity extends Activity
24 { 27 {
25 public void onCompletion(MediaPlayer mp) 28 public void onCompletion(MediaPlayer mp)
26 { 29 {
27 - play(null);  
28 - //playNext(); 30 + playNext();
29 } 31 }
30 }); 32 });
31 h = ((UpcApp)getApplication()).getHLS(); 33 h = ((UpcApp)getApplication()).getHLS();
@@ -40,6 +42,7 @@ public class VideoActivity extends Activity @@ -40,6 +42,7 @@ public class VideoActivity extends Activity
40 super.finish(); 42 super.finish();
41 return; 43 return;
42 } 44 }
  45 + Log.d(TAG,url);
43 video.setVideoURI(Uri.parse(url)); 46 video.setVideoURI(Uri.parse(url));
44 video.setMediaController(new MediaController(this)); 47 video.setMediaController(new MediaController(this));
45 video.start(); 48 video.start();
@@ -48,10 +51,15 @@ public class VideoActivity extends Activity @@ -48,10 +51,15 @@ public class VideoActivity extends Activity
48 51
49 public void playNext() 52 public void playNext()
50 { 53 {
51 - String next = h.next();  
52 - Log.d(TAG,next);  
53 - //play(next);  
54 - play("/sdcard/a.ts"); 54 + try
  55 + {
  56 + String next = h.next();
  57 + play(next);
  58 + }
  59 + catch(IOException e)
  60 + {
  61 + Toast.makeText(this, "Can't find segment", Toast.LENGTH_LONG).show();
  62 + }
55 } 63 }
56 64
57 @Override 65 @Override