Commit c12833f5e31c3f4a3c7302534960f27961e02486

Authored by Imanol-Mikel Barba Sabariego
1 parent 79edf2bf

HLS casi terminado, añadido BandwidthMeasurer

src/com/upc/pbe/upcnews/BandwidthMeasurer.java 0 → 100644
  1 +package com.upc.pbe.upcnews;
  2 +
  3 +import android.net.TrafficStats;
  4 +
  5 +public class BandwidthMeasurer
  6 +{
  7 + public double Measure(long rxBytes, long Time)
  8 + {
  9 + double bps;
  10 + long TotalRxAfterTest = TrafficStats.getTotalRxBytes();
  11 + long AfterTime = System.currentTimeMillis();
  12 +
  13 + double TimeDifference = AfterTime - Time;
  14 +
  15 + double rxDiff = TotalRxAfterTest - rxBytes;
  16 +
  17 + if(rxDiff != 0)
  18 + {
  19 + bps = (rxDiff / (TimeDifference/1000)); // total rx bytes per second.
  20 + }
  21 + else
  22 + {
  23 + bps = -1; //No transmitted data
  24 + }
  25 + return bps;
  26 + }
  27 +}
... ...
src/com/upc/pbe/upcnews/Directoris.java
... ... @@ -112,9 +112,8 @@ public class Directoris extends Activity implements OnItemClickListener
112 112 {
113 113 ArrayList<ParentList> m3u8parsed = p.parseFile(playlist);
114 114 Log.d(TAG, "parsing completed");
115   - HLS h = new HLS(m3u8parsed);
116   - // h.start();
117   -
  115 + HLS h = new HLS(m3u8parsed,((UpcApp)getApplication()).getLocalPath());
  116 + h.start();
118 117 }
119 118 catch (ErrorException e)
120 119 {
... ...
src/com/upc/pbe/upcnews/HLS.java
... ... @@ -2,31 +2,60 @@ package com.upc.pbe.upcnews;
2 2  
3 3 import java.util.ArrayList;
4 4  
  5 +import android.util.Log;
  6 +
5 7 public class HLS {
6 8  
7   - static final String TAG = "HLS";
8   -
9   - ArrayList<ParentList> videos;
10   - int video;
11   - int quality; //0 es la más alta
  9 + private static final String TAG = "HLS";
  10 + private ArrayList<ParentList> videos;
  11 + private int currentVideo ;
  12 + private int currentQuality; //0 es la más alta
  13 + private int currentSegment;
  14 + private boolean endReached;
  15 + private String localFolder;
  16 + //private fileDownloader fd;
  17 + private BandwidthMeasurer bm;
12 18  
13   - public HLS(ArrayList<ParentList> parsed)
  19 + public HLS(ArrayList<ParentList> parsed, String localFolder)
14 20 {
  21 + currentVideo = currentQuality = currentSegment = 0;
15 22 this.videos = parsed;
16   - video = 0;
17   - quality = 0;
  23 + endReached = false;
  24 + this.localFolder = localFolder;
  25 + bm = new BandwidthMeasurer();
18 26 }
19 27  
20 28 public void start()
21 29 {
22   - int currentVideo = 0;
23   - for(video = 0; video < videos.size(); video++)
  30 + for(currentVideo = 0; currentVideo < videos.size(); currentVideo++)
24 31 {
25   - ArrayList<Video> qualities = videos.get(video).getLists();
26   - /*while(i > videos.get(quality).getLists())
  32 + ArrayList<Video> qualities = videos.get(currentVideo++).getLists();
  33 + while(!endReached)
27 34 {
28   - Segment seg = videos.get(video).getLists().get(quality).getSegments().get(i);
29   - }*/
  35 + ArrayList<Segment> segments = qualities.get(currentQuality).getSegments();
  36 + while(true)
  37 + {
  38 + Segment seg = segments.get(currentSegment++);
  39 + Log.d(TAG, seg.getName() + " " + seg.getURL());
  40 + long startTime = System.currentTimeMillis();
  41 + //long segmentBytes = fd.Download(seg.getURL(),localFolder);
  42 + long segmentBytes = 0;
  43 + double bps = bm.Measure(segmentBytes,startTime);
  44 + if(bps < qualities.get(currentQuality).getQuality())
  45 + {
  46 + currentQuality++;
  47 + break;
  48 + }
  49 + /*
  50 + * REPRODUCIR SEGMENTO
  51 + */
  52 + if(currentSegment == segments.size())
  53 + {
  54 + endReached = true;
  55 + break;
  56 + }
  57 + }
  58 + }
30 59 }
31 60 }
32 61 }
... ...
src/com/upc/pbe/upcnews/MainActivity.java
1 1 package com.upc.pbe.upcnews;
2 2  
3 3 import android.app.Activity;
4   -import android.content.Context;
5 4 import android.content.Intent;
6   -import android.net.wifi.WifiInfo;
7   -import android.net.wifi.WifiManager;
8 5 import android.os.Bundle;
9 6 import android.util.Log;
10 7 import android.view.Menu;
... ... @@ -12,55 +9,23 @@ import android.view.MenuItem;
12 9 import android.view.View;
13 10 import android.view.View.OnClickListener;
14 11 import android.widget.ImageButton;
15   -import android.widget.TextView;
16 12 import android.widget.Toast;
17 13  
18 14 public class MainActivity extends Activity implements OnClickListener {
19   - final static String TAG = "Main";
20   - static String html;
21   - WifiManager wifi;
22   -
23   - Directoris dir;
24   - ImageButton buttonDescarrega;
25   - String file = "ejemplo.xml";
26   - String folder = "Environment.getExternalStorageDirectory.getPath()";
27   - TextView showText;
  15 + private final static String TAG = "Main";
  16 + private static String html;
  17 + private ImageButton buttonDescarrega;
28 18  
29 19  
30 20 @Override
31   - public void onCreate(Bundle savedInstanceState) {
32   - /*
33   - * FALTA:
34   - * Boton mayor resolucion
35   - */
  21 + public void onCreate(Bundle savedInstanceState)
  22 + {
36 23 super.onCreate(savedInstanceState);
37 24 setContentView(R.layout.main_activity);
38 25 Log.d(TAG, "onCreated");
39 26 buttonDescarrega = (ImageButton) findViewById(R.id.button);
40 27 buttonDescarrega.setOnClickListener(this);
41   - showText = (TextView) findViewById(R.id.textViewXml);
42 28 this.getUrl();
43   -
44   - new Thread() {
45   - public void run() {
46   - //Wifi Info
47   - int speed = 0;
48   - for (int i = 0; i < 5; i++) {
49   - wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
50   - WifiInfo info = wifi.getConnectionInfo();
51   - speed = speed + info.getLinkSpeed();
52   - try {
53   - Thread.sleep(1000);
54   - } catch (InterruptedException e) {
55   - e.printStackTrace();
56   - }
57   -
58   - }
59   -
60   - String str = "Speed: " + speed/5;
61   - Log.d(TAG, str);
62   - }
63   - }.start();
64 29 }
65 30  
66 31 public boolean onCreateOptionsMenu(Menu menu) {
... ...
src/com/upc/pbe/upcnews/Parser.java
... ... @@ -221,7 +221,7 @@ public class Parser
221 221 }
222 222 expectList = true;
223 223 String programID = "";
224   - int bandwidth = -1;
  224 + double bandwidth = -1;
225 225 String[] arguments = extTag[1].split(",");
226 226 for (int i = 0; i < arguments.length; i++)
227 227 {
... ... @@ -261,7 +261,7 @@ public class Parser
261 261 }
262 262 else if (argument[0].equals("BANDWIDTH"))
263 263 {
264   - bandwidth = Integer.parseInt(argument[1]);
  264 + bandwidth = Double.parseDouble(argument[1]);
265 265 }
266 266 }
267 267 if (programID.equals("") || bandwidth == -1)
... ...
src/com/upc/pbe/upcnews/UpcApp.java
... ... @@ -3,6 +3,7 @@ package com.upc.pbe.upcnews;
3 3 import android.app.Application;
4 4 import android.content.SharedPreferences;
5 5 import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
  6 +import android.os.Environment;
6 7 import android.preference.PreferenceManager;
7 8 import android.util.Log;
8 9  
... ... @@ -10,10 +11,16 @@ import android.util.Log;
10 11 public class UpcApp extends Application implements OnSharedPreferenceChangeListener {
11 12  
12 13 final static String TAG = "Application";
13   - SharedPreferences prefs;
14   - String defaultUrl = "imanolbarba.myftp.biz/PBE";
15   - String url = null;
16   - String desc;
  14 + private SharedPreferences prefs;
  15 + private String defaultUrl = "imanolbarba.myftp.biz/PBE";
  16 + private String url = null;
  17 + private String desc;
  18 + private final static String localPath = Environment.getExternalStorageDirectory().getPath() + "UPC/";
  19 +
  20 + public String getLocalPath()
  21 + {
  22 + return localPath;
  23 + }
17 24  
18 25 public String getUrl() {
19 26 url = "http://" + prefs.getString("server", defaultUrl);
... ...
src/com/upc/pbe/upcnews/Video.java
... ... @@ -5,12 +5,12 @@ import java.util.ArrayList;
5 5 public class Video
6 6 {
7 7  
8   - private int quality;
  8 + private double quality;
9 9 private int sequenceFirst;
10 10 private int maxDuration;
11 11 private ArrayList<Segment> segments; //Lista de SEGMENTOS
12 12  
13   - public Video(int q)
  13 + public Video(double q)
14 14 {
15 15 quality = q;
16 16 segments = new ArrayList<Segment>();
... ... @@ -36,12 +36,12 @@ public class Video
36 36 return maxDuration;
37 37 }
38 38  
39   - public int getQuality()
  39 + public double getQuality()
40 40 {
41 41 return quality;
42 42 }
43 43  
44   - public void setQuality(int q)
  44 + public void setQuality(double q)
45 45 {
46 46 quality = q;
47 47 }
... ...