Autoría | Ultima modificación | Ver Log |
package com.cesams.twogetskills.activity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import com.cesams.twogetskills.Constants;
import com.cesams.twogetskills.R;
import com.cesams.twogetskills.library.MD5;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
import com.google.android.exoplayer2.ui.PlayerView;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory;
import com.google.android.exoplayer2.util.Util;
import java.util.Calendar;
import java.util.Random;
import java.util.TimeZone;
public class VideoAudioActivity extends AppCompatActivity {
private static final String TAG = "C2GS - VideoßActivity";
private SimpleExoPlayer simpleExoPlayer;
private PlayerView playerView;
private ProgressBar progressBar;
private long playbackPosition;
private String videoAudioUrl;
private String deviceId;
private String password;
private boolean durationSet = false;
private long realDurationMillis = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video_audio);
videoAudioUrl = getIntent().getStringExtra("videoAudioUrl");
deviceId = getIntent().getStringExtra("deviceId");
password = getIntent().getStringExtra("password");
playerView = (PlayerView) findViewById(R.id.activity_video_audio_player);
progressBar = (ProgressBar) findViewById(R.id.activity_video_audio_progress_bar);
try {
} catch (Exception e) {
Log.e("VideoAudioActivity", " exoplayer error " + e.toString());
}
}
public void onStart()
{
super.onStart();
initializePlayer();
}
public void onStop()
{
super.onStop();
releasePlayer();
}
@Override
public void onBackPressed() {
try {
long currentPosition = simpleExoPlayer.getCurrentPosition();
long duration = simpleExoPlayer.getDuration();
long dif = duration - currentPosition;
//10 seg x 1000 milliseconds
if(dif <= 10000 ) {
Intent intent = new Intent();
intent.putExtra("completed", true);
intent.putExtra("requestCode", Constants.REQUEST_CODE_AUDIO_VIDEO);
setResult(RESULT_OK, intent);
finish();
}
} catch(Exception e) {
}
setResult(RESULT_CANCELED);
finish();
}
public void initializePlayer() {
simpleExoPlayer = new SimpleExoPlayer.Builder(this).build();
preparePlayer();
playerView.setPlayer(simpleExoPlayer);
simpleExoPlayer.setPlayWhenReady(true);
simpleExoPlayer.seekTo(0, playbackPosition);
simpleExoPlayer.addListener(new Player.EventListener() {
@Override
public void onPlaybackStateChanged(int state) {
if (state == ExoPlayer.STATE_READY && !durationSet) {
realDurationMillis = simpleExoPlayer.getDuration();
durationSet = true;
} else if(state == ExoPlayer.STATE_IDLE) {
playerView.setKeepScreenOn(false);
} else if(state == ExoPlayer.STATE_ENDED) {
playerView.setKeepScreenOn(false);
Intent intent = new Intent();
intent.putExtra("completed", true);
intent.putExtra("requestCode", Constants.REQUEST_CODE_AUDIO_VIDEO);
setResult(RESULT_OK, intent);
finish();
} else {
playerView.setKeepScreenOn(true);
}
}
@Override
public void onIsLoadingChanged(boolean isLoading) {
if (isLoading){
progressBar.setVisibility(View.VISIBLE);
} else {
progressBar.setVisibility(View.INVISIBLE);
}
}
});
}
public void preparePlayer()
{
TimeZone timeZone = TimeZone.getTimeZone("UTC");
Calendar calendar = Calendar.getInstance(timeZone);
TimeZone tz = calendar.getTimeZone();
int created = (int) (calendar.getTimeInMillis() / 1000);
Random random = new Random(created);
int rand = 1000 + random.nextInt(8999);
Log.d(TAG, "token = " + deviceId);
Log.d(TAG, "created = " + created);
Log.d(TAG, "rand = " + rand);
Log.d(TAG, "calc = " + password + ':' + created + ':' + rand);
String secret = MD5.generar(password + ':' + created + ':' + rand);
try {
DefaultHttpDataSourceFactory httpDataSourceFactory = new DefaultHttpDataSourceFactory(Util.getUserAgent(this, this.getString(R.string.app_name)), null);
httpDataSourceFactory.getDefaultRequestProperties().set(Constants.HTTP_HEADER_SECURITY_TOKEN, deviceId);
httpDataSourceFactory.getDefaultRequestProperties().set(Constants.HTTP_HEADER_SECURITY_SECRET, secret);
httpDataSourceFactory.getDefaultRequestProperties().set(Constants.HTTP_HEADER_SECURITY_CREATED, String.valueOf(created));
httpDataSourceFactory.getDefaultRequestProperties().set(Constants.HTTP_HEADER_SECURITY_RAND, String.valueOf(rand));
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, null, httpDataSourceFactory);
// Create a progressive media source pointing to a stream uri.
Log.d(TAG, "video file = " + videoAudioUrl);
MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(Uri.parse(videoAudioUrl)));
simpleExoPlayer.setMediaSource(mediaSource);
} catch (Exception e) {
Log.e("MainAcvtivity", " exoplayer error " + e.toString());
}
}
public void releasePlayer() {
playbackPosition = simpleExoPlayer.getCurrentPosition();
simpleExoPlayer.release();
}
}