package com.youku.player.base;
|
|
import java.io.UnsupportedEncodingException;
|
import java.net.URLDecoder;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import android.annotation.SuppressLint;
|
import android.app.Activity;
|
import android.app.AlertDialog;
|
import android.app.Dialog;
|
import android.content.Context;
|
import android.content.DialogInterface;
|
import android.content.Intent;
|
import android.content.pm.ActivityInfo;
|
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager.NameNotFoundException;
|
import android.content.res.Configuration;
|
import android.media.AudioManager;
|
import android.media.MediaPlayer;
|
import android.media.MediaPlayer.OnBufferingUpdateListener;
|
import android.media.MediaPlayer.OnCompletionListener;
|
import android.media.MediaPlayer.OnErrorListener;
|
import android.media.MediaPlayer.OnPreparedListener;
|
import android.media.MediaPlayer.OnSeekCompleteListener;
|
import android.media.MediaPlayer.OnVideoSizeChangedListener;
|
import android.os.Handler;
|
import android.os.Message;
|
import android.os.StrictMode;
|
import android.preference.PreferenceManager;
|
import android.test.suitebuilder.annotation.SmallTest;
|
import android.text.TextUtils;
|
import android.view.Display;
|
import android.view.KeyEvent;
|
import android.view.LayoutInflater;
|
import android.view.SurfaceHolder;
|
import android.view.View;
|
import android.view.WindowManager;
|
import android.webkit.URLUtil;
|
import android.widget.EditText;
|
import android.widget.FrameLayout;
|
|
import com.baseproject.image.ImageResizer;
|
import com.baseproject.utils.Logger;
|
import com.baseproject.utils.UIUtils;
|
import com.baseproject.utils.Util;
|
import com.youku.analytics.data.Device;
|
import com.youku.player.NewSurfaceView;
|
import com.youku.player.Track;
|
import com.youku.player.YoukuPlayerConfiguration;
|
import com.youku.player.ad.AdType;
|
import com.youku.player.apiservice.ICacheInfo;
|
import com.youku.player.config.MediaPlayerConfiguration;
|
import com.youku.player.goplay.Profile;
|
import com.youku.player.goplay.StaticsUtil;
|
import com.youku.player.module.PlayVideoInfo;
|
import com.youku.player.module.VideoCacheInfo;
|
import com.youku.player.module.VideoHistoryInfo;
|
import com.youku.player.module.VideoUrlInfo;
|
import com.youku.player.module.VideoUrlInfo.Source;
|
import com.youku.player.plugin.OnSurfaceStatusChangeListener;
|
import com.youku.player.plugin.PluginADPlay;
|
import com.youku.player.plugin.PluginManager;
|
import com.youku.player.plugin.PluginOverlay;
|
import com.youku.player.plugin.PluginSimplePlayer;
|
import com.youku.player.plugin.YoukuPlayerListener;
|
import com.youku.player.ui.R;
|
import com.youku.player.ui.interf.IBaseMediaPlayer;
|
import com.youku.player.ui.interf.IBaseMediaPlayer.OnPlayHeartListener;
|
import com.youku.player.ui.interf.IBasePlayerManager;
|
import com.youku.player.ui.interf.IMediaPlayerDelegate;
|
import com.youku.player.ui.widget.TudouEncryptDialog.OnPositiveClickListener;
|
import com.youku.player.util.AnalyticsWrapper;
|
import com.youku.player.util.DetailMessage;
|
import com.youku.player.util.DeviceOrientationHelper;
|
import com.youku.player.util.DeviceOrientationHelper.OrientationChangeCallback;
|
import com.youku.player.util.DisposableStatsUtils;
|
import com.youku.player.util.MediaPlayerProxyUtil;
|
import com.youku.player.util.PlayCode;
|
import com.youku.player.util.PlayerUiUtile;
|
import com.youku.player.util.PlayerUtil;
|
import com.youku.player.util.PreferenceUtil;
|
import com.youku.player.util.RemoteInterface;
|
import com.youku.player.util.SessionUnitil;
|
import com.youku.player.util.URLContainer;
|
import com.youku.statistics.IRVideoWrapper;
|
import com.youku.statistics.OfflineStatistics;
|
import com.youku.statistics.TaskSendPlayBreak;
|
import com.youku.uplayer.EGLUtil;
|
import com.youku.uplayer.MPPErrorCode;
|
import com.youku.uplayer.OnADCountListener;
|
import com.youku.uplayer.OnADPlayListener;
|
import com.youku.uplayer.OnCurrentPositionUpdateListener;
|
import com.youku.uplayer.OnHwDecodeErrorListener;
|
import com.youku.uplayer.OnLoadingStatusListener;
|
import com.youku.uplayer.OnNetworkSpeedListener;
|
import com.youku.uplayer.OnRealVideoStartListener;
|
import com.youku.uplayer.OnTimeoutListener;
|
import com.youku.uplayer.OnVideoIndexUpdateListener;
|
|
public abstract class YoukuBasePlayerManager extends IBasePlayerManager
|
implements DetailMessage, OrientationChangeCallback {
|
|
// 挂起时的进度
|
int position = 0;
|
NewSurfaceView surfaceView;
|
SurfaceHolder surfaceHolder;
|
YoukuPlayerView mYoukuPlayerView;
|
PluginManager pluginManager;
|
// IMediaPlayerDelegate mediaPlayerDelegate;
|
public boolean autoPaly = true;// 是否自动播放
|
PluginOverlay mPluginSmallScreenPlay;
|
public Context youkuContext;
|
private boolean isSendPlayBreakEvent = false; // 是否发送播放中断,只发送一�?
|
private YoukuPlayerListener mPlayerListener;
|
// 记录onCreate和onDestroy次数,防止多次启动时在onDestroy时将surfaceholder置空
|
private static int mCreateTime;
|
|
public YoukuBasePlayerManager(Activity context) {
|
super(context);
|
}
|
|
public IMediaPlayerDelegate getMediaPlayerDelegate() {
|
return this.mediaPlayerDelegate;
|
}
|
|
int fullWidth, fullHeight;// , smallWidth, smallHeight;
|
public static Handler handler = new Handler() {
|
|
};
|
// public String id;// 上页传递id video/show
|
public boolean autoPlay = false;// 是否自动播放
|
|
// 是否第一次加载成�?
|
private boolean firstLoaded = false;
|
|
public static final int END_REQUEST = 201;
|
|
public static final int END_PLAY = 202;
|
|
// 因为切换�?g暂停
|
public boolean is3GPause = false;
|
|
int land_height, land_width;
|
int port_height, port_width;
|
public ImageResizer mImageWorker; // unused
|
private static String TAG = "YoukuBaseActivity";
|
private static final boolean DEVELOPER_MODE = false;
|
// PlayerApplication mApplication; //unused
|
// 提示用户登录dialog
|
private Dialog mAdDialogHint = null;
|
// 保存PlayVideo()信息,onActivityResult()使用
|
private PlayVideoInfo mSavedPlayVideoInfo = null;
|
// 等待登录返回,此时不报错
|
private boolean mWaitingLoginResult = false;
|
// 登录提示对话框登录请�?
|
private static final int LOGIN_REQUEST_DIALOG_CODE = 10999;
|
|
/**
|
* 加密视频处理的回调,如果客户端没有调用YoukuPlayer的setIEncryptVideoCallBack设置�?
|
* YoukuBasePlayerManager默认提供一个call调用,用于处理加密视频的回调信息�?
|
*/
|
// public boolean isApiServiceAvailable = false;
|
@Override
|
public void onCreate() {
|
Logger.d("PlayFlow", "YoukuBasePlayerManager->onCreate");
|
if (DEVELOPER_MODE) {
|
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
|
.detectDiskReads().detectDiskWrites().detectNetwork() // 这里可以替换为detectAll()
|
// 就包括了磁盘读写和网络I/O
|
.penaltyLog() // 打印logcat,当然也可以定位到dropbox,通过文件保存相应的log
|
.build());
|
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
|
.detectLeakedSqlLiteObjects() // 探测SQLite数据库操�?
|
.penaltyLog() // 打印logcat
|
.penaltyDeath().build());
|
}
|
|
super.onCreate();
|
|
if (mCreateTime == 0) {
|
// 优酷进入播放器需要重新获取设置的清晰�?
|
Profile.getVideoQualityFromSharedPreferences(getBaseActivity());
|
}
|
++mCreateTime;
|
youkuContext = getBaseActivity();
|
// mImageWorker = (ImageResizer) getImageWorker(this);
|
|
getBaseActivity().setVolumeControlStream(AudioManager.STREAM_MUSIC);
|
|
OfflineStatistics offline = new OfflineStatistics();
|
offline.sendVV(getBaseActivity());
|
|
ACTIVE_TIME = PreferenceUtil.getPreference(getBaseActivity(),
|
"active_time");
|
if (ACTIVE_TIME == null || ACTIVE_TIME.length() == 0) {
|
ACTIVE_TIME = String.valueOf(System.currentTimeMillis());
|
PreferenceUtil.savePreference(getBaseActivity(), "active_time",
|
ACTIVE_TIME);
|
}
|
|
// 初始化设备信�?
|
Profile.GUID = Device.guid;
|
try {
|
YoukuBasePlayerManager.versionName = getBaseActivity()
|
.getPackageManager().getPackageInfo(
|
getBaseActivity().getPackageName(),
|
PackageManager.GET_META_DATA).versionName;
|
} catch (NameNotFoundException e) {
|
YoukuBasePlayerManager.versionName = "3.1";
|
Logger.e(TAG_GLOBAL, e);
|
}
|
|
if (TextUtils.isEmpty(com.baseproject.utils.Profile.User_Agent)) {
|
String plant = UIUtils.isTablet(getBaseActivity()) ? "Youku HD;"
|
: "Youku;";
|
com.baseproject.utils.Profile.initProfile("player", plant
|
+ versionName + ";Android;"
|
+ android.os.Build.VERSION.RELEASE + ";"
|
+ android.os.Build.MODEL, getBaseActivity());
|
}
|
|
// mApplication = PlayerApplication.getPlayerApplicationInstance();
|
flags = getBaseActivity().getApplicationInfo().flags;
|
// 去掉这里的赋值。如果activity被关闭了,这就空指针了。。
|
// com.baseproject.utils.Profile.mContext = getBaseActivity();
|
if (MediaPlayerProxyUtil.isUplayerSupported()) { // -------------------->
|
YoukuBasePlayerManager.isHighEnd = true;
|
// 使用软解
|
PreferenceUtil.savePreference(getBaseActivity(),
|
"isSoftwareDecode", true);
|
com.youku.player.goplay.Profile.setVideoType_and_PlayerType(
|
com.youku.player.goplay.Profile.FORMAT_FLV_HD,
|
getBaseActivity());
|
} else {
|
YoukuBasePlayerManager.isHighEnd = false;
|
com.youku.player.goplay.Profile.setVideoType_and_PlayerType(
|
com.youku.player.goplay.Profile.FORMAT_3GPHD,
|
getBaseActivity());
|
}
|
|
IMediaPlayerDelegate.is = getBaseActivity().getResources()
|
.openRawResource(R.raw.aes); // -------------------------------------->
|
orientationHelper = new DeviceOrientationHelper(getBaseActivity(), this);
|
|
MediaPlayerConfiguration.getInstance().mPlantformController
|
.initIRVideo(getBaseActivity());
|
|
}
|
|
// public ImageWorker getImageWorker(YoukuBasePlayerManager context) {
|
// if (null == mImageWorker) {
|
// final int height = Device.ht;
|
// final int width = Device.wt;
|
// final int shortest = height > width ? width : height;
|
// mImageWorker = new ImageFetcher(context, shortest);
|
// mImageWorker.setImageCache(ImageCache.findOrCreateCache(context,
|
// Utils.IMAGE_CACHE_DIR));
|
// mImageWorker.setImageFadeIn(true);
|
// }
|
// return mImageWorker;
|
// }
|
|
public void initLayoutView(YoukuPlayerView mYoukuPlayerView) { // 在YoukuPlayerView初始化时调用
|
this.mYoukuPlayerView = mYoukuPlayerView;
|
onCreateInitialize(); // 其内初始化了MediaPlayerDelegate
|
// addPlugins();
|
}
|
|
FrameLayout player_holder;
|
private PluginOverlay mPluginFullScreenPlay; // --------------------->全屏插件
|
private PluginADPlay mPluginADPlay; // --------------------->广告插件
|
|
/**
|
*
|
*/
|
protected void addPlugins() {
|
getBaseActivity().runOnUiThread(new Runnable() {
|
|
@Override
|
public void run() {
|
player_holder = (FrameLayout) mYoukuPlayerView
|
.findViewById(R.id.player_holder_all);
|
|
if (mPluginFullScreenPlay != null) {
|
// 全屏插件
|
pluginManager.addPlugin(mPluginFullScreenPlay,
|
player_holder);
|
}
|
|
// 小屏播放控制
|
if (mPluginSmallScreenPlay == null)
|
mPluginSmallScreenPlay = new PluginSimplePlayer( // --------------------->
|
YoukuBasePlayerManager.this, mediaPlayerDelegate);
|
if (mPlayerListener != null) {
|
mPluginSmallScreenPlay.youkuPlayerListener = mPlayerListener;
|
}
|
|
|
// 播放结束�?
|
// 广告播放页面
|
PluginADPlay
|
.setAdMoreBackgroundColor(Profile.PLANTFORM == Plantform.TUDOU);
|
mPluginADPlay = new PluginADPlay(YoukuBasePlayerManager.this,
|
mediaPlayerDelegate);
|
|
// 特殊的播放页�?
|
mYoukuPlayerView.mMediaPlayerDelegate = mediaPlayerDelegate; // ----------------->
|
pluginManager.addYoukuPlayerView(mYoukuPlayerView);
|
pluginManager.addPlugin(mPluginSmallScreenPlay, player_holder);
|
updatePlugin(PLUGIN_SHOW_NOT_SET);
|
}
|
});
|
}
|
|
private boolean isLand() {
|
Display getOrient = getBaseActivity().getWindowManager()
|
.getDefaultDisplay();
|
return getOrient.getWidth() > getOrient.getHeight();
|
}
|
|
@SuppressWarnings("deprecation")
|
private void initPlayAndSurface() {
|
surfaceView = mYoukuPlayerView.surfaceView;
|
mYoukuPlayerView.mMediaPlayerDelegate = mediaPlayerDelegate; // 初始化YoukuPlayerView中的MediaPlayerDelegate实例
|
// mediaPlayerDelegate.mediaPlayer = BaseMediaPlayer.getInstance();
|
// //MediaPlayerDelegate部分初始化
|
mediaPlayerDelegate.mediaPlayer = getMediaPlayer(); // MediaPlayerDelegate部分初始化
|
surfaceHolder = surfaceView.getHolder();
|
surfaceHolder.addCallback(mediaPlayerDelegate.mediaPlayer); // 此处同时把surface
|
// holder句柄赋值给了mediaplayer
|
if (!isHighEnd)
|
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
|
}
|
|
private IBaseMediaPlayer getMediaPlayer() {
|
IBaseMediaPlayer baseMediaPlayer = RemoteInterface.baseMediaPlayer;
|
Logger.d(TAG, "setOnSurfaceStatusChangeListener");
|
baseMediaPlayer
|
.setOnSurfaceStatusChangeListener(new OnSurfaceStatusChangeListener() {
|
|
@Override
|
public void onSurfaceCreated() {
|
Logger.d(TAG, "onSurfaceCreated");
|
for (OnSurfaceStatusChangeListener l : surfaceChangeListeners) {
|
Logger.d(TAG, " for onSurfaceCreated");
|
l.onSurfaceCreated();
|
}
|
}
|
});
|
return baseMediaPlayer;
|
}
|
|
public List<OnSurfaceStatusChangeListener> surfaceChangeListeners = new ArrayList<OnSurfaceStatusChangeListener>();
|
|
public void addOnSurfaceStatusChangeListener(OnSurfaceStatusChangeListener l) {
|
if (l != null) {
|
surfaceChangeListeners.add(l);
|
}
|
}
|
|
public SurfaceHolder getSurfaceHolder() {
|
return surfaceHolder;
|
}
|
|
// 初始化播放区控件
|
public void initPlayerPart() {
|
if (mediaPlayerDelegate != null
|
&& mediaPlayerDelegate.mediaPlayer != null
|
&& mediaPlayerDelegate.mediaPlayer.isListenerInit())
|
return;
|
initPlayAndSurface();
|
initMediaPlayer();
|
}
|
|
private void initMediaPlayer() { // ---------->内部使用
|
// mediaPlayerDelegate.mediaPlayer = BaseMediaPlayer.getInstance();
|
Logger.d(TAG, "initMediaPlayer");
|
mediaPlayerDelegate.mediaPlayer = getMediaPlayer();
|
mediaPlayerDelegate.mediaPlayer
|
.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {
|
|
@Override
|
public void onBufferingUpdate(MediaPlayer mp, int percent) {
|
if (onPause) {
|
mp.release();
|
return;
|
}
|
if (pluginManager == null)
|
return;
|
pluginManager.onBufferingUpdateListener(percent);
|
if (mPlayerListener != null) {
|
mPlayerListener.onBufferingUpdate(percent);
|
}
|
}
|
});
|
mediaPlayerDelegate.mediaPlayer
|
.setOnCompletionListener(new OnCompletionListener() {
|
|
@Override
|
public void onCompletion(MediaPlayer mp) {
|
if (mediaPlayerDelegate != null)
|
mediaPlayerDelegate.onComplete();
|
if (mYoukuPlayerView != null)
|
mYoukuPlayerView.setPlayerBlack();
|
}
|
});
|
mediaPlayerDelegate.mediaPlayer
|
.setOnErrorListener(new OnErrorListener() {
|
|
@Override
|
public boolean onError(MediaPlayer mp, int what, int extra) {
|
Logger.d("PlayFlow",
|
"播放器出现错误 MediaPlayer onError what=" + what
|
+ " !!!");
|
if (mYoukuPlayerView != null)
|
mYoukuPlayerView.setDebugText("出现错误-->onError:"
|
+ what);
|
disposeAdErrorLoss(what);
|
if (isAdPlayError(what)) {
|
Logger.d("PlayFlow", "出现错误:" + what
|
+ " 处理结果:跳过广告播放");
|
return loadingADOverTime();
|
}
|
if (mediaPlayerDelegate != null
|
&& !mYoukuPlayerView.realVideoStart) {
|
getBaseActivity().runOnUiThread(new Runnable() {
|
public void run() {
|
detectPlugin();
|
}
|
});
|
}
|
if (!isSendPlayBreakEvent
|
&& MediaPlayerConfiguration.getInstance()
|
.trackPlayError()
|
&& mYoukuPlayerView.realVideoStart
|
&& mediaPlayerDelegate != null
|
&& mediaPlayerDelegate.videoInfo != null) {
|
final String videoUrl = mediaPlayerDelegate.videoInfo
|
.getWeburl();
|
final TaskSendPlayBreak task = new TaskSendPlayBreak(
|
videoUrl);
|
task.execute();
|
isSendPlayBreakEvent = true;
|
}
|
if (mYoukuPlayerView.realVideoStart
|
&& mediaPlayerDelegate.isLoading)
|
Track.onPlayLoadingEnd();
|
onLoadingFailError();
|
if (pluginManager == null) {
|
Logger.d("PlayFlow", "onError出现错误:" + what
|
+ " pluginManager == null return false");
|
return false;
|
}
|
// Logger.d("PlayFlow", "出现错误:" + what + " 处理结果:去重�?);"
|
int nowPostition = mediaPlayerDelegate
|
.getCurrentPosition();
|
if (nowPostition > 0) {
|
position = nowPostition;
|
}
|
// 系统播放器错误特殊处�?
|
if (what == -38
|
&& !MediaPlayerProxyUtil.isUplayerSupported()) {
|
what = MPPErrorCode.MEDIA_INFO_PLAY_UNKNOW_ERROR;
|
}
|
if (mPlayerListener != null) {
|
mPlayerListener.onError(what, extra);
|
}
|
return pluginManager.onError(what, extra);
|
}
|
|
private boolean isAdPlayError(int what) {
|
return what == MPPErrorCode.MEDIA_INFO_PREPARED_AD_CHECK
|
|| (what == MPPErrorCode.MEDIA_INFO_DATA_SOURCE_ERROR && !mediaPlayerDelegate
|
.isAdvShowFinished())
|
|| (what == MPPErrorCode.MEDIA_INFO_NETWORK_ERROR && mediaPlayerDelegate.isADShowing)
|
|| (what == MPPErrorCode.MEDIA_INFO_NETWORK_CHECK && mediaPlayerDelegate.isADShowing);
|
}
|
|
// 广告损耗埋点使�?
|
private void disposeAdErrorLoss(int what) {
|
if (mediaPlayerDelegate == null
|
|| mediaPlayerDelegate.videoInfo == null) {
|
return;
|
}
|
if (what == MPPErrorCode.MEDIA_INFO_DATA_SOURCE_ERROR
|
&& !mediaPlayerDelegate.videoInfo.isAdvEmpty()) {
|
DisposableStatsUtils.disposeAdLoss(
|
YoukuBasePlayerManager.this
|
.getBaseActivity(),
|
URLContainer.AD_LOSS_STEP4,
|
SessionUnitil.playEvent_session,
|
URLContainer.AD_LOSS_MF);
|
}
|
if (what == MPPErrorCode.MEDIA_INFO_PREPARED_AD_CHECK) {
|
DisposableStatsUtils.disposeAdLoss(
|
YoukuBasePlayerManager.this
|
.getBaseActivity(),
|
URLContainer.AD_LOSS_STEP6,
|
SessionUnitil.playEvent_session,
|
URLContainer.AD_LOSS_MF);
|
}
|
}
|
});
|
|
mediaPlayerDelegate.mediaPlayer
|
.setOnPreparedListener(new OnPreparedListener() {
|
|
@Override
|
public void onPrepared(MediaPlayer mp) {
|
if (pluginManager == null)
|
return;
|
pluginManager.onPrepared();
|
|
}
|
});
|
|
mediaPlayerDelegate.mediaPlayer
|
.setOnSeekCompleteListener(new OnSeekCompleteListener() {
|
|
@Override
|
public void onSeekComplete(MediaPlayer mp) {
|
if (mediaPlayerDelegate != null) {
|
mediaPlayerDelegate.isLoading = false;
|
}
|
Track.setTrackPlayLoading(true);
|
if (pluginManager == null)
|
return;
|
|
getBaseActivity().runOnUiThread(new Runnable() {
|
public void run() {
|
pluginManager.onSeekComplete();
|
|
if (mPlayerListener != null) {
|
mPlayerListener.onSeekComplete();
|
}
|
}
|
});
|
}
|
});
|
mediaPlayerDelegate.mediaPlayer
|
.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() {
|
|
@Override
|
public void onVideoSizeChanged(MediaPlayer mp, int width,
|
int height) {
|
if (pluginManager == null)
|
return;
|
pluginManager.onVideoSizeChanged(width, height);
|
if (mPlayerListener != null) {
|
mPlayerListener.onVideoSizeChanged(width, height);
|
}
|
Logger.e(TAG, "onVideoSizeChanged-->" + width + height);
|
mediaPlayerDelegate.mediaPlayer.updateWidthAndHeight(
|
width, height);
|
|
}
|
});
|
mediaPlayerDelegate.mediaPlayer
|
.setOnTimeOutListener(new OnTimeoutListener() {
|
|
@Override
|
public void onTimeOut() {
|
if (mediaPlayerDelegate == null)
|
return;
|
Logger.d("PlayFlow", "onTimeOut");
|
mediaPlayerDelegate.release();
|
getBaseActivity().runOnUiThread(new Runnable() {
|
|
@Override
|
public void run() {
|
Track.pause();
|
onLoadingFailError();
|
}
|
});
|
if (!isSendPlayBreakEvent
|
&& MediaPlayerConfiguration.getInstance()
|
.trackPlayError()
|
&& mYoukuPlayerView.realVideoStart
|
&& mediaPlayerDelegate != null
|
&& mediaPlayerDelegate.videoInfo != null) {
|
final String videoUrl = mediaPlayerDelegate.videoInfo
|
.getWeburl();
|
final TaskSendPlayBreak task = new TaskSendPlayBreak(
|
videoUrl);
|
task.execute();
|
isSendPlayBreakEvent = true;
|
}
|
|
getBaseActivity().runOnUiThread(new Runnable() {
|
public void run() {
|
if (pluginManager == null)
|
return;
|
pluginManager.onTimeout();
|
if (mPlayerListener != null) {
|
mPlayerListener.onTimeOut();
|
}
|
}
|
});
|
}
|
|
@Override
|
public void onNotifyChangeVideoQuality() {
|
if (pluginManager == null)
|
return;
|
Logger.d("PlayFlow", "onNotifyChangeVideoQuality");
|
pluginManager.onNotifyChangeVideoQuality();
|
if (mPlayerListener != null) {
|
mPlayerListener.onNotifyChangeVideoQuality();
|
}
|
}
|
});
|
mediaPlayerDelegate.mediaPlayer
|
.setOnCurrentPositionUpdateListener(new OnCurrentPositionUpdateListener() {
|
|
@Override
|
public void onCurrentPositionUpdate(
|
final int currentPosition) {
|
if (pluginManager == null)
|
return;
|
getBaseActivity().runOnUiThread(new Runnable() {
|
|
@Override
|
public void run() {
|
try {
|
pluginManager
|
.onCurrentPositionChange(currentPosition);
|
} catch (Exception e) {
|
}
|
if (mPlayerListener != null) {
|
mPlayerListener.onCurrentPositionUpdate(currentPosition);
|
}
|
}
|
});
|
}
|
});
|
|
if (PlayerUtil.useUplayer()) {
|
Logger.d(TAG, "setOnADPlayListener");
|
mediaPlayerDelegate.mediaPlayer
|
.setOnADPlayListener(new OnADPlayListener() {
|
|
@Override
|
public boolean onStartPlayAD(int index) {
|
Logger.d("PlayFlow", "onstartPlayAD");
|
Logger.d(TAG, "onstartPlayAD");
|
|
|
Track.onAdStart(YoukuPlayerConfiguration.context,
|
mediaPlayerDelegate);
|
String vid = "";
|
if (mediaPlayerDelegate != null
|
&& mediaPlayerDelegate.videoInfo != null)
|
vid = mediaPlayerDelegate.videoInfo.getVid();
|
Track.trackAdLoad(getBaseActivity(), vid);
|
mYoukuPlayerView.setPlayerBlackGone();
|
if (mediaPlayerDelegate != null) {
|
mediaPlayerDelegate.isADShowing = true;
|
mediaPlayerDelegate.isAdStartSended = true;
|
if (mediaPlayerDelegate.videoInfo != null
|
&& mediaPlayerDelegate.videoInfo.videoAdvInfo != null) {
|
if (mediaPlayerDelegate.videoInfo.videoAdvInfo.SKIP != null
|
&& mediaPlayerDelegate.videoInfo.videoAdvInfo.SKIP
|
.equals("1")) {
|
if (null != mPluginADPlay) {
|
mPluginADPlay.setSkipVisible(true);
|
}
|
}
|
|
}
|
}
|
Logger.d(TAG, "PLUGIN_SHOW_AD_PLAY");
|
updatePlugin(PLUGIN_SHOW_AD_PLAY);
|
if (null != pluginManager) {
|
getBaseActivity().runOnUiThread(new Runnable() {
|
public void run() {
|
pluginManager.onLoaded();
|
if (null != mPluginADPlay) {
|
mPluginADPlay.setVisible(true);
|
}
|
}
|
});
|
}
|
if (mediaPlayerDelegate != null
|
&& mediaPlayerDelegate.videoInfo != null) {
|
AnalyticsWrapper.adPlayStart(getBaseActivity(),
|
mediaPlayerDelegate.videoInfo);
|
}
|
try {
|
DisposableStatsUtils
|
.disposeSUS(mediaPlayerDelegate.videoInfo);
|
} catch (NullPointerException e) {
|
Logger.e("sgh", e.toString());
|
}
|
|
if (mediaPlayerDelegate.videoInfo
|
.getCurrentAdvInfo() != null
|
&& (mediaPlayerDelegate.videoInfo
|
.getCurrentAdvInfo().VSC == null || mediaPlayerDelegate.videoInfo
|
.getCurrentAdvInfo().VSC
|
.equalsIgnoreCase(""))) {
|
DisposableStatsUtils
|
.disposeVC(mediaPlayerDelegate.videoInfo);
|
}
|
|
return false;
|
}
|
|
@Override
|
public boolean onEndPlayAD(int index) {
|
Logger.d("PlayFlow", "onEndPlayAD");
|
|
if (mediaPlayerDelegate != null) {
|
mediaPlayerDelegate.isADShowing = false;
|
}
|
Track.onAdEnd();
|
|
if (mediaPlayerDelegate != null
|
&& mediaPlayerDelegate.videoInfo != null) {
|
AnalyticsWrapper.adPlayEnd(getBaseActivity(),
|
mediaPlayerDelegate.videoInfo);
|
}
|
// 必须在removePlayedAdv之前调用
|
DisposableStatsUtils
|
.disposeSUE(mediaPlayerDelegate.videoInfo);
|
// 当前广告成功播放完成后,从容器中移除
|
mediaPlayerDelegate.videoInfo.removePlayedAdv();
|
if (mediaPlayerDelegate.videoInfo.isCached()) {
|
ICacheInfo download = IMediaPlayerDelegate.mICacheInfo;
|
if (download != null) {
|
if (download
|
.isDownloadFinished(mediaPlayerDelegate.videoInfo
|
.getVid())) {
|
VideoCacheInfo downloadInfo = download
|
.getDownloadInfo(mediaPlayerDelegate.videoInfo
|
.getVid());
|
if (YoukuBasePlayerManager.isHighEnd) {
|
mediaPlayerDelegate.videoInfo.cachePath = PlayerUtil
|
.getM3u8File(downloadInfo.savePath
|
+ "youku.m3u8");
|
}
|
}
|
}
|
}
|
|
Logger.e(TAG, "onEndPlayAD");
|
return false;
|
}
|
});
|
mediaPlayerDelegate.mediaPlayer
|
.setOnADCountListener(new OnADCountListener() {
|
|
@Override
|
public void onCountUpdate(final int count) {
|
|
position = mediaPlayerDelegate.getCurrentPosition();
|
final int currentPosition = mediaPlayerDelegate
|
.getCurrentPosition() / 1000;
|
getBaseActivity().runOnUiThread(new Runnable() {
|
public void run() {
|
mPluginADPlay.notifyUpdate(count);
|
mYoukuPlayerView.resizeMediaPlayer(false);
|
|
DisposableStatsUtils.disposeSU(
|
mediaPlayerDelegate.videoInfo,
|
currentPosition);
|
}
|
});
|
|
}
|
});
|
mediaPlayerDelegate.mediaPlayer
|
.setOnNetworkSpeedListener(new OnNetworkSpeedListener() {
|
|
@Override
|
public void onSpeedUpdate(final int count) {
|
if (null != pluginManager) {
|
getBaseActivity().runOnUiThread(new Runnable() {
|
public void run() {
|
pluginManager.onNetSpeedChange(count);
|
if (mPlayerListener != null) {
|
mPlayerListener.onNetworkSpeedChanged(count);
|
}
|
}
|
});
|
}
|
}
|
});
|
}
|
mediaPlayerDelegate.mediaPlayer
|
.setOnRealVideoStartListener(new OnRealVideoStartListener() {
|
|
@Override
|
public void onRealVideoStart() {
|
if (onPause)
|
return;
|
// 这个listener的理解是正片开始播放的时候调�?这个时候的
|
// mediaPlayerDelegate为空的概率比较大
|
Logger.d("PlayFlow", "正片开始播放,没有错误");
|
Track.isRealVideoStarted = true;
|
String vid = "";
|
if (mediaPlayerDelegate != null
|
&& mediaPlayerDelegate.videoInfo != null)
|
vid = mediaPlayerDelegate.videoInfo.getVid();
|
Track.onRealVideoFirstLoadEnd(getBaseActivity(), vid);
|
localStartSetDuration();
|
sentonVVBegin();
|
mYoukuPlayerView.setPlayerBlackGone();
|
if (mediaPlayerDelegate != null
|
&& mediaPlayerDelegate.videoInfo != null) {
|
mediaPlayerDelegate.isADShowing = false;
|
Logger.e(TAG, "onRealVideoStart"
|
+ mediaPlayerDelegate.videoInfo.IsSendVV);
|
} else {
|
Logger.e(TAG,
|
"onRealVideoStart mediaPlayerDelegate空指");
|
}
|
mediaPlayerDelegate.isLoading = false;
|
if (null != pluginManager) {
|
getBaseActivity().runOnUiThread(new Runnable() {
|
public void run() {
|
detectPlugin();
|
pluginManager.onRealVideoStart();
|
pluginManager.onLoaded();
|
//Fix 底层没有重写setonpreparedlistener,所以无法收到这个事件,但是我要是注册又怕引发新的异常。
|
//所以暂时跟这个事件合并
|
if (mPlayerListener != null) {
|
mPlayerListener.onPrepared();
|
}
|
if (mPlayerListener != null) {
|
mPlayerListener.onRealVideoStart();
|
}
|
}
|
});
|
}
|
|
if (mediaPlayerDelegate != null) {
|
if (mediaPlayerDelegate.videoInfo != null
|
&& mediaPlayerDelegate.videoInfo
|
.getProgress() > 1000
|
&& !mediaPlayerDelegate.videoInfo.isHLS) {
|
mediaPlayerDelegate
|
.seekTo(mediaPlayerDelegate.videoInfo
|
.getProgress());
|
Logger.e(
|
"PlayFlow",
|
"SEEK TO"
|
+ mediaPlayerDelegate.videoInfo
|
.getProgress());
|
}
|
}
|
|
}
|
});
|
mediaPlayerDelegate.mediaPlayer
|
.setOnLoadingStatusListener(new OnLoadingStatusListener() {
|
|
@Override
|
public void onStartLoading() {
|
Logger.e(TAG, "onStartLoading");
|
if (pluginManager == null || onPause)
|
return;
|
Track.onPlayLoadingStart(mediaPlayerDelegate.mediaPlayer
|
.getCurrentPosition());
|
if (mediaPlayerDelegate != null) {
|
mediaPlayerDelegate.isLoading = true;
|
}
|
getBaseActivity().runOnUiThread(new Runnable() {
|
|
@Override
|
public void run() {
|
if (pluginManager == null)
|
return;
|
pluginManager.onLoading();
|
if (mPlayerListener != null) {
|
mPlayerListener.onStartBuffering();
|
}
|
if (PlayerUtil.useUplayer()
|
&& !mediaPlayerDelegate.videoInfo
|
.isUseCachePath())
|
mediaPlayerDelegate.loadingPause();
|
}
|
|
});
|
}
|
|
@Override
|
public void onEndLoading() {
|
|
getBaseActivity().runOnUiThread(new Runnable() {
|
|
@Override
|
public void run() {
|
if (pluginManager == null)
|
return;
|
pluginManager.onLoaded();
|
if (mPlayerListener != null) {
|
mPlayerListener.onEndBuffering();
|
}
|
}
|
});
|
Track.onPlayLoadingEnd();
|
if (null != mediaPlayerDelegate) {
|
mediaPlayerDelegate.isStartPlay = true;
|
mediaPlayerDelegate.isLoading = false;
|
if (null != mediaPlayerDelegate.videoInfo) {
|
id = mediaPlayerDelegate.videoInfo.getVid();
|
mediaPlayerDelegate.videoInfo.isFirstLoaded = true;
|
}
|
// 本地mp4不控制自动开�?
|
if (PlayerUtil.useUplayer()
|
&& !mediaPlayerDelegate.videoInfo
|
.isUseCachePath())
|
mediaPlayerDelegate.start();
|
}
|
|
if (!firstLoaded
|
&& !isFromLocal()
|
&& !PreferenceUtil.getPreferenceBoolean(
|
YoukuBasePlayerManager.this
|
.getBaseActivity(),
|
"video_lock", false)) {
|
if (mediaPlayerDelegate != null
|
&& !mediaPlayerDelegate.isFullScreen
|
&& mediaPlayerDelegate.videoInfo != null
|
&& StaticsUtil.PLAY_TYPE_LOCAL
|
.equals(mediaPlayerDelegate.videoInfo
|
.getPlayType())
|
|| !PlayerUtil
|
.isYoukuTablet(YoukuBasePlayerManager.this
|
.getBaseActivity())) {
|
YoukuBasePlayerManager.this
|
.getBaseActivity()
|
.setRequestedOrientation(
|
ActivityInfo.SCREEN_ORIENTATION_SENSOR);
|
}
|
Logger.d("lelouch",
|
"onLoaded setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);");
|
firstLoaded = true;
|
}
|
|
}
|
});
|
mediaPlayerDelegate.mediaPlayer
|
.setOnPlayHeartListener(new OnPlayHeartListener() {
|
|
@Override
|
public void onPlayHeart() {
|
if (mediaPlayerDelegate != null
|
&& mediaPlayerDelegate.videoInfo != null)
|
Track.trackPlayHeart(getBaseActivity(),
|
mediaPlayerDelegate.videoInfo,
|
mediaPlayerDelegate.isFullScreen);
|
}
|
});
|
mediaPlayerDelegate.mediaPlayer
|
.setOnVideoIndexUpdateListener(new OnVideoIndexUpdateListener() {
|
|
@Override
|
public void onVideoIndexUpdate(int currentIndex, int ip) {
|
Logger.d("PlayFlow", "onVideoIndexUpdate:"
|
+ currentIndex + " " + ip);
|
mPlayerListener.onVideoIndexUpdate(currentIndex, ip);
|
|
if (mediaPlayerDelegate != null
|
&& mediaPlayerDelegate.videoInfo != null)
|
Track.onVideoIndexUpdate(getBaseActivity(),
|
currentIndex, ip,
|
mediaPlayerDelegate.videoInfo
|
.getCurrentQuality());
|
}
|
});
|
mediaPlayerDelegate.mediaPlayer
|
.setOnHwDecodeErrorListener(new OnHwDecodeErrorListener() {
|
|
@Override
|
public void OnHwDecodeError() {
|
Logger.d("PlayFlow", "OnHwDecodeError");
|
// DisposableHttpTask task = new DisposableHttpTask(
|
// URLContainer.getHwErrorUrl());
|
// task.setRequestMethod(DisposableHttpTask.METHOD_POST);
|
// task.start();
|
MediaPlayerConfiguration.getInstance()
|
.setUseHardwareDecode(false);
|
}
|
});
|
}
|
|
protected void sentonVVBegin() {
|
if (null != mediaPlayerDelegate) {
|
mediaPlayerDelegate.isStartPlay = true;
|
if (null != mediaPlayerDelegate.videoInfo
|
&& !mediaPlayerDelegate.videoInfo.isFirstLoaded) {
|
id = mediaPlayerDelegate.videoInfo.getVid();
|
mediaPlayerDelegate.videoInfo.isFirstLoaded = true;
|
if (!mediaPlayerDelegate.videoInfo.IsSendVV) {
|
mediaPlayerDelegate.onVVBegin();
|
}
|
}
|
}
|
}
|
|
protected void localStartSetDuration() { // -------------内部使用
|
if (mediaPlayerDelegate == null
|
|| mediaPlayerDelegate.videoInfo == null)
|
return;
|
if (StaticsUtil.PLAY_TYPE_LOCAL.equals(mediaPlayerDelegate.videoInfo
|
.getPlayType())) {
|
|
mediaPlayerDelegate.videoInfo
|
.setDurationMills(mediaPlayerDelegate.mediaPlayer
|
.getDuration());
|
Logger.e("PlayFow", "本地视频读取时间成功 :"
|
+ mediaPlayerDelegate.mediaPlayer.getDuration());
|
getBaseActivity().runOnUiThread(new Runnable() {
|
|
@Override
|
public void run() {
|
if (pluginManager != null) {
|
pluginManager.onVideoInfoGetted();
|
}
|
if (mPlayerListener != null) {
|
mPlayerListener.onGetInfoSuccess();
|
}
|
}
|
});
|
}
|
}
|
|
// 锁屏时系统状�?
|
boolean isPause;
|
|
private DeviceOrientationHelper orientationHelper;
|
|
@Override
|
public void onPause() {
|
Logger.d("NewDetailActivity#onPause()", "onpause");
|
onPause = true;
|
super.onPause();
|
// if(!ApiManager.getInstance().getApiServiceState())return;
|
if (pluginManager != null) {
|
// 通知插件Activity进入onPause
|
pluginManager.onPause();
|
}
|
if (mYoukuPlayerView == null)
|
return;
|
if (!mYoukuPlayerView.firstOnloaded) {
|
pauseBeforeLoaded = true;
|
}
|
if (null != handler)
|
handler.removeCallbacksAndMessages(null);
|
if (mediaPlayerDelegate != null && mediaPlayerDelegate.hasRight) {
|
try {
|
// 19575 解决优酷挂起后一直loading�?
|
// if (Profile.PLANTFORM != Plantform.YOUKU)
|
// pluginManager.onLoaded();
|
} catch (Exception e) {
|
}
|
int nowPostition = mediaPlayerDelegate.getCurrentPosition();
|
if (nowPostition > 0) {
|
position = nowPostition;
|
}
|
mediaPlayerDelegate.isPause = true;
|
mediaPlayerDelegate.release();
|
mediaPlayerDelegate.isLoading = false;
|
if (mediaPlayerDelegate.videoInfo != null)
|
mediaPlayerDelegate.videoInfo.isFirstLoaded = false;
|
mediaPlayerDelegate.onChangeOrient = true;
|
}
|
if (surfaceHolder != null && mediaPlayerDelegate.mediaPlayer != null
|
&& !mediaPlayerDelegate.hasRight) {
|
surfaceHolder.removeCallback(mediaPlayerDelegate.mediaPlayer);
|
}
|
if (mYoukuPlayerView != null) {
|
mYoukuPlayerView.setPlayerBlack();
|
}
|
Track.pause();
|
}
|
|
@Override
|
public void onStop() {
|
super.onStop();
|
|
}
|
|
@Override
|
public void onResume() {
|
Logger.d("PlayFlow", "YoukuBasePlayerManager->onResume()");
|
onPause = false;
|
getBaseActivity().setTitle("");
|
super.onResume();
|
// if(!ApiManager.getInstance().getApiServiceState()){
|
// showApiServiceNotAvailableDialog();
|
// return;
|
// }else{
|
if (null != mYoukuPlayerView) {
|
mYoukuPlayerView.onConfigrationChange();
|
}
|
// 无版�?
|
if (mediaPlayerDelegate != null && !mediaPlayerDelegate.hasRight)
|
return;
|
|
if (null != handler) {
|
handler.postDelayed(new Runnable() {
|
|
@Override
|
public void run() {
|
surfaceHolder = surfaceView.getHolder();
|
// 解决android4.4上有虚拟键的设备锁屏后播放没有调用surfaceChanged导致画面比例失常
|
if (UIUtils.hasKitKat()) {
|
surfaceView.requestLayout();
|
}
|
if (null != mediaPlayerDelegate && null != surfaceHolder) {
|
if (!mediaPlayerDelegate.isAdvShowFinished()) {
|
if (mediaPlayerDelegate.mAdType == AdType.AD_TYPE_VIDEO) {
|
updatePlugin(PLUGIN_SHOW_AD_PLAY);
|
if (null != mPluginADPlay) {
|
mPluginADPlay.showPlayIcon();
|
}
|
} else if (mediaPlayerDelegate.mAdType == AdType.AD_TYPE_IMAGE
|
&& !isImageADShowing) {
|
updatePlugin(PLUGIN_SHOW_NOT_SET);
|
}
|
|
} else {
|
// 解决前贴广告播放完,正片还没播放时挂起,回来不能播放问题
|
if (mPluginADPlay != null
|
&& mPluginADPlay.getVisibility() == View.VISIBLE
|
&& mPluginADPlay.isCountUpdateVisible()) {
|
mPluginADPlay.showPlayIcon();
|
}
|
}
|
}
|
|
}
|
}, 100);
|
}
|
|
callPluginBack();
|
mWaitingLoginResult = false;
|
|
mediaPlayerDelegate.dialogShowing = false;
|
mediaPlayerDelegate.goFor3gSetting = false;
|
if (mediaPlayerDelegate.isFullScreen) {
|
getBaseActivity().getWindow().setFlags(
|
WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
} else {
|
changeConfiguration(new Configuration());
|
}
|
|
// }
|
|
}
|
|
private void callPluginBack() { // ------------------->内部使用
|
if (null != mPluginSmallScreenPlay)
|
mPluginSmallScreenPlay.back();
|
|
if (null != mPluginFullScreenPlay) {
|
mPluginFullScreenPlay.back();
|
}
|
// 全屏广告显示时和登录提示dialog显示时,不上报error
|
if (pauseBeforeLoaded
|
&& !isImageADShowing
|
&& !(mAdDialogHint != null && mAdDialogHint.isShowing() && !mWaitingLoginResult)) {
|
pluginManager.onError(MPPErrorCode.MEDIA_INFO_PREPARE_ERROR, 0);
|
if (mPlayerListener != null) {
|
mPlayerListener.onError(MPPErrorCode.MEDIA_INFO_PREPARE_ERROR, 0);
|
}
|
}
|
// 位置要在back()之后
|
pauseBeforeLoaded = false;
|
}
|
|
@Override
|
public void onDestroy() {
|
super.onDestroy();
|
Logger.d("PlayFlow", "YoukuBasePlayerManager->onDestroy");
|
if (mediaPlayerDelegate != null) {
|
// mediaPlayerDelegate.onVVEnd();
|
|
Track.forceEnd(getBaseActivity(), mediaPlayerDelegate.videoInfo,
|
mediaPlayerDelegate.isFullScreen);
|
Track.clear();
|
try {
|
if (surfaceHolder != null
|
&& mediaPlayerDelegate.mediaPlayer != null)
|
surfaceHolder
|
.removeCallback(mediaPlayerDelegate.mediaPlayer);
|
|
if (null != handler)
|
handler.removeCallbacksAndMessages(null);
|
} catch (Exception e) {
|
|
}
|
if (orientationHelper != null) {
|
orientationHelper.disableListener();
|
orientationHelper.setCallback(null);
|
orientationHelper = null;
|
}
|
|
mediaPlayerDelegate.mediaPlayer.setOnPreparedListener(null);
|
mediaPlayerDelegate.mediaPlayer.clearListener();
|
mediaPlayerDelegate.mediaPlayer = null;
|
// RemoteInterface.clear();
|
mPluginSmallScreenPlay = null;
|
pluginManager = null;
|
mPlayerListener = null;
|
mPluginFullScreenPlay = null;
|
mediaPlayerDelegate = null;
|
surfaceView = null;
|
surfaceHolder = null;
|
mYoukuPlayerView = null;
|
youkuContext = null;
|
if (--mCreateTime <= 0)
|
EGLUtil.setSurfaceHolder(null);
|
}
|
}
|
|
public void playNoRightVideo(String mUri) { // unused
|
|
if (mUri == null || mUri.trim().equals("")) {
|
Profile.from = Profile.PHONE;
|
return;
|
}
|
if (mUri.startsWith("youku://")) {
|
mUri = mUri.replaceFirst("youku://", "http://");
|
} else {
|
Profile.from = Profile.PHONE;
|
return;
|
}
|
// 不能再初始化一遍,因为已经初始化过�?
|
// initPlayAndSurface();
|
if (mediaPlayerDelegate.videoInfo == null)
|
mediaPlayerDelegate.videoInfo = new VideoUrlInfo();
|
final int queryPosition = mUri.indexOf("?");
|
if (queryPosition != -1) {
|
String url = new String(URLUtil.decode(mUri.substring(0,
|
queryPosition).getBytes()));
|
if (PlayerUtil.useUplayer()) {
|
StringBuffer m3u8Url = new StringBuffer();
|
m3u8Url.append("#PLSEXTM3U\n#EXT-X-TARGETDURATION:10000\n")
|
.append("#EXT-X-VERSION:2\n#EXT-X-DISCONTINUITY\n")
|
.append("#EXTINF:10000\n").append(url)
|
.append("\n#EXT-X-ENDLIST\n");
|
mediaPlayerDelegate.videoInfo.setUrl(m3u8Url.toString());
|
} else {
|
mediaPlayerDelegate.videoInfo.setUrl(url);
|
}
|
String[] params = mUri.substring(queryPosition + 1).split("&");
|
for (int i = 0; i < params.length; i++) {
|
String[] param = params[i].split("=");
|
if (param[0].trim().equals("vid")) {
|
mediaPlayerDelegate.videoInfo.setVid(param[1].trim());
|
}
|
if (param[0].trim().equals("title")) {
|
try {
|
mediaPlayerDelegate.videoInfo.setTitle(URLDecoder
|
.decode(param[1].trim(), "UTF-8"));
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
} else {
|
return;
|
}
|
onParseNoRightVideoSuccess();
|
}
|
|
public void onParseNoRightVideoSuccess() { // unused
|
if (PlayerUtil.useUplayer()) {
|
Profile.setVideoType_and_PlayerType(Profile.FORMAT_FLV_HD,
|
getBaseActivity());
|
} else {
|
Profile.setVideoType_and_PlayerType(Profile.FORMAT_3GPHD,
|
getBaseActivity());
|
}
|
Profile.from = Profile.PHONE_BROWSER;
|
pluginManager.onVideoInfoGetted();
|
if (mPlayerListener != null) {
|
mPlayerListener.onGetInfoSuccess();
|
}
|
pluginManager.onChangeVideo();
|
goFullScreen();
|
}
|
|
public void onConfigurationChanged(Configuration newConfig) {
|
// super.onConfigurationChanged(newConfig);
|
Logger.d("PlayFlow", "onConfigurationChange:" + newConfig.orientation);
|
if (mediaPlayerDelegate == null)
|
return;
|
if (Profile.PHONE_BROWSER == Profile.from
|
|| mediaPlayerDelegate.videoInfo != null
|
&& (StaticsUtil.PLAY_TYPE_LOCAL
|
.equals(mediaPlayerDelegate.videoInfo.getPlayType()) || mediaPlayerDelegate.videoInfo.isHLS))
|
return;
|
//20160831取消对平板的区别对待
|
// if (mediaPlayerDelegate.isFullScreen
|
// && PlayerUtil.isYoukuTablet(YoukuBasePlayerManager.this
|
// .getBaseActivity())) {
|
// return;
|
// }
|
// 横屏有两种情�?�?
|
if (isLand()) {
|
fullWidth = getBaseActivity().getWindowManager()
|
.getDefaultDisplay().getWidth();
|
Logger.d("lelouch", "isLand");
|
Logger.d("PlayFlow",
|
"isTablet:" + PlayerUtil.isYoukuTablet(getBaseActivity()));
|
// 不是平板去全�?
|
//20160831取消对平板的区别对待
|
onFullscreenListener();
|
getBaseActivity().closeOptionsMenu();
|
setPlayerFullScreen(false);
|
getBaseActivity().runOnUiThread(new Runnable() {
|
|
@Override
|
public void run() {
|
mYoukuPlayerView.onConfigrationChange();
|
}
|
});
|
|
if (null != handler) {
|
handler.postDelayed(new Runnable() {
|
|
@Override
|
public void run() {
|
if (mAdDialogHint != null
|
&& mAdDialogHint.isShowing()) {
|
mAdDialogHint.cancel();
|
mAdDialogHint = null;
|
}
|
}
|
}, 100);
|
}
|
return;
|
|
// getBaseActivity().setRequestedOrientation(
|
// ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
// setPadHorizontalLayout();
|
// if (isImageADShowing) {
|
// // 如果已经在显示暂停广告了,就不再更新插件。
|
// // showPauseAdv();
|
// } else {
|
// updatePlugin(!mediaPlayerDelegate.isAdvShowFinished() ? PLUGIN_SHOW_AD_PLAY
|
// : PLUGIN_SHOW_NOT_SET);
|
// }
|
// Logger.d("PlayFlow", "平板去横屏小播放");
|
// layoutHandler.removeCallbacksAndMessages(null);
|
|
} else {
|
// if(Profile.PLANTFORM == Plantform.TUDOU && onPause) return;
|
goSmall();
|
if (orientationHelper == null)
|
return;
|
if (UIUtils.hasKitKat()) {
|
showSystemUI(mPluginADPlay);
|
}
|
orientationHelper.fromUser = false;
|
if (isImageADShowing) {
|
// 如果已经在显示暂停广告了,就不再更新插件。
|
// showPauseAdv();
|
} else {
|
updatePlugin(!mediaPlayerDelegate.isAdvShowFinished() ? PLUGIN_SHOW_AD_PLAY
|
: PLUGIN_SHOW_NOT_SET);
|
}
|
// fitsSystemWindows为true时,转小屏,会保留横屏的padding,所以需重置
|
player_holder.setPadding(0, 0, 0, 0);
|
Logger.d("PlayFlow", "去竖屏小播放");
|
}
|
|
if (mAdDialogHint != null && mAdDialogHint.isShowing()) {
|
mAdDialogHint.cancel();
|
mAdDialogHint = null;
|
}
|
}
|
|
public abstract void setPadHorizontalLayout();
|
|
protected void changeConfiguration(Configuration newConfig) {
|
// super.onConfigurationChanged(newConfig);
|
Logger.d("PlayFlow", "changeConfiguration");
|
if (Profile.PHONE_BROWSER == Profile.from
|
|| mediaPlayerDelegate.videoInfo != null
|
&& (StaticsUtil.PLAY_TYPE_LOCAL
|
.equals(mediaPlayerDelegate.videoInfo.getPlayType()) || mediaPlayerDelegate.videoInfo.isHLS))
|
return;
|
//20160831取消对平板的区别对待
|
// if (mediaPlayerDelegate.isFullScreen
|
// && PlayerUtil.isYoukuTablet(YoukuBasePlayerManager.this
|
// .getBaseActivity())) {
|
// return;
|
// }
|
// 横屏有两种情�?�?
|
if (isLand()) {
|
fullWidth = getBaseActivity().getWindowManager()
|
.getDefaultDisplay().getWidth();
|
Logger.d("lelouch", "isLand");
|
Logger.d("PlayFlow",
|
"isTablet:" + PlayerUtil.isYoukuTablet(getBaseActivity()));
|
// 不是平板去全�?
|
|
onFullscreenListener();
|
getBaseActivity().closeOptionsMenu();
|
setPlayerFullScreen(false);
|
getBaseActivity().runOnUiThread(new Runnable() {
|
|
@Override
|
public void run() {
|
mYoukuPlayerView.onConfigrationChange();
|
}
|
});
|
// detectPlugin();
|
return;
|
// getBaseActivity().setRequestedOrientation(
|
// ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
// setPadHorizontalLayout();
|
// updatePlugin(!mediaPlayerDelegate.isAdvShowFinished() ? PLUGIN_SHOW_AD_PLAY
|
// : PLUGIN_SHOW_NOT_SET);
|
// Logger.d("PlayFlow", "平板去横屏小播放");
|
// layoutHandler.removeCallbacksAndMessages(null);
|
|
} else {
|
// if(Profile.PLANTFORM == Plantform.TUDOU && onPause) return;
|
goSmall();
|
updatePlugin(!mediaPlayerDelegate.isAdvShowFinished() ? PLUGIN_SHOW_AD_PLAY
|
: PLUGIN_SHOW_NOT_SET);
|
Logger.d("PlayFlow", "去竖屏小播放");
|
}
|
|
}
|
|
// private void setVerticalPlayerSmall(boolean setRequestOreitation) {
|
// if(setRequestOreitation)
|
// setScreenPortrait();
|
|
private final int GET_LAND_PARAMS = 800; // ------>内部使用
|
private final int GET_PORT_PARAMS = 801;
|
private Handler layoutHandler = new Handler() {
|
|
@Override
|
public void handleMessage(Message msg) {
|
switch (msg.what) {
|
// 横屏
|
case GET_LAND_PARAMS: {
|
getBaseActivity().getWindow().clearFlags(
|
WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
mYoukuPlayerView.resizeMediaPlayer(false);
|
changeConfiguration(new Configuration());
|
if (null != mediaPlayerDelegate)
|
mediaPlayerDelegate.currentOriention = Orientation.LAND;
|
break;
|
}
|
// 竖屏
|
case GET_PORT_PARAMS: {
|
getBaseActivity().getWindow().clearFlags(
|
WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
if (PlayerUtil.isYoukuTablet(YoukuBasePlayerManager.this
|
.getBaseActivity())) {
|
//orientationHelper.disableListener();
|
} else {
|
// Bug 7019 在onConfigurationChanged时videoinfo还没有替换成新的导致
|
}
|
if (mediaPlayerDelegate != null
|
&& mediaPlayerDelegate.videoInfo != null
|
&& StaticsUtil.PLAY_TYPE_LOCAL
|
.equals(mediaPlayerDelegate.videoInfo
|
.getPlayType())) {
|
getBaseActivity().getWindow().setFlags(
|
WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
mediaPlayerDelegate.currentOriention = Orientation.LAND;
|
return;
|
}
|
getBaseActivity().setRequestedOrientation(
|
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
if (null != mediaPlayerDelegate)
|
mediaPlayerDelegate.currentOriention = Orientation.VERTICAL;
|
break;
|
}
|
}
|
if (mediaPlayerDelegate == null)
|
return;
|
if (mediaPlayerDelegate.isFullScreen) {
|
mYoukuPlayerView.setBackgroundResource(R.color.black);
|
} else {
|
mYoukuPlayerView.setBackgroundResource(R.color.white);
|
}
|
}
|
};
|
|
public void setPlayerFullScreen(final boolean lockSensor) {
|
if (mediaPlayerDelegate == null)
|
return;
|
if (lockSensor) {
|
if (UIUtils.hasGingerbread()
|
&& !PreferenceUtil.getPreferenceBoolean(getBaseActivity(),
|
"video_lock", false)) {
|
getBaseActivity().setRequestedOrientation(
|
ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
|
} else {
|
getBaseActivity().setRequestedOrientation(
|
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
}
|
}
|
|
mediaPlayerDelegate.onChangeOrient = true;
|
mediaPlayerDelegate.isFullScreen = true;
|
if (isImageADShowing) {
|
// 如果已经在显示暂停广告了,就不再更新插件。
|
// showPauseAdv();
|
} else {
|
updatePlugin(!mediaPlayerDelegate.isAdvShowFinished() ? PLUGIN_SHOW_AD_PLAY
|
: PLUGIN_SHOW_NOT_SET);
|
}
|
|
mYoukuPlayerView.setFullscreenBack();
|
// 这里把他修改成为fillpearent
|
getBaseActivity().runOnUiThread(new Runnable() {
|
|
@Override
|
public void run() {
|
getBaseActivity().getWindow().setFlags(
|
WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
}
|
});
|
}
|
|
public void goFullScreen() {
|
if (null != mediaPlayerDelegate)
|
mediaPlayerDelegate.isFullScreen = true;
|
onFullscreenListener();
|
if (PlayerUtil.isYoukuTablet(getBaseActivity())) {
|
//setPlayerFullScreen(true);
|
} else {
|
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
|
}
|
if (Profile.from != Profile.PHONE_BROWSER
|
&& !PlayerUtil.isYoukuTablet(getBaseActivity())
|
&& mediaPlayerDelegate != null
|
&& (mediaPlayerDelegate.videoInfo == null || !StaticsUtil.PLAY_TYPE_LOCAL
|
.equals(mediaPlayerDelegate.videoInfo.getPlayType()))) {
|
orientationHelper.enableListener();
|
orientationHelper.isFromUser();
|
}
|
setPlayerFullScreen(true);
|
}
|
|
private void setPlayerSmall(boolean setRequsetOreitation) { // -------》内部使用
|
mediaPlayerDelegate.isFullScreen = false;
|
// if (PlayerUtil.isYoukuTablet(this)
|
// && isLand()) {
|
// layoutHandler.sendEmptyMessageDelayed(GET_LAND_PARAMS, 0);
|
// } else {
|
Message message = layoutHandler.obtainMessage();
|
message.what = GET_PORT_PARAMS;
|
message.obj = setRequsetOreitation;
|
|
layoutHandler.sendMessage(message);
|
|
mYoukuPlayerView.setVerticalLayout();
|
// }
|
}
|
|
public void goSmall() {
|
onSmallscreenListener();
|
setPluginHolderPaddingZero();
|
if (mediaPlayerDelegate == null)
|
return;
|
mediaPlayerDelegate.isFullScreen = false;
|
|
if (PlayerUtil.isYoukuTablet(getBaseActivity())) {
|
//setPlayerSmall(true);
|
} else {
|
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
|
|
}
|
if (mediaPlayerDelegate != null && !mediaPlayerDelegate.isComplete) {
|
orientationHelper.enableListener();
|
orientationHelper.isFromUser();
|
}
|
setPlayerSmall(true);
|
}
|
|
public void playCompleteGoSmall() {
|
onSmallscreenListener();
|
// mPluginFullScreenPlay.showSystemUI();
|
if (mediaPlayerDelegate == null)
|
return;
|
if (PlayerUtil.isYoukuTablet(getBaseActivity())) {
|
//setPlayerSmall(true);
|
} else {
|
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
|
|
}
|
setPlayerSmall(true);
|
Logger.d("test2", "goSmall isLand :" + isLand());
|
orientationHelper.enableListener();
|
orientationHelper.isFromUser();
|
orientationHelper.isFromComplete();
|
}
|
|
public void notifyUp() {
|
pluginManager.setUp();
|
}
|
|
public void notifyDown() {
|
pluginManager.setDown();
|
}
|
|
// @Override
|
public boolean onSearchRequested() { // android系统调用
|
return mediaPlayerDelegate.isFullScreen;
|
}
|
|
// @Override
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
shouldCallSuperKeyDown = false;
|
try {
|
switch (keyCode) {
|
case KeyEvent.KEYCODE_MENU:
|
// 取消长按menu键弹出键盘事�?
|
if (event.getRepeatCount() > 0) {
|
return true;
|
}
|
return mediaPlayerDelegate.isFullScreen;
|
case KeyEvent.KEYCODE_BACK:
|
// 点击过快的取消操�?
|
if (event.getRepeatCount() > 0) {
|
return true;
|
}
|
if (!mediaPlayerDelegate.isDLNA) {
|
if (mediaPlayerDelegate.isFullScreen
|
&& !isFromLocal()
|
&& (mediaPlayerDelegate.videoInfo != null && !mediaPlayerDelegate.videoInfo.isHLS)) {
|
goSmall();
|
return true;
|
} else {
|
onkeyback();
|
return true;
|
}
|
} else {
|
return true;
|
}
|
case KeyEvent.KEYCODE_VOLUME_DOWN:
|
return volumeDown();
|
case KeyEvent.KEYCODE_VOLUME_UP:
|
return volumeUp();
|
case KeyEvent.KEYCODE_SEARCH:
|
return mediaPlayerDelegate.isFullScreen;
|
case 125:
|
/** 有些手机载入中弹出popupwindow */
|
return true;
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
shouldCallSuperKeyDown = true;
|
return false;
|
}
|
|
private boolean shouldCallSuperKeyDown = false;
|
|
public boolean shouldCallSuperKeyDown() {
|
return shouldCallSuperKeyDown;
|
}
|
|
protected void onkeyback() {
|
Logger.d("sgh", "onkeyback");
|
try {
|
|
if ((mediaPlayerDelegate != null && mediaPlayerDelegate.videoInfo != null) ? mediaPlayerDelegate.videoInfo.isHLS
|
: false) {
|
IRVideoWrapper.videoEnd(getBaseActivity());
|
return;
|
}
|
|
if (!mediaPlayerDelegate.isStartPlay
|
&& !mediaPlayerDelegate.isVVBegin998Send) {
|
if (mediaPlayerDelegate.videoInfo == null
|
|| TextUtils.isEmpty(mediaPlayerDelegate.videoInfo
|
.getVid())) {
|
Track.onError(
|
getBaseActivity(),
|
id,
|
Device.guid,
|
StaticsUtil.PLAY_TYPE_NET,
|
PlayCode.USER_RETURN,
|
mediaPlayerDelegate.videoInfo == null ? Source.YOUKU
|
: mediaPlayerDelegate.videoInfo.mSource,
|
Profile.videoQuality, 0,
|
mediaPlayerDelegate.isFullScreen);
|
mediaPlayerDelegate.isVVBegin998Send = true;
|
} else if (!mediaPlayerDelegate.videoInfo.IsSendVV
|
&& !mediaPlayerDelegate.videoInfo.isSendVVEnd) {
|
if (mediaPlayerDelegate.isADShowing) {
|
Track.onError(getBaseActivity(),
|
mediaPlayerDelegate.videoInfo.getVid(),
|
Device.guid,
|
mediaPlayerDelegate.videoInfo.playType,
|
PlayCode.VIDEO_ADV_RETURN,
|
mediaPlayerDelegate.videoInfo.mSource,
|
mediaPlayerDelegate.videoInfo
|
.getCurrentQuality(),
|
mediaPlayerDelegate.videoInfo.getProgress(),
|
mediaPlayerDelegate.isFullScreen);
|
} else {
|
Track.onError(
|
getBaseActivity(),
|
mediaPlayerDelegate.videoInfo.getVid(),
|
Device.guid,
|
PlayerUtil
|
.isBaiduQvodSource(mediaPlayerDelegate.videoInfo.mSource) ? StaticsUtil.PLAY_TYPE_NET
|
: mediaPlayerDelegate.videoInfo.playType,
|
PlayCode.USER_LOADING_RETURN,
|
mediaPlayerDelegate.videoInfo.mSource,
|
mediaPlayerDelegate.videoInfo
|
.getCurrentQuality(),
|
mediaPlayerDelegate.videoInfo.getProgress(),
|
mediaPlayerDelegate.isFullScreen);
|
if (!mediaPlayerDelegate.videoInfo.isAdvEmpty()) {
|
DisposableStatsUtils.disposeAdLoss(
|
YoukuBasePlayerManager.this
|
.getBaseActivity(),
|
URLContainer.AD_LOSS_STEP3,
|
SessionUnitil.playEvent_session,
|
URLContainer.AD_LOSS_MF);
|
}
|
}
|
}
|
}
|
mediaPlayerDelegate.isStartPlay = false;
|
if (!mediaPlayerDelegate.isVVBegin998Send) {
|
mediaPlayerDelegate.onVVEnd();
|
} else {
|
mediaPlayerDelegate.videoInfo.isSendVVEnd = true;
|
}
|
} catch (Exception e) {
|
} finally {
|
// setResult(RESULT_OK);
|
Logger.d("sgh", "onkeyback finally finish");
|
getBaseActivity().finish();
|
}
|
}
|
|
/**
|
* 是否静音
|
*/
|
private boolean isMute = false;
|
private AudioManager am;
|
private int currentSound;
|
|
private void initSound() {
|
am = (AudioManager) getBaseActivity().getSystemService(
|
Context.AUDIO_SERVICE);
|
currentSound = am.getStreamVolume(AudioManager.STREAM_MUSIC);
|
}
|
|
private boolean volumeUp() {
|
if (!isMute) {
|
am.setStreamVolume(AudioManager.STREAM_MUSIC, Math.min(
|
am.getStreamVolume(AudioManager.STREAM_MUSIC) + 1,
|
am.getStreamMaxVolume(AudioManager.STREAM_MUSIC)), 0);
|
} else {
|
if (currentSound >= 0) {
|
am.setStreamVolume(AudioManager.STREAM_MUSIC, Math.min(
|
currentSound + 1,
|
am.getStreamMaxVolume(AudioManager.STREAM_MUSIC)), 0);
|
}
|
|
}
|
pluginManager.onVolumnUp();
|
return false;
|
}
|
|
private boolean volumeDown() {
|
if (!isMute) {
|
am.setStreamVolume(AudioManager.STREAM_MUSIC,
|
am.getStreamVolume(AudioManager.STREAM_MUSIC) - 1, 0);
|
} else {
|
if (currentSound >= 0) {
|
int destSound = currentSound - 1;
|
am.setStreamVolume(AudioManager.STREAM_MUSIC,
|
destSound >= 0 ? destSound : 0, 0);
|
}
|
}
|
pluginManager.onVolumnDown();
|
return false;
|
}
|
|
private boolean isFromLocal() {
|
|
if (Profile.from == Profile.PHONE_BROWSER
|
|| (mediaPlayerDelegate.videoInfo != null && StaticsUtil.PLAY_TYPE_LOCAL
|
.equals(mediaPlayerDelegate.videoInfo.getPlayType())))
|
|
return true;
|
return false;
|
|
}
|
|
private void onLoadingFailError() {
|
if (null == mediaPlayerDelegate)
|
return;
|
try {
|
mediaPlayerDelegate.onVVEnd();
|
// mediaPlayerDelegate.onVVBegin996();
|
} catch (Exception e) {
|
|
}
|
}
|
|
// @Override
|
public void onBackPressed() { // android系统调用
|
Logger.d("sgh", "onBackPressed before super");
|
// super.onBackPressed();
|
Logger.d("sgh", "onBackPressed");
|
onkeyback();
|
}
|
|
public abstract void onInitializationSuccess(YoukuPlayer player);
|
|
/**
|
* 全屏的回�?当程序全屏的时候应该将其他的view都设置为gone
|
*/
|
public abstract void onFullscreenListener();
|
|
/**
|
* 小屏幕的回调 当程序全屏的时候应该显示其他的view
|
*/
|
public abstract void onSmallscreenListener();
|
|
public void onCreateInitialize() {
|
getBaseActivity().getWindow().setFlags(
|
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
|
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
|
pluginManager = new PluginManager(this);
|
// mediaPlayerDelegate = new IMediaPlayerDelegate(pluginManager, this);
|
// //初始化MediaPlayerDelegate
|
if (mediaPlayerDelegate == null) {
|
Logger.d(TAG,
|
"onCreateInitialize() mediaPlayerDelegate== null!!! ");
|
PlayerUiUtile.refreshMediaplayerDelegate(youkuContext);
|
mediaPlayerDelegate = RemoteInterface.mediaPlayerDelegate;
|
}
|
|
Logger.d(TAG,
|
"onCreateInitialize() after refreshMediaplayerDelegate... = "
|
+ mediaPlayerDelegate);
|
if (mediaPlayerDelegate != null) {
|
Logger.d(TAG,
|
"onCreateInitialize() mediaplayerDelegate initial()... ");
|
mediaPlayerDelegate.initial(pluginManager, this);
|
}
|
|
initPlayerPart();
|
if (!Util.hasInternet()
|
&& (mediaPlayerDelegate.videoInfo == null || !mediaPlayerDelegate.videoInfo
|
.isCached())) {
|
// Util.showTips("!Util.hasInternet(this)");
|
} else {
|
if ((mediaPlayerDelegate.videoInfo == null || !mediaPlayerDelegate.videoInfo
|
.isCached()) && Util.hasInternet() && !Util.isWifi()) {
|
// 提示用户没有wifi
|
// Util.showTips("mediaPlayerDelegate.videoInfo == null ");
|
}
|
// 读取是否自动播放
|
getIntentData();
|
// autoPlay = PreferenceManager.getDefaultSharedPreferences(
|
// YoukuBasePlayerManager.this.getBaseActivity()).getBoolean(
|
// "ifautoplay", true);
|
autoPlay = false;
|
if (mediaPlayerDelegate.videoInfo == null) {
|
} else {
|
pluginManager.onVideoInfoGetted();
|
if (mPlayerListener != null) {
|
mPlayerListener.onGetInfoSuccess();
|
}
|
}
|
|
}
|
|
initSound();
|
}
|
|
String currentVid;
|
|
public void loadEndInfo(String vid) {
|
currentVid = vid;
|
}
|
|
public void resizeMediaPlayer(boolean force) {
|
mYoukuPlayerView.resizeMediaPlayer(true);
|
}
|
|
public void resizeMediaPlayer(int percent) {
|
mYoukuPlayerView.resizeVideoView(percent, false);
|
}
|
|
@Override
|
public void land2Port() { // 其它接口方法
|
if (!PreferenceUtil.getPreferenceBoolean(getBaseActivity(),
|
"video_lock", false)) {
|
getBaseActivity().setRequestedOrientation(
|
ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
|
}
|
Logger.d("lelouch", "land2Port");
|
}
|
|
@Override
|
public void port2Land() {// 其它接口方法
|
if (null != orientationHelper)
|
orientationHelper.disableListener();
|
if (PreferenceUtil.getPreferenceBoolean(getBaseActivity(),
|
"video_lock", false)) {
|
getBaseActivity().setRequestedOrientation(
|
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
} else {
|
layoutHandler.removeCallbacksAndMessages(null);
|
getBaseActivity().setRequestedOrientation(
|
ActivityInfo.SCREEN_ORIENTATION_SENSOR);
|
}
|
}
|
|
@Override
|
public void reverseLand() { // OrientationChangeCallback接口方法
|
if (null != orientationHelper)
|
orientationHelper.disableListener();
|
if (!PreferenceUtil.getPreferenceBoolean(getBaseActivity(),
|
"video_lock", false)) {
|
layoutHandler.removeCallbacksAndMessages(null);
|
getBaseActivity().setRequestedOrientation(
|
ActivityInfo.SCREEN_ORIENTATION_SENSOR);
|
} else {
|
getBaseActivity().setRequestedOrientation(
|
ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
|
}
|
}
|
|
@Override
|
public void reversePort() {
|
getBaseActivity().setRequestedOrientation(
|
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
}
|
|
@Override
|
public void onFullScreenPlayComplete() {
|
|
if (null != orientationHelper)
|
orientationHelper.disableListener();
|
getBaseActivity().setRequestedOrientation(
|
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
}
|
|
public void setOrientionDisable() {
|
if (null != orientationHelper)
|
orientationHelper.disableListener();
|
}
|
|
public void setOrientionEnable() {
|
if (null != orientationHelper)
|
orientationHelper.enableListener();
|
}
|
|
public void resizeVideoVertical() {
|
|
// mYoukuPlayerView.resizeVideoVertical();
|
}
|
|
// 从youkuApplicaiton 挪到YoukuBaseActivity
|
public static final String TAG_GLOBAL = "YoukuBaseActivity";
|
|
// public static boolean isHighEnd; // 是否高端机型
|
public static String versionName;
|
/**
|
* 激活时�?
|
*/
|
public static String ACTIVE_TIME = "";
|
|
public static String NO_WLAN_DOWNLOAD_FLG = "nowlandownload";
|
|
public static String NO_WLAN_UPLOAD_FLG = "nowlanupload";
|
|
/**
|
* 3.0新增Home页数�?
|
*/
|
|
// Flags associated with the application.
|
public static int flags = 7;
|
|
public static boolean isAlertNetWork = false;
|
|
public static final int TIMEOUT = 30000;
|
|
// @Override
|
public void onLowMemory() { // android系统调用
|
// super.onLowMemory();
|
Logger.d("----------LowMemory----------");
|
System.gc();
|
}
|
|
/**
|
* 建议格式 当视频格式无法播放时可以用第二中视频格式
|
*/
|
public static String suggest_videotype;
|
|
public static void setSuggestVideoType(String VideoType, Context context) {
|
if (PlayerUtil.isNull(VideoType))
|
return;
|
|
if (VideoType.equals("5")) {
|
Profile.playerType = Profile.PLAYER_OUR;
|
} else {
|
Profile.playerType = Profile.PLAYER_DEFAULT;
|
}
|
// if(F.isNeonSupported())
|
// try {
|
// if(F.getUPlayer(context)!=null)
|
// Profile.playerType = Profile.PLAYER_OUR;
|
// } catch (NameNotFoundException e) {
|
// e.printStackTrace();
|
// } catch (InstantiationException e) {
|
// e.printStackTrace();
|
// } catch (IllegalAccessException e) {
|
// e.printStackTrace();
|
// } catch (ClassNotFoundException e) {
|
// e.printStackTrace();
|
// }
|
Logger.d("playertype:" + Profile.playerType);
|
// 1- mp4(网站mp4�?
|
// 2- 3gp
|
// 3- flv
|
// 4- 3gphd(手机mp4�?
|
// 5- flvhd
|
// 6- m3u8
|
suggest_videotype = VideoType;
|
|
}
|
|
public static String getSuggestVideoType() {
|
return suggest_videotype;
|
}
|
|
public static int getFormat(int videoType) {
|
// if (F.isNull(videoType))
|
// return "";
|
if (videoType == 4) {
|
PlayerUtil.out(1, "3gphd");
|
} else if (videoType == 1) {
|
PlayerUtil.out(1, "mp4");
|
} else if (videoType == 2) {
|
PlayerUtil.out(1, "3gp");
|
} else if (videoType == 5) {
|
PlayerUtil.out(1, "flv");
|
} else if (videoType == 6) {
|
PlayerUtil.out(1, "m3u8");
|
}
|
return videoType;
|
}
|
|
/**
|
* added for Uplayer 2.4.1 获取url的接�?
|
* http://test.api.3g.youku.com/layout/phone2_1
|
* /play.text?point=1&id=XNDQyMDcxODQ4
|
* &pid=a1c0f66d02e2a816&format=6,5,1,7&language
|
* =guoyu&audiolang=1&guid=a83cf513b78750adcab88523857b652d
|
* &ver=2.4.0.1&network=WIFI 当传入的是mp4,flv,hd2的时候需要返回所有的格式(超标高),用于获取所有的URL
|
* m3u8的超标高接口数据有所不同,参见接�?
|
*
|
* @param videoType 当前需要播放的格式
|
* @return 需要传给接口的format
|
*/
|
public static String getFormatAll(String videoType) {
|
if (PlayerUtil.isNull(videoType))
|
return "";
|
if (videoType.equals("4")) {
|
PlayerUtil.out(1, "3gphd");
|
} else if (videoType.equals("2")) {
|
PlayerUtil.out(1, "3gp");
|
} else if (videoType.equals("6")) {
|
PlayerUtil.out(1, "m3u8");
|
} else if (videoType.equals("5")) {
|
PlayerUtil.out(1, "flv");
|
return "1,5,7"; // 超标�?
|
} else if (videoType.equals("7")) {
|
PlayerUtil.out(1, "hd2");
|
return "1,5,7"; // 超标�?
|
} else if (videoType.equals("1")) {
|
PlayerUtil.out(1, "mp4");
|
return "1,5,7"; // 超标�?
|
}
|
return videoType;
|
}
|
|
public static boolean isnofreedata(String name) {
|
if (name.startsWith("GT-I9228") || name.startsWith("Note")
|
|| name.startsWith("9220") || name.startsWith("I889")
|
|| name.startsWith("I717") || name.startsWith("I9228")) {
|
Logger.e("Youku", "isnofreedata ERROR");
|
return true;
|
}
|
return false;
|
}
|
|
/**
|
* 播放广告
|
*
|
* @param isADshowing 是否正在播放广告
|
*/
|
public void updatePlugin(final int pluginID) {
|
Logger.e(TAG, "数组访问 updatePlugin:" + pluginID);
|
Logger.e(TAG, "pluginManager == null" + (pluginManager == null));
|
if (pluginManager == null) {
|
return;
|
}
|
getBaseActivity().runOnUiThread(new Runnable() {
|
|
@Override
|
public void run() {
|
switch (pluginID) {
|
case PLUGIN_SHOW_AD_PLAY: {
|
Logger.e(TAG, "addPluginAD");
|
pluginManager.addPlugin(mPluginADPlay, player_holder);
|
break;
|
}
|
case PLUGIN_SHOW_IMAGE_AD: {
|
// 暂停广告
|
isImageADShowing = true;
|
pluginManager.addPlugin(mPluginADPlay, player_holder);
|
break;
|
}
|
case PLUGIN_SHOW_INVESTIGATE: {
|
break;
|
}
|
default:
|
detectPlugin();
|
break;
|
}
|
}
|
|
});
|
}
|
|
protected void detectPlugin() {
|
if (pluginManager == null) {
|
return;
|
}
|
if (mediaPlayerDelegate != null && mediaPlayerDelegate.isFullScreen) {
|
if (mPluginFullScreenPlay == null) {
|
// 没有全屏用小屏幕插件
|
pluginManager.addPlugin(mPluginSmallScreenPlay, player_holder);
|
mPluginSmallScreenPlay.pluginEnable = true;
|
return;
|
}
|
pluginManager.addPlugin(mPluginFullScreenPlay, player_holder);
|
if (mediaPlayerDelegate.videoInfo == null) {
|
return;
|
}
|
} else {
|
pluginManager.addPlugin(mPluginSmallScreenPlay, player_holder);
|
mPluginSmallScreenPlay.pluginEnable = true;
|
}
|
}
|
|
boolean isPauseADShowing = false;
|
|
// public boolean onPause;
|
// public boolean isImageADShowing = false;
|
|
/**
|
* 在正片开始前暂停
|
*/
|
// public boolean pauseBeforeLoaded = false;
|
public void notifyFav() {
|
setFav();
|
if (pluginManager != null)
|
pluginManager.setFav();
|
}
|
|
private void setFav() {
|
if (mediaPlayerDelegate != null
|
&& mediaPlayerDelegate.videoInfo != null) {
|
mediaPlayerDelegate.videoInfo.isFaved = true;
|
}
|
}
|
|
public void clearUpDownFav() {
|
if (pluginManager != null)
|
pluginManager.clearUpDownFav();
|
}
|
|
/**
|
* 当视频发生变化的时候调�?留给底层复写
|
*/
|
public void onVideoChange() {
|
|
}
|
|
public void setmPluginFullScreenPlay(PluginOverlay mPluginFullScreenPlay) {
|
this.mPluginFullScreenPlay = mPluginFullScreenPlay;
|
}
|
|
public void setmPluginSmallScreenPlay(PluginOverlay mPluginSmallScreenPlay) {
|
this.mPluginSmallScreenPlay = mPluginSmallScreenPlay;
|
}
|
|
public static VideoUrlInfo getRecordFromLocal(VideoUrlInfo mVideoUrlInfo) { // 待定,在SDK内部使用
|
if (mVideoUrlInfo.getVid() != null
|
&& IMediaPlayerDelegate.mIVideoHistoryInfo != null) {
|
VideoHistoryInfo mVideoInfo = IMediaPlayerDelegate.mIVideoHistoryInfo
|
.getVideoHistoryInfo(mVideoUrlInfo.getVid());
|
if (mVideoInfo != null) {
|
int playHistory = mVideoInfo.playTime * 1000;
|
if (playHistory > mVideoUrlInfo.getProgress())
|
mVideoUrlInfo.setProgress(playHistory);
|
}
|
}
|
return mVideoUrlInfo;
|
}
|
|
/**
|
* @param ispause 是否从挂起中恢复
|
*/
|
public void startPlay() {
|
if (mYoukuPlayerView != null) {
|
mYoukuPlayerView.setDebugText("YoukuBasePlayerManager startPlay ");
|
}
|
if (mediaPlayerDelegate == null)
|
return;
|
if (mediaPlayerDelegate.isPause
|
&& mediaPlayerDelegate.isAdvShowFinished()) {
|
mediaPlayerDelegate.isPause = false;
|
} else {
|
mediaPlayerDelegate.start();
|
mediaPlayerDelegate.seekToPausedADShowing(position);
|
}
|
}
|
|
private boolean isLocalPlay() {
|
return Profile.USE_SYSTEM_PLAYER
|
|| (mediaPlayerDelegate != null
|
&& mediaPlayerDelegate.videoInfo != null && StaticsUtil.PLAY_TYPE_LOCAL
|
.equals(mediaPlayerDelegate.videoInfo.playType));
|
}
|
|
private boolean loadingADOverTime() {
|
mediaPlayerDelegate.playVideoWhenADOverTime();
|
updatePlugin(PLUGIN_SHOW_NOT_SET);
|
if (pluginManager != null) {
|
getBaseActivity().runOnUiThread(new Runnable() {
|
|
@Override
|
public void run() {
|
pluginManager.onVideoInfoGetting();
|
if (mPlayerListener != null) {
|
mPlayerListener.onGetInfoSuccess();
|
}
|
pluginManager.onVideoInfoGetted();
|
pluginManager.onLoading();
|
}
|
});
|
}
|
return true;
|
}
|
|
public void alertRetry() {
|
getBaseActivity().runOnUiThread(new Runnable() {
|
|
@Override
|
public void run() {
|
// if (mPluginSmallScreenPlay != null)
|
// mPluginSmallScreenPlay.showAlert();
|
}
|
});
|
}
|
|
private void getIntentData() {
|
Intent intent = getBaseActivity().getIntent();
|
if (null != intent && null != intent.getExtras()) {
|
String tidString = intent.getExtras().getString("video_id");
|
id = tidString;
|
}
|
}
|
|
public void setDebugInfo(String string) {
|
if (null != mYoukuPlayerView) {
|
mYoukuPlayerView.setDebugText(string);
|
}
|
}
|
|
public void interuptAD() {
|
if (mediaPlayerDelegate != null) {
|
mediaPlayerDelegate.isADShowing = false;
|
getBaseActivity().runOnUiThread(new Runnable() {
|
|
@Override
|
public void run() {
|
detectPlugin();
|
}
|
});
|
}
|
}
|
|
public void setPlayerBlack() {
|
if (mYoukuPlayerView != null) {
|
mYoukuPlayerView.setPlayerBlack();
|
}
|
}
|
|
public void playReleateNoRightVideo() {
|
pluginManager.onPlayReleateNoRightVideo();
|
}
|
|
public int getVideoPosition() {
|
return position;
|
}
|
|
public void showDialog() {
|
showPasswordInputDialog(R.string.player_error_dialog_password_required);
|
}
|
|
class DialogPositiveClick implements OnPositiveClickListener {
|
|
@Override
|
public void onClick(String passWord) {
|
doPositiveClick(passWord);
|
}
|
}
|
|
private void doPositiveClick(String password) {
|
MediaPlayerConfiguration.getInstance().mPlantformController
|
.playVideoWithPassword(mediaPlayerDelegate, password);
|
}
|
|
private void doNegativeClick() {
|
|
}
|
|
// public class PasswordInputDialog{
|
|
// public static PasswordInputDialog newInstance(int title) {
|
// PasswordInputDialog frag = new PasswordInputDialog();
|
// Bundle args = new Bundle();
|
// args.putInt("title", title);
|
// frag.setArguments(args);
|
// return frag;
|
// }
|
|
private void showPasswordInputDialog(int title) {
|
|
if (getBaseActivity() == null || getBaseActivity().isFinishing()) {
|
// 防止显示对话框时,活动被关闭了。
|
return;
|
}
|
|
LayoutInflater factory = LayoutInflater.from(getBaseActivity());
|
final View textEntryView = factory.inflate(
|
R.layout.yp_youku_dialog_password_interact, null);
|
AlertDialog dlg = new AlertDialog.Builder(getBaseActivity())
|
.setTitle(title)
|
.setView(textEntryView)
|
.setPositiveButton(R.string.alert_dialog_ok,
|
new DialogInterface.OnClickListener() {
|
public void onClick(DialogInterface dialog,
|
int whichButton) {
|
EditText passwordEditText = (EditText) textEntryView
|
.findViewById(R.id.password_edit);
|
String password = passwordEditText.getText()
|
.toString();
|
|
YoukuBasePlayerManager.this
|
.doPositiveClick(password);
|
}
|
})
|
.setNegativeButton(R.string.alert_dialog_cancel,
|
new DialogInterface.OnClickListener() {
|
public void onClick(DialogInterface dialog,
|
int whichButton) {
|
YoukuBasePlayerManager.this.doNegativeClick();
|
}
|
}).create();
|
|
dlg.show();
|
}
|
|
// }
|
|
public void onStart() {
|
// super.onStart();
|
if (pluginManager != null)
|
pluginManager.onStart();
|
|
}
|
|
public void onPayClick() {
|
if (mediaPlayerDelegate != null
|
&& IMediaPlayerDelegate.mIPayCallBack != null
|
&& mediaPlayerDelegate.videoInfo != null) {
|
mediaPlayerDelegate.release();
|
mediaPlayerDelegate.onVVEnd();
|
IMediaPlayerDelegate.mIPayCallBack.needPay(
|
mediaPlayerDelegate.videoInfo.getVid(),
|
mediaPlayerDelegate.videoInfo.mPayInfo);
|
}
|
}
|
|
@SuppressLint("NewApi")
|
public void hideSystemUI(PluginOverlay plugin) {
|
if (mediaPlayerDelegate.isFullScreen) {
|
plugin.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
|
| View.SYSTEM_UI_FLAG_FULLSCREEN);
|
}
|
}
|
|
@SuppressLint("NewApi")
|
public void showSystemUI(PluginOverlay plugin) {
|
plugin.setSystemUiVisibility(0);
|
}
|
|
public void setPluginHolderPaddingZero() {
|
if (player_holder != null) {
|
player_holder.setPadding(0, 0, 0, 0);
|
}
|
}
|
|
public void recreateSurfaceHolder() {
|
surfaceView.recreateSurfaceHolder();
|
}
|
|
@Override
|
public void showPauseAdv() {
|
updatePlugin(PLUGIN_SHOW_IMAGE_AD);
|
}
|
|
public void setPlayerListener(YoukuPlayerListener mPlayerListener) {
|
this.mPlayerListener = mPlayerListener;
|
if (mPluginSmallScreenPlay != null) {
|
mPluginSmallScreenPlay.youkuPlayerListener = mPlayerListener;
|
}
|
}
|
|
}
|