Hallo,
Ik ben bezig aan een app (voor tablet) dat een video stream binnenhaalt. De server is een andere Android app (IP WebCam) afkomstig van de Android Market die de camerabeelden beschikbaar stelt. Nu heb ik met WireShark gezocht hoe de video uitgewisseld word en blijkt dat het gewoon jpeg afbeeldingen (640x480) zijn die continue met een HTTP Get request worden opgevraagd, dus niet echt een video stream. Het gebruik van een reeds ontworpen en werkende app zoals bv.: tinycam is in mijn geval geen oplossing. De video moet ingebed worden in mijn app. Dan heb ik maar een HTTP-client geschreven die de afbeelding op bovenstaande wijze opvraagt en weergeeft in een ImageView. Het resultaat is aangezien het geen optimale werkwijze is verrassend goed, geen vertraging en duidelijk beeld. Alleen het beheer van de bitmaps laat alle wensen over, de Garbage Collector doet overuren en de app zit continue op low memory. Er mag dus niet veel gebeuren of daar is hij de: Out Of Memory Exception.
Als ik de bitmap decoder een reeds aangemaakte bitmap laat hergebruiken dat heeft de Garbage collectior minder werk, alleen blijft de app op low memory:
Alle tips, ervaringen, verbeteringen, noem maar op zijn welkom waarvoor dank !
Groeten Steve
Ik ben bezig aan een app (voor tablet) dat een video stream binnenhaalt. De server is een andere Android app (IP WebCam) afkomstig van de Android Market die de camerabeelden beschikbaar stelt. Nu heb ik met WireShark gezocht hoe de video uitgewisseld word en blijkt dat het gewoon jpeg afbeeldingen (640x480) zijn die continue met een HTTP Get request worden opgevraagd, dus niet echt een video stream. Het gebruik van een reeds ontworpen en werkende app zoals bv.: tinycam is in mijn geval geen oplossing. De video moet ingebed worden in mijn app. Dan heb ik maar een HTTP-client geschreven die de afbeelding op bovenstaande wijze opvraagt en weergeeft in een ImageView. Het resultaat is aangezien het geen optimale werkwijze is verrassend goed, geen vertraging en duidelijk beeld. Alleen het beheer van de bitmaps laat alle wensen over, de Garbage Collector doet overuren en de app zit continue op low memory. Er mag dus niet veel gebeuren of daar is hij de: Out Of Memory Exception.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| @Override public void run() { BufferedInputStream oInputStream; Bitmap showing = null; do{ try { oHttpURLConnection = (HttpURLConnection)oUrl.openConnection(); oInputStream = new BufferedInputStream(oHttpURLConnection.getInputStream()); // Hier wordt telkens een nieuwe bitmap aangemaakt en maakt // het geheel dus inefficiënt showing = BitmapFactory.decodeStream(oInputStream); if(showing != null){ oHandler.obtainMessage(DECODE_RESULT_OK, showing).sendToTarget(); }else{ Log.w(TAG, "decode inputstream to bitmap failed"); } } catch (IOException e) { Log.e(TAG, "download image failed",e); } finally{ oHttpURLConnection.disconnect(); oHttpURLConnection = null; } }while(looping); } |
Als ik de bitmap decoder een reeds aangemaakte bitmap laat hergebruiken dat heeft de Garbage collectior minder werk, alleen blijft de app op low memory:
code:
1
| GC_CONCURRENT freed 1254K, 17% free 10581K/12679K, paused 2ms+3ms |
Alle tips, ervaringen, verbeteringen, noem maar op zijn welkom waarvoor dank !
Groeten Steve
