1
1
package in .omerjerk .processing .video .android ;
2
2
3
+ import java .io .IOException ;
4
+
3
5
import in .omerjerk .processing .video .android .callbacks .MediaPlayerHandlerCallback ;
6
+ import android .content .res .AssetFileDescriptor ;
4
7
import android .media .MediaMetadataRetriever ;
5
8
import android .media .MediaPlayer ;
6
- import android .net .Uri ;
7
9
import android .os .Handler ;
8
10
import android .os .HandlerThread ;
9
11
import android .os .Looper ;
@@ -20,17 +22,23 @@ public class Movie extends VideoBase implements MediaPlayerHandlerCallback {
20
22
21
23
public Movie (PApplet parent , String fileName ) {
22
24
super (parent );
23
- MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever ();
24
- metaRetriever .setDataSource (fileName );
25
- String height = metaRetriever .extractMetadata (MediaMetadataRetriever .METADATA_KEY_VIDEO_HEIGHT );
26
- String width = metaRetriever .extractMetadata (MediaMetadataRetriever .METADATA_KEY_VIDEO_WIDTH );
27
- init (Integer .valueOf (width ), Integer .valueOf (height ), ARGB );
25
+ AssetFileDescriptor afd = null ;
26
+ try {
27
+ afd = activity .getAssets ().openFd (fileName );
28
+ MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever ();
29
+ metaRetriever .setDataSource (afd .getFileDescriptor (), afd .getStartOffset (), afd .getLength ());
30
+ String height = metaRetriever .extractMetadata (MediaMetadataRetriever .METADATA_KEY_VIDEO_HEIGHT );
31
+ String width = metaRetriever .extractMetadata (MediaMetadataRetriever .METADATA_KEY_VIDEO_WIDTH );
32
+ init (Integer .valueOf (width ), Integer .valueOf (height ), ARGB );
33
+ } catch (IOException e ) {
34
+ e .printStackTrace ();
35
+ }
28
36
29
37
HandlerThread backgroundThread = new HandlerThread ("MediaPlayer" );
30
38
backgroundThread .start ();
31
39
handler = new MediaPlayerHandler (backgroundThread .getLooper ());
32
40
handler .setCallback (this );
33
- handler .sendMessage (handler .obtainMessage (MediaPlayerHandler .MSG_INIT_PLAYER , fileName ));
41
+ handler .sendMessage (handler .obtainMessage (MediaPlayerHandler .MSG_INIT_PLAYER , afd ));
34
42
}
35
43
36
44
public void play () {
@@ -67,8 +75,8 @@ public void setCallback (MediaPlayerHandlerCallback cb) {
67
75
public void handleMessage (Message msg ) {
68
76
switch (msg .what ) {
69
77
case MSG_INIT_PLAYER :
70
- String fileName = (String ) msg .obj ;
71
- callback .initPlayer (fileName );
78
+ AssetFileDescriptor afd = (AssetFileDescriptor ) msg .obj ;
79
+ callback .initPlayer (afd );
72
80
break ;
73
81
case MSG_START_PLAYER :
74
82
callback .startPlayer ();
@@ -80,10 +88,10 @@ public void handleMessage(Message msg) {
80
88
}
81
89
82
90
@ Override
83
- public void initPlayer (String fileName ) {
91
+ public void initPlayer (AssetFileDescriptor afd ) {
84
92
player = new MediaPlayer ();
85
93
try {
86
- player .setDataSource (activity , Uri . parse ( fileName ));
94
+ player .setDataSource (afd . getFileDescriptor (), afd . getStartOffset (), afd . getLength ( ));
87
95
player .setSurface (new Surface (mSurfaceTexture ));
88
96
player .setLooping (looping );
89
97
player .prepare ();
0 commit comments