VideoPlayerView.java 源代码
package com.unity3d.services.ads.video;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Build;
import android.widget.VideoView;
import com.mbridge.msdk.playercommon.exoplayer2.util.MimeTypes;
import com.unity3d.services.core.log.DeviceLog;
import com.unity3d.services.core.webview.WebViewApp;
import com.unity3d.services.core.webview.WebViewEventCategory;
import java.util.Timer;
import java.util.TimerTask;
public class VideoPlayerView extends VideoView {
private AudioManager _audioManager;
private boolean _infoListenerEnabled;
private MediaPlayer _mediaPlayer;
private Timer _prepareTimer;
private int _progressEventInterval;
private Timer _videoTimer;
private String _videoUrl;
private Float _volume;
public VideoPlayerView(Context context) {
super(context);
this._progressEventInterval = 500;
this._mediaPlayer = null;
this._volume = null;
this._infoListenerEnabled = true;
this._audioManager = null;
}
private void startPrepareTimer(long j6) {
Timer timer = new Timer();
this._prepareTimer = timer;
timer.schedule(new TimerTask() {
@Override
public void run() {
if (!VideoPlayerView.this.isPlaying()) {
WebViewApp.getCurrentApp().sendEvent(WebViewEventCategory.VIDEOPLAYER, VideoPlayerEvent.PREPARE_TIMEOUT, VideoPlayerView.this._videoUrl);
DeviceLog.error("Video player prepare timeout: " + VideoPlayerView.this._videoUrl);
}
}
}, j6);
}
private void startVideoProgressTimer() {
Timer timer = new Timer();
this._videoTimer = timer;
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
boolean z6;
try {
z6 = VideoPlayerView.this.isPlaying();
try {
WebViewApp.getCurrentApp().sendEvent(WebViewEventCategory.VIDEOPLAYER, VideoPlayerEvent.PROGRESS, Integer.valueOf(VideoPlayerView.this.getCurrentPosition()));
} catch (IllegalStateException e6) {
e = e6;
DeviceLog.exception("Exception while sending current position to webapp", e);
WebViewApp.getCurrentApp().sendEvent(WebViewEventCategory.VIDEOPLAYER, VideoPlayerEvent.ILLEGAL_STATE, VideoPlayerEvent.PROGRESS, VideoPlayerView.this._videoUrl, Boolean.valueOf(z6));
}
} catch (IllegalStateException e7) {
e = e7;
z6 = false;
}
}
};
int i6 = this._progressEventInterval;
timer.scheduleAtFixedRate(timerTask, i6, i6);
}
public int getProgressEventInterval() {
return this._progressEventInterval;
}
public int[] getVideoViewRectangle() {
int[] iArr = new int[2];
getLocationInWindow(iArr);
return new int[]{iArr[0], iArr[1], getMeasuredWidth(), getMeasuredHeight()};
}
public float getVolume() {
return this._volume.floatValue();
}
@Override
public void pause() {
try {
super.pause();
if (Build.VERSION.SDK_INT < 26) {
AudioManager audioManager = this._audioManager;
if (audioManager != null) {
audioManager.abandonAudioFocus(null);
}
} else {
setAudioFocusRequest(0);
}
stopVideoProgressTimer();
WebViewApp.getCurrentApp().sendEvent(WebViewEventCategory.VIDEOPLAYER, VideoPlayerEvent.PAUSE, this._videoUrl);
} catch (Exception e6) {
WebViewApp.getCurrentApp().sendEvent(WebViewEventCategory.VIDEOPLAYER, VideoPlayerEvent.PAUSE_ERROR, this._videoUrl);
DeviceLog.exception("Error pausing video", e6);
}
}
public void play() {
DeviceLog.entered();
setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
if (mediaPlayer != null) {
VideoPlayerView.this._mediaPlayer = mediaPlayer;
}
WebViewApp.getCurrentApp().sendEvent(WebViewEventCategory.VIDEOPLAYER, VideoPlayerEvent.COMPLETED, VideoPlayerView.this._videoUrl);
VideoPlayerView.this.stopVideoProgressTimer();
}
});
try {
start();
stopVideoProgressTimer();
startVideoProgressTimer();
WebViewApp.getCurrentApp().sendEvent(WebViewEventCategory.VIDEOPLAYER, VideoPlayerEvent.PLAY, this._videoUrl);
} catch (IllegalStateException unused) {
WebViewApp.getCurrentApp().sendEvent(WebViewEventCategory.VIDEOPLAYER, VideoPlayerEvent.ILLEGAL_STATE, this._videoUrl, Boolean.FALSE);
}
}
public boolean prepare(String str, final float f6, int i6) {
DeviceLog.entered();
this._videoUrl = str;
setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
VideoPlayerView.this.stopPrepareTimer();
if (mediaPlayer != null) {
VideoPlayerView.this._mediaPlayer = mediaPlayer;
}
VideoPlayerView.this.setVolume(Float.valueOf(f6));
WebViewApp.getCurrentApp().sendEvent(WebViewEventCategory.VIDEOPLAYER, VideoPlayerEvent.PREPARED, VideoPlayerView.this._videoUrl, Integer.valueOf(mediaPlayer.getDuration()), Integer.valueOf(mediaPlayer.getVideoWidth()), Integer.valueOf(mediaPlayer.getVideoHeight()));
}
});
setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mediaPlayer, int i7, int i8) {
VideoPlayerView.this.stopPrepareTimer();
if (mediaPlayer != null) {
VideoPlayerView.this._mediaPlayer = mediaPlayer;
}
WebViewApp.getCurrentApp().sendEvent(WebViewEventCategory.VIDEOPLAYER, VideoPlayerEvent.GENERIC_ERROR, VideoPlayerView.this._videoUrl, Integer.valueOf(i7), Integer.valueOf(i8));
VideoPlayerView.this.stopVideoProgressTimer();
return true;
}
});
setInfoListenerEnabled(this._infoListenerEnabled);
if (i6 > 0) {
startPrepareTimer(i6);
}
try {
if (Build.VERSION.SDK_INT < 26) {
AudioManager audioManager = (AudioManager) getContext().getSystemService(MimeTypes.BASE_TYPE_AUDIO);
this._audioManager = audioManager;
if (audioManager != null) {
audioManager.requestAudioFocus(null, 3, 2);
}
} else {
setAudioFocusRequest(2);
}
setVideoPath(this._videoUrl);
return true;
} catch (Exception e6) {
WebViewApp.getCurrentApp().sendEvent(WebViewEventCategory.VIDEOPLAYER, VideoPlayerEvent.PREPARE_ERROR, this._videoUrl);
DeviceLog.exception("Error preparing video: " + this._videoUrl, e6);
return false;
}
}
@Override
public void seekTo(int i6) {
try {
super.seekTo(i6);
WebViewApp.getCurrentApp().sendEvent(WebViewEventCategory.VIDEOPLAYER, VideoPlayerEvent.SEEKTO, this._videoUrl);
} catch (Exception e6) {
WebViewApp.getCurrentApp().sendEvent(WebViewEventCategory.VIDEOPLAYER, VideoPlayerEvent.SEEKTO_ERROR, this._videoUrl);
DeviceLog.exception("Error seeking video", e6);
}
}
public void setInfoListenerEnabled(boolean z6) {
this._infoListenerEnabled = z6;
if (z6) {
setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mediaPlayer, int i6, int i7) {
WebViewApp.getCurrentApp().sendEvent(WebViewEventCategory.VIDEOPLAYER, VideoPlayerEvent.INFO, VideoPlayerView.this._videoUrl, Integer.valueOf(i6), Integer.valueOf(i7));
return true;
}
});
} else {
setOnInfoListener(null);
}
}
public void setProgressEventInterval(int i6) {
this._progressEventInterval = i6;
if (this._videoTimer != null) {
stopVideoProgressTimer();
startVideoProgressTimer();
}
}
public void setVolume(Float f6) {
try {
this._mediaPlayer.setVolume(f6.floatValue(), f6.floatValue());
this._volume = f6;
} catch (Exception e6) {
DeviceLog.exception("MediaPlayer generic error", e6);
}
}
public void stop() {
stopPlayback();
stopVideoProgressTimer();
if (Build.VERSION.SDK_INT < 26) {
AudioManager audioManager = this._audioManager;
if (audioManager != null) {
audioManager.abandonAudioFocus(null);
}
} else {
setAudioFocusRequest(0);
}
WebViewApp.getCurrentApp().sendEvent(WebViewEventCategory.VIDEOPLAYER, VideoPlayerEvent.STOP, this._videoUrl);
}
public void stopPrepareTimer() {
Timer timer = this._prepareTimer;
if (timer != null) {
timer.cancel();
this._prepareTimer.purge();
this._prepareTimer = null;
}
}
public void stopVideoProgressTimer() {
Timer timer = this._videoTimer;
if (timer != null) {
timer.cancel();
this._videoTimer.purge();
this._videoTimer = null;
}
}
}