package com.letv.ads;
import java.util.ArrayList;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Build.VERSION;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.VideoView;
import com.letv.adlib.managers.status.ad.AdStatusManager;
import com.letv.adlib.managers.status.ad.IPlayerStatusDelegate;
import com.letv.adlib.managers.status.video.IVideoStatusInformer;
import com.letv.adlib.model.ad.common.AdInfo;
import com.letv.adlib.model.ad.common.CommonAdItem;
import com.letv.adlib.model.ad.types.AdClickShowType;
import com.letv.adlib.model.ad.types.CuePointType;
import com.letv.adlib.model.ad.types.SimpleAdMediaType;
import com.letv.ads.http.AdsHttpApi;
import com.letv.ads.http.LetvSimpleAsyncTask;
import com.letv.ads.util.AdsUtils;
import com.letv.ads.util.LogInfo;
import com.letv.cache.LetvCacheMannager;
import com.letv.watchball.ads.R;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;
@SuppressLint("NewApi")
public class ADPlayFragment extends Fragment {
/**
* 无广告
* */
private static final int NONE = 0;
/**
* 前帖视频广告
* */
private static final int FRONT_MP4 = 1;
/**
* 前帖图片广告
* */
private static final int FRONT_JPG = 2;
/**
* 涨停广告
* */
private static final int PAUSE = 3;
/**
* handler 刷新时间
* */
private static final int HANDLER_TIME = 0x100;
/**
* 根布局
* */
private View root;
/**
* 视频广告布局
* */
private View mVideoViewLayout;
/**
* videoview
* */
private VideoView mVideoViewFirst;
private VideoView mVideoViewSecond;
/**
* 视频广告点击区
* */
private View mVideoViewClick;
/**
* 图片前帖
* */
private ImageView mImageView;
/**
* 静音按钮
* */
private ImageView muteView;
/**
* 时间
* */
private TextView mTimeTextView;
/**
* loading圈
* */
private View mLoading;
/**
* 暂停广告布局
* */
private View pauseLayout;
/**
* 暂停图片
* */
private ImageView pauseImage;
/**
* 暂停广告关闭按钮
* */
private View pauseDel;
/**
* 前帖广告回调
* */
private PlayAdListener adListener;
private String mTimeText = "15";
/**
* 当前的广告无聊
* */
// private CommonAdItem mPlayAdInfo;
/**
* 资源加载开始时间
*/
protected long loadingStart = 0;
// /**
// * 资源加载完成时间
// */
// protected long loadingEnd = 0;
/**
* 当前时间
* */
private int curTime = 0;
/**
* 总时间
* */
private int totalTime = 0;
private int totalTimeTmp = 0;
/**
* 广告请求时长
*/
private long adsRequestTime = 0;
/**
* 广告加载时长
*/
private long adsLoadingTime = 0;
/**
* 当前广告类型
* */
private int curAdType = NONE;
/**
* 当前执行的线程
* */
private LetvSimpleAsyncTask curTask;
/**
* activity是否已经销毁
*/
private boolean isDestroy = false;
/**
* fragment是否已经添加至activity
*/
private boolean isReady = false;
/**
* 是否广告显示成功
* */
private boolean isShow = false;
/**
* 声音管理者
* */
private AudioManager audioManager;
/**
* 初始音量
* */
private int old = 0;
/**
* 会员去广告按钮
* */
private View vipView;
/**
* 会员去广告按钮回调
* */
private VipViewCallBack viewCallBack;
/**
* 开始时间
* */
private long startTime;
/**
* 半屏2G/3G 暂停显示默认图片
*/
private View wifiTopViewHalf;
/**
* 前贴广告是否请求成功
*/
private boolean isHaveFrontAds = true;
/**
* 当前是否是第一个播放器在工作
*/
private boolean isFirstVideoViewWorking = true;
/**
* 广告信息
*/
private ArrayList<CommonAdItem> adsList = null;
/**
* 新增IVideoStatusInformer ,用于客户端将播放状态通知给广告
*/
private IVideoStatusInformer informer = null;
/**
* 前贴广告位置
*/
private int adsItemIndex = 0;
/**
* 已经播放完视频时间
*/
private int adsPlayedTime = 0;
private boolean isFirstPlayAds = true;
private CommonAdItem firstCommonAdItem;
private CommonAdItem secondCommonAdItem;
private AdStatusManager mAdStatusManagerFirst;
private AdStatusManager mAdStatusManagerSecond;
private RequestDemandFrontAd mRequestDemandFrontAd;
/**
* 刷新进度handler
* */
private Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (!isReady || isDestroy) {
return false;
}
switch (msg.what) {
case HANDLER_TIME:
if (curAdType == FRONT_MP4) {
int time = getCurrentWorkingVideo(isFirstVideoViewWorking).getCurrentPosition() + adsPlayedTime
* 1000;
int pos = 0;
if (curTime == time) {
if (!isPauseAd) {
mLoading.setVisibility(View.VISIBLE);
}
} else {
if (time <= 0 && curTime > 0) {
if (!isPauseAd) {
mLoading.setVisibility(View.VISIBLE);
}
} else {
mLoading.setVisibility(View.GONE);
curTime = time;
}
if (isFirstPlayAds) {
isFirstPlayAds = false;
adsLoadingTime = System.currentTimeMillis() - adsLoadingTime;
}
}
pos = totalTime * 1000 - curTime;
if (pos < 0) {
pos = 0;
}
if (vipView != null && vipView.getVisibility() != View.VISIBLE) {
vipView.setVisibility(View.GONE);
}
float fTime = pos /1000;
int iTime = Math.round(fTime);
mTimeTextView.setText(String.valueOf(iTime));
mTimeText = mTimeTextView.getText().toString();
Log.d("adtime", "pos=" + pos + " time=" + mTimeText);
handler.sendEmptyMessageDelayed(HANDLER_TIME, 1000);
} else if (curAdType == FRONT_JPG) {
int pos = totalTime - curTime;
if (pos <= 0) {
pos = 0;
}
mTimeTextView.setText(String.valueOf(pos));
mTimeText = mTimeTextView.getText().toString();
if (pos == 0) {
/**
* 完成统计
* */
if (adStatusManager != null) {
adStatusManager.onAdPlayComplete();
}
FrontAdFinish();
return false;
}
curTime++;
handler.sendEmptyMessageDelayed(HANDLER_TIME, 1000);
}
break;
}
return false;
}
});
/**
* 当前的统计工具
* */
private AdStatusManager adStatusManager;
private boolean isPauseAd = false;
private boolean viewCreated;
private boolean hasAds;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
audioManager = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
if (audioManager != null) {
if (audioManager.getMode() == AudioManager.MODE_INVALID) {
audioManager.setMode(AudioManager.MODE_NORMAL);
}
}
firstIsVisable=true;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
root = inflater.inflate(R.layout.ad_play, null, false);
findView();
viewCreated = true;
return root;
}
/**
* 初始化控件
* */
private void findView() {
mVideoViewLayout = root.findViewById(R.id.ad_video_layout);
mVideoViewFirst = (VideoView) root.findViewById(R.id.ad_video_first);
mVideoViewSecond = (VideoView) root.findViewById(R.id.ad_video_second);
mVideoViewClick = root.findViewById(R.id.ad_video_click);
mImageView = (ImageView) root.findViewById(R.id.ad_image);
mTimeTextView = (TextView) root.findViewById(R.id.ad_time);
mLoading = root.findViewById(R.id.ad_loading);
pauseLayout = root.findViewById(R.id.pause_layout);
pauseImage = (ImageView) root.findViewById(R.id.pause_img);
pauseDel = root.findViewById(R.id.pause_del);
muteView = (ImageView) root.findViewById(R.id.ad_mute);
vipView = root.findViewById(R.id.ad_vip);
wifiTopViewHalf = root.findViewById(R.id.wifiTopViewHalfAd);
videoViewInit();
pauseDel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
closePauseAd();
}
});
if (audioManager != null) {// 初始化声音管理器
int cur = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
if (cur == 0) {
muteView.setImageResource(R.drawable.mute);
} else {
muteView.setImageResource(R.drawable.not_muted);
}
}
muteView.setOnClickListener(new OnClickListener() {// 静音按钮监听
@Override
public void onClick(View v) {
int cur = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
if (cur == 0) {
if (old == 0) {// 无声音,且上一次的声音也为0,那么给一个初始值
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 5, 0);
muteView.setImageResource(R.drawable.not_muted);
} else {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, old, 0);
muteView.setImageResource(R.drawable.not_muted);
}
} else {
old = cur;
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);
muteView.setImageResource(R.drawable.mute);
}
}
});
vipView.setOnClickListener(new OnClickListener() {// 会员去广告按钮,点击回调主工程
@Override
public void onClick(View v) {
if (viewCallBack != null) {
viewCallBack.onClick();
}
}
});
wifiTopViewHalf.setOnClickListener(new OnClickListener() {// 3G/2G
// 点击继续播放
@Override
public void onClick(View v) {
if (viewCallBack != null) {
viewCallBack.ads3G2GClick();
}
if (vipView != null) {
vipView.setVisibility(View.GONE);
}
}
});
}
/**
* 设置广告声音图标显示
*
* @param cur
*/
public void setMuteViewStatus(int cur) {
if (muteView != null && !isDestroy) {
if (cur <= 0) {
muteView.setImageResource(R.drawable.mute);
} else {
muteView.setImageResource(R.drawable.not_muted);
}
}
}
/**
* 播放器初始化
*/
private void videoViewInit() {
mVideoViewSecond.setZOrderOnTop(true);
mVideoViewSecond.setZOrderMediaOverlay(true);
mVideoViewFirst.setZOrderOnTop(true);
mVideoViewFirst.setZOrderMediaOverlay(true);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (isLandscape()) {
zoomViewFull(root);
zoomView(217, 123, pauseLayout);
} else {
zoomView(320, 180, root);
zoomView(270, 152, pauseLayout);
}
isReady = true;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (isLandscape()) {
zoomViewFull(root);
zoomView(217, 123, pauseLayout);
} else {
zoomView(320, 180, root);
zoomView(270, 152, pauseLayout);
}
if (isPauseAd) {
mLoading.setVisibility(View.GONE);
if (isLandscape()) {
setwifiTopViewVisible(true);
// if (vipView != null) {
// vipView.setVisibility(View.GONE);
// }
} else {
if (isPauseAd) {
setwifiTopViewVisible(true);
} else {
// setwifiTopViewVisible(false);
}
}
}
}
@Override
public void onResume() {
super.onResume();
if (curAdType == FRONT_JPG) {
startHandlerTime();
/**
* 继续统计
* */
if (adStatusManager != null) {
adStatusManager.onAdResumed();
}
} else if (curAdType == FRONT_MP4) {
if (!isPauseAd) {
setwifiTopViewVisible(false);
if (isFirstVideoViewWorking) {
mVideoViewFirst.setVisibility(View.VISIBLE);
mVideoViewSecond.setVisibility(View.GONE);
} else {
mVideoViewSecond.setVisibility(View.VISIBLE);
mVideoViewFirst.setVisibility(View.GONE);
}
getCurrentWorkingVideo(isFirstVideoViewWorking).start();
getCurrentWorkingVideo(isFirstVideoViewWorking).seekTo(
curTime >= adsPlayedTime * 1000 ? (curTime - adsPlayedTime * 1000) : 0);
startHandlerTime();
mTimeTextView.setText(mTimeText);
/**
* 继续统计
* */
if (adStatusManager != null) {
adStatusManager.onAdResumed();
}
}
}
}
@Override
public void onPause() {
super.onPause();
if (curAdType == FRONT_JPG || curAdType == FRONT_MP4) {
/**
* 暂停统计
* */
if (adStatusManager != null) {
adStatusManager.onAdPaused();
// //LogInfo.log("ads", "--------onPause--暂停统计----------");
}
}
pause();
mTimeText = mTimeTextView.getText().toString();
// //LogInfo.log("ads", "----onPause----FRONT_MP4--curTime=" + curTime +
// " mTimeText =" + mTimeText);
}
@Override
public void onDestroyView() {// 做一些必要的消耗
super.onDestroyView();
isDestroy = true;
isReady = false;
mVideoViewFirst.stopPlayback();
mVideoViewSecond.stopPlayback();
stopHandlerTime();
if (curTask != null) {
curTask.cancel(true);
}
curTask = null;
}
public VipViewCallBack getViewCallBack() {
return viewCallBack;
}
public void setViewCallBack(VipViewCallBack viewCallBack) {
this.viewCallBack = viewCallBack;
}
/**
* 播放,兼容在线与本地播放器
* */
public boolean play(String uriString) {
if (!TextUtils.isEmpty(uriString)) {
isFirstVideoViewWorking = true;
mVideoViewLayout.setVisibility(View.VISIBLE);
mVideoViewFirst.setVisibility(View.VISIBLE);
mTimeTextView.setVisibility(View.VISIBLE);
mImageView.setVisibility(View.GONE);
muteView.setVisibility(View.VISIBLE);
mTimeTextView.setVisibility(View.VISIBLE);
vipView.setVisibility(View.GONE);
mVideoViewFirst.setVideoPath(uriString);
Log.d("adsvideo", "uriString=" + uriString);
mVideoViewFirst.setOnErrorListener(mOnErrorListenerFirst);
mVideoViewFirst.setOnPreparedListener(mOnPreparedListenerFirst);
mVideoViewFirst.setOnCompletionListener(onCompletionListenerFirst);
if (!isPauseAd) {
mLoading.setVisibility(View.VISIBLE);
mVideoViewFirst.start();
} else {
mLoading.setVisibility(View.GONE);
mVideoViewFirst.pause();
}
return true;
} else {
FrontAdFinish();
return false;
}
}
/**
* 跳过视频广告
* */
public void stopFrontAd() {
if (curAdType == FRONT_MP4) {
mVideoViewFirst.stopPlayback();
mVideoViewSecond.stopPlayback();
stopHandlerTime();
FrontAdFinish();
} else if (curAdType == FRONT_JPG) {
stopHandlerTime();
FrontAdFinish();
}
}
/**
* 播放
* */
public void star() {
getCurrentWorkingVideo(isFirstVideoViewWorking).start();
startHandlerTime();
}
/**
* 暂停
* */
public void pause() {
// LogInfo.log("ads", "isFirstVideoViewWorking =" +
// isFirstVideoViewWorking);
VideoView currentWorkingVideo = getCurrentWorkingVideo(isFirstVideoViewWorking);
if (null != currentWorkingVideo){
currentWorkingVideo.pause();
}
stopHandlerTime();
}
public void setADPause(boolean pauseAd) {
if (pauseAd) {
pause();
} else {
if (isPauseAd) {
isPauseAd = false;
setwifiTopViewVisible(false);
mLoading.setVisibility(View.VISIBLE);
getCurrentWorkingVideo(isFirstVideoViewWorking).start();
getCurrentWorkingVideo(isFirstVideoViewWorking).seekTo(
curTime >= adsPlayedTime * 1000 ? (curTime - adsPlayedTime * 1000) : 0);
startHandlerTime();
if (adStatusManager != null) {
adStatusManager.onAdResumed();
}
}
}
}
/**
* @return the isPauseAd
*/
public boolean isPauseAd() {
return isPauseAd;
}
/**
* @param isPauseAd
* the isPauseAd to set
*/
public void setPauseAd(boolean isPauseAd) {
this.isPauseAd = isPauseAd;
setMobileNetBg(isPauseAd);
}
/**
* @return the isHaveFrontAds
*/
public boolean isHaveFrontAds() {
return isHaveFrontAds;
}
/**
* @param isHaveFrontAds
* the isHaveFrontAds to set
*/
public void setHaveFrontAds(boolean isHaveFrontAds) {
this.isHaveFrontAds = isHaveFrontAds;
}
/**
* 显示隐藏 2G/3G 暂停播放 默认图片
*
* @param disp
*/
public void setMobileNetBg(boolean disp) {
if (!viewCreated){
return;
}
if(disp){
if (null != mLoading)
mLoading.setVisibility(View.GONE);
} else {
if (null != mLoading)
mLoading.setVisibility(View.VISIBLE);
}
setwifiTopViewVisible(disp);
}
public boolean firstIsVisable=true;
private void setwifiTopViewVisible(boolean isVisable) {
if (isVisable) {
if (wifiTopViewHalf != null&&firstIsVisable) {
firstIsVisable=false;
wifiTopViewHalf.setVisibility(View.VISIBLE);
}
if (vipView != null) {
vipView.setVisibility(View.GONE);
}
} else {
if (wifiTopViewHalf != null) {
wifiTopViewHalf.setVisibility(View.GONE);
}
if (vipView != null) {
vipView.setVisibility(View.GONE);
}
}
}
/**
* 停止
* */
public void stopPlayback() {
if (mAdStatusManagerFirst != null) {
mAdStatusManagerFirst.onAdStoped();
}
if (mAdStatusManagerSecond != null) {
mAdStatusManagerSecond.onAdStoped();
}
FrontAdFinish(true);
if (curTask != null) {
curTask.cancel(true);
}
}
/**
* 跳到
* */
public void seekTo(int msec) {
getCurrentWorkingVideo(isFirstVideoViewWorking).seekTo(msec);
}
/**
* 是否在播放中
* */
public boolean isPlaying() {
return getCurrentWorkingVideo(isFirstVideoViewWorking).isPlaying();
}
/**
* 得到当前时间点
* */
public int getCurrentPosition() {
return getCurrentWorkingVideo(isFirstVideoViewWorking).getCurrentPosition();
}
/**
* 得到当前缓冲时间点
* */
public int getBufferPercentage() {
return getCurrentWorkingVideo(isFirstVideoViewWorking).getBufferPercentage();
}
/**
* 得到广告listener
* */
public PlayAdListener getAdListener() {
return adListener;
}
/**
* 设置广告listener
* */
public void setAdListener(PlayAdListener adListener) {
this.adListener = adListener;
}
/**
* 前贴广告任务
*
* @param context
* @param cid
* @param aid
* @param vid
* @param mmsid
* @param uuid
* @param uid
* @param vlen
* @param py
* @param ty
* @param isSupportM3U8
*/
private void startRequestFrontAdTask(Context context, int cid, long aid, long vid, String mmsid, String uuid,
String uid, String vlen, String py, String ty, boolean isSupportM3U8, boolean isVipVideo, boolean disableAvd) {
cancelRequestFrontAdTask();
mRequestDemandFrontAd = new RequestDemandFrontAd(context, cid, aid, vid, mmsid, uuid, uid, vlen, py, ty,
isSupportM3U8, isVipVideo, disableAvd);
Log.d("ads","startRequestFrontAdTask");
mRequestDemandFrontAd.start();
Log.d("ads","startRequestFrontAdTask");
}
/**
* 取消前贴广告
*/
private void cancelRequestFrontAdTask() {
if (mRequestDemandFrontAd != null) {
mRequestDemandFrontAd.cancel(true);
mRequestDemandFrontAd = null;
}
}
/**
* 得到前帖广告
* */
public void getDemandFrontAd(int cid, long aid, long vid, String mmsid, String uuid, String uid, String vlen,
String py, String ty, boolean isSupportM3U8, boolean isVipVideo, boolean disableAvd) {
startTime = System.currentTimeMillis();
LogInfo.log("ads","getDemandFrontAd");
if (isDestroy) {
return;
}
loadingStart = System.currentTimeMillis();
startRequestFrontAdTask(getActivity(), cid, aid, vid, mmsid, uuid, uid, vlen, py, ty, isSupportM3U8,
isVipVideo, disableAvd);
}
/**
* 得到前帖广告
* */
public void getDemandPauseAd(int cid, long aid, long vid, String mmsid, String uuid, String uid, String vlen,
String py, String ty) {
LogInfo.log("ads", "getDemandPauseAd");
if (isDestroy) {
return;
}
new RequestDemandPauseAd(getActivity(), cid, aid, vid, mmsid, uuid, uid, vlen, py, ty).start();
}
/**
* 得到直播前帖广告
* */
public void getLiveFrontAd(Context context,String streamUrl, String uuid, String uid, String py, String ty) {
startTime = System.currentTimeMillis();
Log.d("ads","RequestLiveFrontAd");
if (isDestroy) {
return;
}
loadingStart = System.currentTimeMillis();
new RequestLiveFrontAd(context, streamUrl, uuid, uid, py, ty).start();
}
/**
* 开始刷新进度条
* */
private void startHandlerTime() {
handler.removeMessages(HANDLER_TIME);
if (!isPauseAd) {
handler.sendEmptyMessage(HANDLER_TIME);
}
}
/**
* 停止刷新进度条
* */
private void stopHandlerTime() {
handler.removeMessages(HANDLER_TIME);
}
/**
* 判断是否是横屏
* */
public boolean isLandscape() {
int t = 0;
if (null != getActivity()){
t = getActivity().getResources().getConfiguration().orientation;
}
if (t == Configuration.ORIENTATION_LANDSCAPE) {
return true;
}
return false;
}
/**
* 得到屏幕高度
* */
public int getScreenHeight() {
return ((WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getHeight();
}
/**
* 得到屏幕宽度
* */
public int getScreenWidth() {
return ((WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getWidth();
}
/**
* 将一倍尺寸缩放到当前屏幕大小的尺寸(宽)
* */
public int zoomWidth(int w) {
int sw = 0;
sw = getScreenWidth();
return (int) (w * sw / 320f + 0.5f);
}
/**
* 缩放控件
* */
public void zoomView(int w, int h, View view) {
if (view == null) {
return;
}
LayoutParams params = view.getLayoutParams();
if (params == null) {
return;
}
params.width = zoomWidth(w);
params.height = zoomWidth(h);
}
/**
* 缩放控件
* */
public void zoomViewFull(View view) {
if (view == null) {
return;
}
LayoutParams params = view.getLayoutParams();
if (params == null) {
return;
}
params.width = getScreenWidth();
params.height = getScreenHeight();
}
/**
* 前帖播放完成调用
*/
private void FrontAdFinish() {
FrontAdFinish(false);
}
/**
* 前帖播放完成调用,恢复布局到初始状态,销毁必要的对象
* */
private void FrontAdFinish(boolean isFinishByHand) {
adsItemIndex = 0;
isPauseAd = false;
curAdType = NONE;
totalTime = 0;
curTime = 0;
adsPlayedTime = 0;
stopHandlerTime();
if (mVideoViewFirst != null) {
mVideoViewFirst.stopPlayback();
}
if (mVideoViewSecond != null) {
mVideoViewSecond.stopPlayback();
}
mTimeTextView.setText(null);
mTimeTextView.setVisibility(View.GONE);
muteView.setVisibility(View.GONE);
vipView.setVisibility(View.GONE);
mVideoViewLayout.setVisibility(View.GONE);
mVideoViewClick.setOnClickListener(null);
mImageView.setOnClickListener(null);
mVideoViewFirst.setVisibility(View.GONE);
mVideoViewSecond.setVisibility(View.GONE);
mLoading.setVisibility(View.GONE);
mImageView.setImageDrawable(null);
mImageView.setVisibility(View.GONE);
if (adListener != null) {
if (isReady && !isDestroy) {
adListener.onFinish(isFinishByHand,hasAds);
if (informer != null) {
informer.OnVideoStart();
}
}
}
int cur = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
if (cur == 0) {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, old, 0);
muteView.setImageResource(R.drawable.not_muted);
}
// mPlayAdInfo = null ;
adStatusManager = null;
isFirstPlayAds = true;
adsLoadingTime = 0;
}
/**
* 关闭暂停广告
* */
public void closePauseAd() {
if (curAdType == PAUSE) {
curAdType = NONE;
adStatusManager = null;
// LogInfo.log("ads", "----------closePauseAd----------");
}
pauseLayout.setVisibility(View.GONE);
pauseImage.setImageDrawable(null);
pauseDel.setVisibility(View.GONE);
pauseImage.setOnClickListener(null);
}
/**
* 请求完成,处理前帖广告
* */
public void handler(final CommonAdItem adInfo) {
if (!isReady || isDestroy) {
isPauseAd = false;
return;
}
if (adInfo == null) {
FrontAdFinish();
return;
}
mVideoViewLayout.setVisibility(View.VISIBLE);
if (isFirstVideoViewWorking) {
adStatusManager = mAdStatusManagerFirst;
} else {
adStatusManager = new AdStatusManager(adInfo);
}
// LogInfo.log("ads", "xxxxxxx---handler adInfo---" + adInfo.index);
if (SimpleAdMediaType.VIDEO == adInfo.mediaFileType) { // 显示视频广告
if (curAdType == FRONT_MP4 || curAdType == FRONT_JPG) {
star();
return;
}
isShow = true;
boolean su = play(adInfo.mediaFileUrl);
if (su) {
mVideoViewClick.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
clickGotoWeb(adInfo);
}
});
// totalTime = adInfo.duration;
exposureStatistics(adInfo);
}
} else if (SimpleAdMediaType.BITMAP == adInfo.mediaFileType) {// 显示图片广告
if (!TextUtils.isEmpty(adInfo.mediaFileUrl)) {
if (curAdType == FRONT_MP4 || curAdType == FRONT_JPG) {
star();
return;
}
LetvCacheMannager.getInstance().loadImage(adInfo.mediaFileUrl, mImageView, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
isShow = true;
mImageView.setImageBitmap(loadedImage);
mImageView.setVisibility(View.VISIBLE);
mTimeTextView.setVisibility(View.VISIBLE);
muteView.setVisibility(View.GONE);
mTimeTextView.setVisibility(View.VISIBLE);
vipView.setVisibility(View.GONE);
mLoading.setVisibility(View.GONE);
curAdType = FRONT_JPG;
startHandlerTime();
/**
* 加载完成统计
* */
if (adStatusManager != null) {
adStatusManager.onAdLoadComplete((int) (System.currentTimeMillis() - startTime));
}
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
mImageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
clickGotoWeb(adInfo);
}
});
totalTime = adInfo.duration;
totalTimeTmp = totalTime;
exposureStatistics(adInfo);
}
} else {
FrontAdFinish();
}
}
/**
* 请求完成,处理暂停广告
* */
public void handlerPauseAd(final CommonAdItem adInfo) {
if (adInfo == null) {
return;
}
adStatusManager = new AdStatusManager(adInfo);
if (SimpleAdMediaType.VIDEO == adInfo.mediaFileType) { // 显示视频广告
} else if (SimpleAdMediaType.BITMAP == adInfo.mediaFileType) {// 显示图片广告
if (!TextUtils.isEmpty(adInfo.mediaFileUrl)) {
LetvCacheMannager.getInstance().loadImage(adInfo.mediaFileUrl, pauseImage, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
pauseImage.setImageBitmap(loadedImage);
pauseLayout.setVisibility(View.VISIBLE);
pauseImage.setVisibility(View.VISIBLE);
pauseDel.setVisibility(View.VISIBLE);
curAdType = PAUSE;
exposureStatistics(adInfo);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
pauseImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
clickGotoWeb(adInfo);
}
});
// exposureStatistics(adInfo);
}
} else {
}
}
/**
* 请求点播前帖片广告
* */
private class RequestDemandFrontAd extends LetvSimpleAsyncTask<ArrayList<CommonAdItem>> {
private Context mContext;
private String cid;
private String aid;
private String vid;
private String mmsid;
private String uuid;
private String uid;
private String vlen;
private String py;
private String ty;
private boolean isVipVideo;
private boolean isSupportM3U8;
private boolean disableAvd;
public RequestDemandFrontAd(Context context, int cid, long aid, long vid, String mmsid, String uuid,
String uid, String vlen, String py, String ty, boolean isSupportM3U8, boolean isVipVideo,
boolean disableAvd) {
super(context);
adsRequestTime = System.currentTimeMillis();
mContext = context;
if (curTask != null)
curTask.cancel(true);
curTask = null;
curTask = this;
if (adsList != null) {
adsList.clear();
}
firstCommonAdItem = null;
secondCommonAdItem = null;
mAdStatusManagerFirst = null;
mAdStatusManagerSecond = null;
totalTime = 0;
adsItemIndex = 0;
this.cid = String.valueOf(cid);
this.aid = String.valueOf(aid);
this.vid = String.valueOf(vid);
this.mmsid = mmsid;
this.uuid = uuid;
this.uid = uid;
this.vlen = vlen;
this.py = py;
this.ty = ty;
this.disableAvd = disableAvd;
this.isVipVideo = isVipVideo;
this.isSupportM3U8 = isSupportM3U8;
this.isSupportM3U8 = isSupportM3U8;
}
@Override
public ArrayList<CommonAdItem> doInBackground() {
LogInfo.log("ads", "----------start---- cid=" + cid + " aid="+ aid + " vid="+ vid + " disableAvd=" + disableAvd);
if (isCancel()) {
return null;
}
AdInfo frontAd = AdsHttpApi.getFrontAd(mContext, cid, aid, vid, mmsid, uuid, uid, vlen, py, ty,
iPlayerStatusDelegate, true, isVipVideo, disableAvd);
if (frontAd != null) {
adsList = frontAd.adList;
informer = frontAd.informer;
LogInfo.log("ads", " ------------ end----- ");
if (adsList != null && adsList.size() > 0) {
CommonAdItem mCommonAdItem = null;
for (int i = 0; i < adsList.size(); i++) {
mCommonAdItem = adsList.get(i);
totalTime += mCommonAdItem.duration;
LogInfo.log("ads", "i =" + i);
LogInfo.log("ads", " mCommonAdItem.mediaFileUrl =" +
mCommonAdItem.mediaFileUrl);
LogInfo.log("ads", " mCommonAdItem.duration =" +
mCommonAdItem.duration);
}
totalTimeTmp = totalTime;
hasAds = true;
return adsList;
}
}
hasAds = false;
return null;
}
@Override
public void onPostExecute(ArrayList<CommonAdItem> result) {
adsRequestTime = System.currentTimeMillis() - adsRequestTime;
curTask = null;
firstCommonAdItem = null;
if (null != result && result.size() > 0) {
isHaveFrontAds = true;
firstCommonAdItem = distributeAdsInfo(result);
} else {
isHaveFrontAds = false;
FrontAdFinish();
return;
}
if (isSupportM3U8) {
if (null != adListener) {
adListener.onM3U8(result);
}
if (null != firstCommonAdItem && SimpleAdMediaType.VIDEO == firstCommonAdItem.mediaFileType) {
FrontAdFinish();
return;
}
}
if (isCancel() || null == firstCommonAdItem) {
isHaveFrontAds = false;
FrontAdFinish();
return;
}
adsLoadingTime = System.currentTimeMillis();
isFirstVideoViewWorking = true;
secondCommonAdItem = distributeAdsInfo(result);
mAdStatusManagerFirst = null;
mAdStatusManagerSecond = null;
mAdStatusManagerFirst = new AdStatusManager(firstCommonAdItem);
handler(firstCommonAdItem);
if (secondCommonAdItem != null) {
videoViewPlayInit(secondCommonAdItem.mediaFileUrl, false, secondCommonAdItem);
}
}
@Override
public void onPreExecute() {
}
}
/**
* 请求直播前帖片
* */
private class RequestLiveFrontAd extends LetvSimpleAsyncTask<ArrayList<CommonAdItem>> {
private String streamUrl;
private String uuid;
private String uid;
private String py;
private String ty;
public RequestLiveFrontAd(Context context, String streamUrl, String uuid, String uid, String py, String ty) {
super(context);
adsRequestTime = System.currentTimeMillis();
if (curTask != null) {
curTask.cancel(true);
}
curTask = null;
curTask = this;
if (adsList != null) {
adsList.clear();
}
firstCommonAdItem = null;
secondCommonAdItem = null;
mAdStatusManagerFirst = null;
mAdStatusManagerSecond = null;
totalTime = 0;
adsItemIndex = 0;
this.streamUrl = streamUrl;
this.uuid = uuid;
this.uid = uid;
this.py = py;
this.ty = ty;
}
@Override
public ArrayList<CommonAdItem> doInBackground() {
Log.d("ads","RequestLiveFrontAd" + "streamUrl=" +streamUrl+ "uuid=" +uuid + "uid=" +uid + "py=" +py + "ty=" + "iPlayerStatusDelegate=" + iPlayerStatusDelegate);
if (isCancel()) {
return null;
}
Log.d("ads","RequestLiveFrontAd" + "streamUrl=" +streamUrl+ "uuid=" +uuid + "uid=" +uid + "py=" +py + "ty=" + "iPlayerStatusDelegate=" + iPlayerStatusDelegate);
return AdsHttpApi.getLiveFrontAd(context, streamUrl, uuid, uid, py, ty, iPlayerStatusDelegate, false);
}
@Override
public void onPostExecute(ArrayList<CommonAdItem> result) {
adsRequestTime = System.currentTimeMillis() - adsRequestTime;
curTask = null;
if (null != result && result.size() > 0) {
firstCommonAdItem = result.get(0);
adsItemIndex++;// distributeAdsInfo(result);
if (null == firstCommonAdItem) {
isHaveFrontAds = false;
FrontAdFinish();
return;
} else {
isHaveFrontAds = true;
totalTime += firstCommonAdItem.duration;
totalTimeTmp = totalTime;
// LogInfo.log("ads", " mCommonAdItem.mediaFileUrl =" +
// firstCommonAdItem.mediaFileUrl);
// LogInfo.log("ads", " mCommonAdItem.duration =" +
// firstCommonAdItem.duration);
}
} else {
isHaveFrontAds = false;
FrontAdFinish();
return;
}
// if (null != adInfo) {
// if (null != adListener) {
// adListener.onM3U8(result);
// }
// if(SimpleAdMediaType.VIDEO == adInfo.mediaFileType){
// return;
// }
// }
// mPlayAdInfo = result;
if (isCancel() || null == firstCommonAdItem) {
isHaveFrontAds = false;
FrontAdFinish();
return;
}
if (mVideoViewSecond != null) {
mVideoViewSecond.setVisibility(View.GONE);
}
isFirstVideoViewWorking = true;
mAdStatusManagerFirst = new AdStatusManager(firstCommonAdItem);
handler(firstCommonAdItem);
}
@Override
public void onPreExecute() {
// mVideoViewLayout.setVisibility(View.VISIBLE);
// if (!isPauseAd) {
// mLoading.setVisibility(View.VISIBLE);
// }
}
}
/**
* 请求点播暂停
* */
private class RequestDemandPauseAd extends LetvSimpleAsyncTask<CommonAdItem> {
private String cid;
private String aid;
private String vid;
private String mmsid;
private String uuid;
private String uid;
private String vlen;
private String py;
private String ty;
public RequestDemandPauseAd(Context context, int cid, long aid, long vid, String mmsid, String uuid,
String uid, String vlen, String py, String ty) {
super(context);
if (curTask != null)
curTask.cancel(true);
curTask = null;
curTask = this;
this.cid = String.valueOf(cid);
this.aid = String.valueOf(aid);
this.vid = String.valueOf(vid);
this.mmsid = mmsid;
this.uuid = uuid;
this.uid = uid;
this.vlen = vlen;
this.py = py;
this.ty = ty;
}
@Override
public CommonAdItem doInBackground() {
if (isCancel()) {
return null;
}
LogInfo.log("ads", "----------pause start----");
ArrayList<CommonAdItem> ads = AdsHttpApi.getPauseAd(context, cid, aid, vid, mmsid, uuid, uid, vlen, py, ty,
iPlayerStatusDelegate);
if (ads != null && ads.size() > 0) {
return ads.get(0);
}
return null;
}
@Override
public void onPostExecute(CommonAdItem result) {
curTask = null;
// mPlayAdInfo = result;
if (result == null) {
LogInfo.log("ads", "result is null");
return;
} else {
LogInfo.log("ads", "result.url =" + result.mediaFileUrl);
handlerPauseAd(result);
}
}
@Override
public void onPreExecute() {
}
}
/**
* 点击广告跳转到系统浏览器,并请求点击曝光地址和第三方点击曝光地址
*/
public void clickGotoWeb(CommonAdItem info) {
if (info.clickShowType == AdClickShowType.ExternalWebBrowser
|| info.clickShowType == AdClickShowType.InternalWebView) {
if (AdsUtils.checkClickEvent()) {
if (!TextUtils.isEmpty(info.getClickUrl())) {
AdsUtils.gotoWeb(getActivity(), info.getClickUrl(), info.clickShowType);
}
}
}
clickStatistics(info);
}
/**
* 曝光上报
* */
public void exposureStatistics(CommonAdItem info) {
/**
* 曝光统计
* */
if (adStatusManager != null) {
adStatusManager.onAdPlayStart();
}
}
/**
* 点击上报
* */
public void clickStatistics(CommonAdItem info) {
/**
* 点击统计
* */
if (adStatusManager != null) {
adStatusManager.onAdClicked();
// LogInfo.log("ads", "----------clickStatistics----------");
}
}
public boolean isShow() {
return isShow;
}
public void setShow(boolean isShow) {
this.isShow = isShow;
}
public interface PlayAdListener {
/**
* 广告结束
*
* @param isFinishByHand
* 是否是手动结束
*/
public void onFinish(boolean isFinishByHand ,boolean hasAds);
/**
* 广告拼接 m3u8
*
* @param ads
*/
public void onM3U8(ArrayList<CommonAdItem> ads);
}
public interface VipViewCallBack {
public void onClick();
public void ads3G2GClick();
public int getVideoCurrentTime();
};
public String getAc() {
if (isShow) {
return "001_0";
}
return "000_0";
}
IPlayerStatusDelegate iPlayerStatusDelegate = new IPlayerStatusDelegate() {
@Override
public int getVideoCurrentTime() {
if (viewCallBack != null) {
return viewCallBack.getVideoCurrentTime();
}
return 0;
}
@Override
public int getAdCurrentTime() {
if (curAdType == FRONT_MP4 && getCurrentWorkingVideo(isFirstVideoViewWorking) != null) {
return curTime >= adsPlayedTime * 1000 ? (curTime - adsPlayedTime * 1000) : 0;
} else if (curAdType == FRONT_JPG) {
return curTime * 1000;
}
return 0;
}
@Override
public Rect getPlayerRect() {
if (AdsManager.getInstance().getVideoCallBack() != null) {
return AdsManager.getInstance().getVideoCallBack().getPlayerRect();
}
return null;
}
@Override
public void pauseVideo() {
if (AdsManager.getInstance().getVideoCallBack() != null) {
AdsManager.getInstance().getVideoCallBack().pauseVideo();
}
}
@Override
public void resumeVideo() {
if (AdsManager.getInstance().getVideoCallBack() != null) {
AdsManager.getInstance().getVideoCallBack().resumeVideo();
}
}
};
/**
* 播放完成回调
* */
private OnCompletionListener onCompletionListenerFirst = new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mVideoViewFirst.stopPlayback();
mVideoViewFirst.setVisibility(View.INVISIBLE);
if (firstCommonAdItem != null) {
adsPlayedTime += firstCommonAdItem.duration;
if (mAdStatusManagerFirst != null) {
mAdStatusManagerFirst.onAdPlayComplete();
} else {
mAdStatusManagerFirst = new AdStatusManager(firstCommonAdItem);
mAdStatusManagerFirst.onAdPlayComplete();
}
// LogInfo.log("ads", "1---onCompletionListenerFirst---" +
// firstCommonAdItem.index);
}
if (secondCommonAdItem != null) {
// LogInfo.log("ads", "2---onCompletionListenerFirst---" +
// firstCommonAdItem.index);
whichVideoViewToPlay(false, secondCommonAdItem);
firstCommonAdItem = distributeAdsInfo(adsList);
if (firstCommonAdItem != null) {
if (!videoViewPlayInit(firstCommonAdItem.mediaFileUrl, true, firstCommonAdItem)) {
firstCommonAdItem = null;
}
}
} else {
FrontAdFinish();
stopHandlerTime();
}
}
};
/**
* 准备完成回调
* */
private OnPreparedListener mOnPreparedListenerFirst = new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
curAdType = FRONT_MP4;
if (!isFirstVideoViewWorking) {
mVideoViewFirst.pause();
} else {
startHandlerTime();
}
// LogInfo.log("ads", "---mOnPreparedListenerFirst---");
/**
* 加载完成统计
* */
if (firstCommonAdItem != null) {
if (mAdStatusManagerFirst != null) {
mAdStatusManagerFirst.onAdLoadComplete((int) (System.currentTimeMillis() - startTime));
} else {
mAdStatusManagerFirst = new AdStatusManager(firstCommonAdItem);
mAdStatusManagerFirst.onAdLoadComplete((int) (System.currentTimeMillis() - startTime));
}
}
}
};
/**
* 播放错误回调
* */
private OnErrorListener mOnErrorListenerFirst = new OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// LogInfo.log("ads", "---mOnErrorListenerFirst---");
mVideoViewFirst.setVisibility(View.INVISIBLE);
if (firstCommonAdItem != null) {
if (mAdStatusManagerFirst != null) {
mAdStatusManagerFirst.onAdLoadError();
} else {
mAdStatusManagerFirst = new AdStatusManager(firstCommonAdItem);
mAdStatusManagerFirst.onAdLoadError();
}
// LogInfo.log("ads", "0---firstCommonAdItem---" +
// firstCommonAdItem.index);
totalTime = totalTime - firstCommonAdItem.duration;
totalTimeTmp = totalTime;
}
if (secondCommonAdItem != null) {
// LogInfo.log("ads", "1---firstCommonAdItem---" +
// firstCommonAdItem.index);
if (isFirstVideoViewWorking) {// 第一个播放器出错,判断当前播放的是否是第一个,是则开始播放第二个;同时准备下个播放器(也就是第一个)
whichVideoViewToPlay(false, secondCommonAdItem);
}
firstCommonAdItem = distributeAdsInfo(adsList);
if (firstCommonAdItem != null) {
if (!videoViewPlayInit(firstCommonAdItem.mediaFileUrl, true, firstCommonAdItem)) {
firstCommonAdItem = null;
}
} else {
mVideoViewFirst.setVisibility(View.GONE);
}
} else {
stopHandlerTime();
FrontAdFinish();
onDestroy();
}
return true;
}
};
/**
* 播放完成回调
* */
private OnCompletionListener onCompletionListenerSecond = new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mVideoViewSecond.stopPlayback();
mVideoViewSecond.setVisibility(View.INVISIBLE);
if (secondCommonAdItem != null) {
adsPlayedTime += secondCommonAdItem.duration;
if (mAdStatusManagerSecond != null) {
mAdStatusManagerSecond.onAdPlayComplete();
} else {
mAdStatusManagerSecond = new AdStatusManager(secondCommonAdItem);
mAdStatusManagerSecond.onAdPlayComplete();
}
// LogInfo.log("ads",
// "---AdStatusManager onCompletionListenerSecond---");
}
// LogInfo.log("ads", "---onCompletionListenerSecond---");
if (firstCommonAdItem != null) {
whichVideoViewToPlay(true, firstCommonAdItem);// 第二个播放器播放完成,开始播放第一个;同时初始化第一个
secondCommonAdItem = distributeAdsInfo(adsList);
if (secondCommonAdItem != null) {
if (!videoViewPlayInit(secondCommonAdItem.mediaFileUrl, false, secondCommonAdItem)) {
secondCommonAdItem = null;
}
}
} else {
FrontAdFinish();
stopHandlerTime();
}
}
};
/**
* 准备完成回调
* */
private OnPreparedListener mOnPreparedListenerSecond = new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
curAdType = FRONT_MP4;
if (isFirstVideoViewWorking) {
mVideoViewSecond.pause();
} else {
startHandlerTime();
}
// LogInfo.log("ads", "---mOnPreparedListenerSecond---");
/**
* 加载完成统计
* */
if (secondCommonAdItem != null) {
if (mAdStatusManagerSecond != null) {
mAdStatusManagerSecond.onAdLoadComplete((int) (System.currentTimeMillis() - startTime));
} else {
mAdStatusManagerSecond = new AdStatusManager(secondCommonAdItem);
mAdStatusManagerSecond.onAdLoadComplete((int) (System.currentTimeMillis() - startTime));
}
}
}
};
/**
* 播放错误回调
* */
private OnErrorListener mOnErrorListenerSecond = new OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
mVideoViewSecond.setVisibility(View.INVISIBLE);
if (secondCommonAdItem != null) {
// LogInfo.log("ads", "---secondCommonAdItem---" +
// secondCommonAdItem.index);
if (mAdStatusManagerSecond != null) {
mAdStatusManagerSecond.onAdLoadError();
} else {
mAdStatusManagerSecond = new AdStatusManager(secondCommonAdItem);
mAdStatusManagerSecond.onAdLoadError();
}
totalTime = totalTime - secondCommonAdItem.duration;
totalTimeTmp = totalTime;
}
// LogInfo.log("ads", "---mOnErrorListenerSecond---");
if (firstCommonAdItem != null) {
if (!isFirstVideoViewWorking) {// 第二个播放器出错,判断当前播放的是否是第二个,是则开始播放第一个;同时准备下个播放器(也就是第二个)
whichVideoViewToPlay(true, firstCommonAdItem);
}
secondCommonAdItem = distributeAdsInfo(adsList);
if (secondCommonAdItem != null) {
if (!videoViewPlayInit(secondCommonAdItem.mediaFileUrl, false, secondCommonAdItem)) {
secondCommonAdItem = null;
}
} else {
mVideoViewSecond.setVisibility(View.GONE);
}
} else {
stopHandlerTime();
FrontAdFinish();
onDestroy();
}
return true;
}
};
/**
* 设置播放器数据、监听
*
* @param playUrl
* @param whichVideoView
* @return
*/
private boolean videoViewPlayInit(final String playUrl, final boolean whichVideoView, CommonAdItem adItem) {
if (!TextUtils.isEmpty(playUrl)) {
final VideoView mVideoView = getCurrentWorkingVideo(whichVideoView);
if (whichVideoView) {
mAdStatusManagerFirst = null;
mAdStatusManagerFirst = new AdStatusManager(adItem);
} else {
mAdStatusManagerSecond = null;
mAdStatusManagerSecond = new AdStatusManager(adItem);
}
if (VERSION.SDK_INT >= 11) {// android鐗堟湰鍙� 灏忎簬 11 鐨勭壒闇€澶勭悊锛� 涓嶆敮鎸佸弻缂撳啿
// if(whichVideoView) {//绗簩涓挱鏀惧櫒 鍑嗗 鍙互鏄剧ず 锛屼笉浼氶伄鎸$涓€涓�
mVideoView.setVisibility(View.VISIBLE);
// } else {
// mVideoView.setVisibility(View.INVISIBLE);
// }
mVideoView.setVideoPath(playUrl);
mVideoView.setOnErrorListener(whichVideoView ? mOnErrorListenerFirst : mOnErrorListenerSecond);
mVideoView.setOnPreparedListener(whichVideoView ? mOnPreparedListenerFirst : mOnPreparedListenerSecond);
mVideoView.setOnCompletionListener(whichVideoView ? onCompletionListenerFirst
: onCompletionListenerSecond);
mVideoView.requestFocus();
mVideoView.start();
}
return true;
} else {
return false;
}
}
/**
* 分发广告信息
*
* @param result
* @return
*/
private CommonAdItem distributeAdsInfo(ArrayList<CommonAdItem> result) {
if (result != null && result.size() > adsItemIndex) {
// LogInfo.log("ads", "result.size() =" + result.size() +
// " adsItemIndex =" + adsItemIndex);
adsItemIndex++;
return result.get(adsItemIndex - 1);
} else {
// LogInfo.log("ads", " null ----- " + " adsItemIndex =" +
// adsItemIndex);
return null;
}
}
/**
* 那个播放器开始播放
*
* @param which
*/
private void whichVideoViewToPlay(boolean which, CommonAdItem mAdItem) {
// LogInfo.log("ads", "1---which = " + which + "---mAdItem=" +
// mAdItem.index);
VideoView mVideoView = getCurrentWorkingVideo(which);
isFirstVideoViewWorking = which;
mVideoView.setVisibility(View.VISIBLE);
if(which){
mAdStatusManagerFirst = new AdStatusManager(mAdItem);
} else {
mAdStatusManagerSecond = new AdStatusManager(mAdItem);
}
if (VERSION.SDK_INT < 11) {// android版本号 小于 11 的特需处理, 不支持双缓冲
mVideoView.setVideoPath(mAdItem.mediaFileUrl);
mVideoView.setOnErrorListener(which ? mOnErrorListenerFirst : mOnErrorListenerSecond);
mVideoView.setOnPreparedListener(which ? mOnPreparedListenerFirst : mOnPreparedListenerSecond);
mVideoView.setOnCompletionListener(which ? onCompletionListenerFirst : onCompletionListenerSecond);
}
mVideoView.requestFocus();
startPlayHandler(mAdItem);
}
private void startPlayHandler(final CommonAdItem adInfo) {
if (!isReady || isDestroy) {
isPauseAd = false;
return;
}
if (adInfo == null) {
FrontAdFinish();
return;
}
if (adInfo.getCuePointType() == CuePointType.Standard) {
mTimeTextView.setVisibility(View.GONE);
} else {
mTimeTextView.setVisibility(View.VISIBLE);
}
if(isFirstVideoViewWorking){
if(mAdStatusManagerFirst == null){
mAdStatusManagerFirst = new AdStatusManager(adInfo);
}
adStatusManager = mAdStatusManagerFirst;
} else {
if(mAdStatusManagerSecond == null){
mAdStatusManagerSecond = new AdStatusManager(adInfo);
}
adStatusManager = mAdStatusManagerSecond;
}
// LogInfo.log("ads", "xxxxxxx---adInfo---" + adInfo.index);
if (SimpleAdMediaType.VIDEO == adInfo.mediaFileType) { // 显示视频广告
star();
isShow = true;
mVideoViewClick.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
clickGotoWeb(adInfo);
}
});
// totalTime = adInfo.duration;
exposureStatistics(adInfo);
} else if (SimpleAdMediaType.BITMAP == adInfo.mediaFileType) {// 显示图片广告
if (!TextUtils.isEmpty(adInfo.mediaFileUrl)) {
LetvCacheMannager.getInstance().loadImage(adInfo.mediaFileUrl, mImageView, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
isShow = true;
mImageView.setImageBitmap(loadedImage);
mImageView.setVisibility(View.VISIBLE);
mTimeTextView.setVisibility(View.VISIBLE);
muteView.setVisibility(View.GONE);
mTimeTextView.setVisibility(View.VISIBLE);
vipView.setVisibility(View.GONE);
mLoading.setVisibility(View.GONE);
curAdType = FRONT_JPG;
startHandlerTime();
/**
* 加载完成统计
* */
if (adStatusManager != null) {
adStatusManager.onAdLoadComplete((int) (System.currentTimeMillis() - startTime));
}
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
mImageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
clickGotoWeb(adInfo);
}
});
totalTime = adInfo.duration;
totalTimeTmp = totalTime;
exposureStatistics(adInfo);
}
} else {
FrontAdFinish();
}
}
/**
* 获取播放的videoView
*
* @return
*/
private VideoView getCurrentWorkingVideo(boolean isFirstVideoView) {
if (isFirstVideoView) {
return mVideoViewFirst;
} else {
return mVideoViewSecond;
}
}
/**
*
* @param ahs
* 广告拼接结果 广告前贴片
* @param vs
* 广告拼接结果 正片
*/
public void setAdJoinBean(String ahs, String vs) {
ArrayList<CommonAdItem> adListCopy = new ArrayList<CommonAdItem>();
if (adsList == null || adsList.size() <= 0) {
return;
}
adListCopy.addAll(adsList);
if (!TextUtils.isEmpty(ahs)) {
String[] splitStr = ahs.split(",");
int count = adListCopy.size();
if (count > 0 && count == splitStr.length) {
for (int i = 0; i < count; i++) {
adListCopy.get(i).combineErrorCode = splitStr[i];
}
adStatusManager.onAdLoadError(adListCopy);// 上传拼接错误广告
}
}
}
/**
* 新增IVideoStatusInformer ,用于客户端将播放状态通知给广告
*
* @return
*/
public IVideoStatusInformer getIVideoStatusInformer() {
if (informer != null) {
return informer;
}
return null;
}
/**
* 获取广告视频总时长
*
* @return
*/
public int getAdsVideoTotalTime() {
return totalTimeTmp;
}
/**
* 广告加载时长
*
* @return
*/
public long getAdsLoadingTime() {
return adsRequestTime;
}
/**
* 广告加载时长
*
* @return
*/
public long getAdsPlayLoadTime() {
return adsLoadingTime;
}
}