1
1
package com .eduinfinity .dimu .translatehelper .activity ;
2
2
3
3
import android .content .Intent ;
4
+ import android .graphics .Matrix ;
5
+ import android .graphics .SurfaceTexture ;
6
+ import android .media .AudioManager ;
4
7
import android .os .Bundle ;
5
8
import android .support .v4 .app .FragmentActivity ;
6
9
import android .support .v4 .view .PagerAdapter ;
7
10
import android .support .v4 .view .ViewPager ;
8
11
import android .util .Log ;
9
12
import android .view .LayoutInflater ;
13
+ import android .view .Surface ;
14
+ import android .view .TextureView ;
10
15
import android .view .View ;
11
- import android .widget .EditText ;
12
-
16
+ import android .widget .Toast ;
13
17
import com .eduinfinity .dimu .translatehelper .R ;
14
18
import com .eduinfinity .dimu .translatehelper .adapter .Center ;
15
19
import com .eduinfinity .dimu .translatehelper .adapter .SrtPageAdapter ;
16
20
import com .eduinfinity .dimu .translatehelper .adapter .model .Model ;
17
- import com .eduinfinity .dimu .translatehelper .adapter .model .Resource ;
18
21
import com .eduinfinity .dimu .translatehelper .utils .Config ;
19
22
import com .eduinfinity .dimu .translatehelper .utils .FileUtils ;
20
23
import com .eduinfinity .dimu .translatehelper .utils .SrtParse ;
21
24
import com .eduinfinity .dimu .translatehelper .utils .TextTrackImpl ;
25
+ import de .greenrobot .event .EventBus ;
26
+ import io .vov .vitamio .LibsChecker ;
27
+ import io .vov .vitamio .MediaPlayer ;
28
+ import io .vov .vitamio .MediaPlayer .OnBufferingUpdateListener ;
29
+ import io .vov .vitamio .MediaPlayer .OnCompletionListener ;
30
+ import io .vov .vitamio .MediaPlayer .OnPreparedListener ;
22
31
23
32
import java .util .ArrayList ;
24
33
import java .util .List ;
25
34
26
- import de .greenrobot .event .EventBus ;
27
-
28
-
29
- public class TranslateActivity extends FragmentActivity {
35
+ public class TranslateActivity extends FragmentActivity implements OnBufferingUpdateListener ,
36
+ OnCompletionListener , OnPreparedListener , TextureView .SurfaceTextureListener {
30
37
private static final String TAG = "TranslateActivity" ;
31
38
32
39
public static final String ResourceSlug = "ResourceSlug" ;
@@ -42,6 +49,17 @@ public class TranslateActivity extends FragmentActivity {
42
49
43
50
private String resourceSlug , projectSlug , name ;
44
51
private int status ;
52
+ private EventBus translateBus = new EventBus ();
53
+
54
+ //for vedio
55
+ private boolean isVideoPlayerOK = true ;
56
+ private int mVideoWidth ;
57
+ private int mVideoHeight ;
58
+ private MediaPlayer mMediaPlayer ;
59
+ private TextureView mTextureView ;
60
+ private String path ;
61
+ private boolean mIsVideoSizeKnown = false ;
62
+ private boolean mIsVideoReadyToBePlayed = false ;
45
63
46
64
@ Override
47
65
protected void onCreate (Bundle savedInstanceState ) {
@@ -58,12 +76,14 @@ protected void onCreate(Bundle savedInstanceState) {
58
76
loadSrt ();
59
77
srtAdapter = new SrtPageAdapter (getSupportFragmentManager (), lineList );
60
78
mViewPager .setAdapter (srtAdapter );
79
+ if (!LibsChecker .checkVitamioLibs (this )) isVideoPlayerOK = false ;
80
+ mTextureView = (TextureView ) findViewById (R .id .surface );
81
+ mTextureView .setSurfaceTextureListener (this );
61
82
// CirclePageIndicator circlePageIndicator = (CirclePageIndicator) findViewById(R.id.indicator);
62
83
// circlePageIndicator.setViewPager(mViewPager);
63
84
// srtAdapter = new SrtViewPageAdapter(viewList);
64
85
// mViewPager.setAdapter(srtAdapter);
65
86
66
-
67
87
// switch (status) {
68
88
// case Model.INIT:
69
89
// TXRestClientUsage.getResourceContent(projectSlug, resourceSlug);
@@ -76,8 +96,26 @@ protected void onCreate(Bundle savedInstanceState) {
76
96
//
77
97
// break;
78
98
// }
79
- // CirclePageIndicator circlePageIndicator = (CirclePageIndicator) findViewById(R.id.indicator);
80
- // circlePageIndicator.setViewPager(viewPager);
99
+
100
+ mViewPager .setOnPageChangeListener (new ViewPager .OnPageChangeListener () {
101
+ @ Override
102
+ public void onPageScrolled (int i , float v , int i1 ) {
103
+
104
+ }
105
+
106
+ @ Override
107
+ public void onPageSelected (int i ) {
108
+ if (mIsVideoReadyToBePlayed ){
109
+ mMediaPlayer .seekTo (lineList .get (i ).startTime );
110
+ mMediaPlayer .getDuration ();
111
+ }
112
+ }
113
+
114
+ @ Override
115
+ public void onPageScrollStateChanged (int i ) {
116
+
117
+ }
118
+ });
81
119
}
82
120
83
121
@ Override
@@ -95,43 +133,19 @@ private void loadSrt() {
95
133
if (FileUtils .isExist ("/" + projectSlug + Config .TransFolder , resourceSlug + ".srt" )) {
96
134
FileUtils .readTrans2track ("/" + projectSlug + Config .TransFolder , resourceSlug + ".srt" , tack , this );
97
135
}
98
- if (FileUtils .isExist ("/" + projectSlug + Config .VideosFolder , resourceSlug + ".mp4" )) {
99
- }
136
+
100
137
101
138
lineList = tack .getSubs ();
102
- // for (int i = 0; i < lineList.size(); i++) {
103
- // View view = inflate.inflate(R.layout.viewpage_srt, null);
104
- // TextView index = (TextView) view.findViewById(R.id.textView_index);
105
- // TextView s = (TextView) view.findViewById(R.id.textView_startTime);
106
- // TextView e = (TextView) view.findViewById(R.id.textView_endTime);
107
- // TextView l = (TextView) view.findViewById(R.id.textView_lineString);
108
- // EditText t = (EditText) view.findViewById(R.id.editText_trans);
109
- //
110
- // index.setText("" + lineList.get(i).index);
111
- // s.setText("" + SrtParse.convertTime2String(lineList.get(i).startTime));
112
- // e.setText("" + SrtParse.convertTime2String(lineList.get(i).endTime));
113
- // l.setText("" + lineList.get(i).lineString);
114
- // t.setText("" + lineList.get(i).getTrans());
115
- // PageHolder holder = new PageHolder();
116
- // holder.editText = t;
117
- // view.setTag(holder);
118
- // viewList.add(view);
119
- // }
120
- // Log.e(TAG, "" + lineList.size());
121
- // Log.e(TAG, "" + viewList.size());
122
- // if (viewList.size() == 0)
123
- // Toast.makeText(this, R.string.parseSRTError, Toast.LENGTH_SHORT).show();
124
- // srtAdapter.notifyDataSetChanged();
125
139
}
126
140
127
141
128
- EventBus translateBus = new EventBus ();
129
-
130
142
@ Override
131
143
protected void onPause () {
132
144
Log .i ("Activity" , "Activity on pause" );
133
- translateBus .post (new SaveEvent ());
134
145
super .onPause ();
146
+ translateBus .post (new SaveEvent ());
147
+ releaseMediaPlayer ();
148
+ doCleanUp ();
135
149
}
136
150
137
151
public void onEventAsync (SaveEvent event ) {
@@ -146,4 +160,120 @@ class SaveEvent {
146
160
147
161
}
148
162
163
+ private void playVideo (SurfaceTexture surfaceTexture ) {
164
+ doCleanUp ();
165
+ path = "" ;
166
+ // path=
167
+ try {
168
+ if (FileUtils .isExist ("/" + projectSlug + Config .VideosFolder , resourceSlug + ".mp4" )) {
169
+ path = FileUtils .getFileRootPath () +"/" + projectSlug + Config .VideosFolder +"/" + resourceSlug + ".mp4" ;
170
+ }
171
+ if (path == "" ) {
172
+ // Tell the user to provide a media file URL.
173
+ Toast .makeText (TranslateActivity .this , "not find video" , Toast .LENGTH_LONG ).show ();
174
+ return ;
175
+ }
176
+ // Create a new media player and set the listeners
177
+ mMediaPlayer = new MediaPlayer (this , true );
178
+ mMediaPlayer .setDataSource (path );
179
+ mMediaPlayer .setSurface (new Surface (surfaceTexture ));
180
+ mMediaPlayer .prepareAsync ();
181
+ mMediaPlayer .setOnBufferingUpdateListener (this );
182
+ mMediaPlayer .setOnCompletionListener (this );
183
+ mMediaPlayer .setOnPreparedListener (this );
184
+ setVolumeControlStream (AudioManager .STREAM_MUSIC );
185
+
186
+ } catch (Exception e ) {
187
+ Log .e (TAG , "error: " + e .getMessage (), e );
188
+ }
189
+ }
190
+
191
+ public void onBufferingUpdate (MediaPlayer arg0 , int percent ) {
192
+ // Log.d(TAG, "onBufferingUpdate percent:" + percent);
193
+
194
+ }
195
+
196
+ public void onCompletion (MediaPlayer arg0 ) {
197
+ Log .d (TAG , "onCompletion called" );
198
+ }
199
+
200
+ public void onPrepared (MediaPlayer mediaplayer ) {
201
+ Log .d (TAG , "onPrepared called" );
202
+ mIsVideoReadyToBePlayed = true ;
203
+ if (mIsVideoReadyToBePlayed ) {
204
+ startVideoPlayback ();
205
+ }
206
+ }
207
+
208
+ private void releaseMediaPlayer () {
209
+ if (mMediaPlayer != null ) {
210
+ mMediaPlayer .release ();
211
+ mMediaPlayer = null ;
212
+ }
213
+ }
214
+
215
+ private void doCleanUp () {
216
+ mVideoWidth = 0 ;
217
+ mVideoHeight = 0 ;
218
+ mIsVideoReadyToBePlayed = false ;
219
+ mIsVideoSizeKnown = false ;
220
+ }
221
+
222
+ private void startVideoPlayback () {
223
+ Log .v (TAG , "startVideoPlayback" );
224
+ adjustAspectRatio (mMediaPlayer .getVideoWidth (), mMediaPlayer .getVideoHeight ());
225
+ mMediaPlayer .start ();
226
+ }
227
+
228
+ /**
229
+ * Sets the TextureView transform to preserve the aspect ratio of the video.
230
+ */
231
+ private void adjustAspectRatio (int videoWidth , int videoHeight ) {
232
+ int viewWidth = mTextureView .getWidth ();
233
+ int viewHeight = mTextureView .getHeight ();
234
+ double aspectRatio = (double ) videoHeight / videoWidth ;
235
+
236
+ int newWidth , newHeight ;
237
+ if (viewHeight > (int ) (viewWidth * aspectRatio )) {
238
+ // limited by narrow width; restrict height
239
+ newWidth = viewWidth ;
240
+ newHeight = (int ) (viewWidth * aspectRatio );
241
+ } else {
242
+ // limited by short height; restrict width
243
+ newWidth = (int ) (viewHeight / aspectRatio );
244
+ newHeight = viewHeight ;
245
+ }
246
+ int xoff = (viewWidth - newWidth ) / 2 ;
247
+ int yoff = (viewHeight - newHeight ) / 2 ;
248
+ Log .v (TAG , "video=" + videoWidth + "x" + videoHeight + " view=" + viewWidth + "x" + viewHeight
249
+ + " newView=" + newWidth + "x" + newHeight + " off=" + xoff + "," + yoff );
250
+
251
+ Matrix txform = new Matrix ();
252
+ mTextureView .getTransform (txform );
253
+ txform .setScale ((float ) newWidth / viewWidth , (float ) newHeight / viewHeight );
254
+ //txform.postRotate(10); // just for fun
255
+ txform .postTranslate (xoff , yoff );
256
+ mTextureView .setTransform (txform );
257
+ }
258
+
259
+ @ Override
260
+ public void onSurfaceTextureAvailable (SurfaceTexture surface , int width , int height ) {
261
+ playVideo (surface );
262
+ }
263
+
264
+ @ Override
265
+ public void onSurfaceTextureSizeChanged (SurfaceTexture surface , int width , int height ) {
266
+
267
+ }
268
+
269
+ @ Override
270
+ public boolean onSurfaceTextureDestroyed (SurfaceTexture surface ) {
271
+ return false ;
272
+ }
273
+
274
+ @ Override
275
+ public void onSurfaceTextureUpdated (SurfaceTexture surface ) {
276
+
277
+ }
278
+
149
279
}
0 commit comments