| | |
| | | import android.net.ConnectivityManager; |
| | | import android.net.NetworkInfo; |
| | | import android.os.Bundle; |
| | | import android.support.annotation.NonNull; |
| | | import android.support.annotation.Nullable; |
| | | import android.util.Log; |
| | | import android.view.LayoutInflater; |
| | | import android.view.SurfaceHolder; |
| | | import android.view.SurfaceView; |
| | | import android.view.View; |
| | |
| | | import android.widget.FrameLayout; |
| | | import android.widget.ImageView; |
| | | import android.widget.LinearLayout; |
| | | import android.widget.TextView; |
| | | import android.widget.Toast; |
| | | |
| | | import com.androidquery.AQuery; |
| | |
| | | |
| | | private MediaPlayer mediaPlayer; |
| | | |
| | | //展示广告 |
| | | private boolean mShowAd = false; |
| | | |
| | | public void setPageEventListener(IPageEventListener pageEventListener) { |
| | | this.pageEventListener = pageEventListener; |
| | | } |
| | |
| | | public int getContentResource() { |
| | | return R.layout.fragment_player_funshion; |
| | | } |
| | | |
| | | |
| | | private void initPlayer() { |
| | | mVideoSurfView.getHolder().addCallback(mVideoSurfaceViewCallBack); |
| | |
| | | fssrFeedAdLoader = new FSSRFeedAdLoader(getContext(), FunshionConstant.AD_CHANNEL); |
| | | } |
| | | |
| | | private void loadAD() { |
| | | /** |
| | | * 加载广告 |
| | | * |
| | | * @param iadLoadListener |
| | | */ |
| | | private synchronized void loadAD(IADLoadListener iadLoadListener) { |
| | | if (!mShowAd) { |
| | | iadLoadListener.finishAd(); |
| | | return; |
| | | } |
| | | |
| | | fl_ad.setVisibility(View.VISIBLE); |
| | | String adid = "bfys_a_qt"; |
| | | int width = fl_ad.getWidth(); |
| | | int height = fl_ad.getHeight(); |
| | |
| | | FSSRAdData fsad = fsADView.getFSAd(); |
| | | if (null != gdtad) { |
| | | //广点通数据自渲染 |
| | | initGDTSelfRenderView(fsADView, gdtad); |
| | | initGDTSelfRenderView(fsADView, gdtad, iadLoadListener); |
| | | } |
| | | if (null != fsad) { |
| | | //风行数据自渲染 |
| | | initFSSelfRenderView(fsADView, fsad); |
| | | initFSSelfRenderView(fsADView, fsad,iadLoadListener); |
| | | } |
| | | if (fsADView.getParent() != null) { |
| | | ((ViewGroup) fsADView.getParent()).removeAllViews(); |
| | |
| | | |
| | | } |
| | | |
| | | private void initFSSelfRenderView(final FSFeedAD fsADView, FSSRAdData fsad) { |
| | | private void initFSSelfRenderView(final FSFeedAD fsADView, FSSRAdData fsad,IADLoadListener iadLoadListener) { |
| | | if (fsad.isImage()) { |
| | | ImageView imageView = new ImageView(getContext()); |
| | | Glide.with(this).load(fsad.getMaterial()).into(imageView); |
| | |
| | | fsADView.bindAdToView(imageView, clickableViews, null); |
| | | } else if (fsad.isVideo()) { |
| | | MediaView mediaView = new MediaView(getContext()); |
| | | fsADView.bindMediaView(mediaView, null, null); |
| | | fsADView.bindMediaView(mediaView, null, new NativeADMediaListener() { |
| | | @Override |
| | | public void onVideoClicked() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoCompleted() { |
| | | iadLoadListener.finishAd(); |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoError(AdError adError) { |
| | | iadLoadListener.finishAd(); |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoInit() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoLoaded(int i) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoLoading() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoPause() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoReady() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoResume() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoStart() { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoStop() { |
| | | |
| | | } |
| | | }); |
| | | |
| | | final Button button = new Button(getContext()); |
| | | button.setText("打开声音"); |
| | |
| | | } |
| | | }); |
| | | List<View> clickableViews = new ArrayList<>(); |
| | | clickableViews.add(mediaView); |
| | | fsADView.bindAdToView(button, clickableViews, null); |
| | | } |
| | | } |
| | |
| | | protected MediaView mMediaView; |
| | | protected ImageView mImagePoster; |
| | | protected LinearLayout mNative3imgAdContainer; |
| | | private TextView tv_skip;//跳过 |
| | | private LayoutInflater mLayoutInflater; |
| | | |
| | | private NativeUnifiedADData gdtAd = null; |
| | | |
| | | int totalTime = 0; |
| | | |
| | | private Runnable timer = null; |
| | | |
| | | private synchronized void autoTimer(final View view) { |
| | | |
| | | if (timer == null) { |
| | | timer = new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | Log.i(TAG, "autoTimer:" + (remainTime - (gdtAd.getVideoCurrentPosition() / 1000))); |
| | | if (remainTime - (gdtAd.getVideoCurrentPosition() / 1000) > 0) { |
| | | tv_skip.setText((remainTime - (gdtAd.getVideoCurrentPosition() / 1000)) + "s后可跳过"); |
| | | tv_skip.setClickable(false); |
| | | } else { |
| | | tv_skip.setText("跳过"); |
| | | tv_skip.setClickable(true); |
| | | } |
| | | autoTimer(view); |
| | | } |
| | | }; |
| | | view.postDelayed(timer, 1000); |
| | | } else { |
| | | view.removeCallbacks(timer); |
| | | view.postDelayed(timer, 1000); |
| | | } |
| | | } |
| | | |
| | | |
| | | int remainTime = 0; |
| | | |
| | | //广告播放出错 |
| | | Runnable playADErrorRunnable = new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | if (gdtAd != null) { |
| | | gdtAd.destroy(); |
| | | adShowFinish(playInfo); |
| | | } |
| | | } |
| | | }; |
| | | |
| | | //自渲染view |
| | | private void initGDTSelfRenderView(FSFeedAD fsADView, NativeUnifiedADData ad) { |
| | | private void initGDTSelfRenderView(FSFeedAD fsADView, NativeUnifiedADData ad, IADLoadListener iadLoadListener) { |
| | | if (mLayoutInflater == null) |
| | | return; |
| | | gdtAd = ad; |
| | | View mContainer = getLayoutInflater().inflate(R.layout.sr_gdt_ad_view, null); |
| | | final View mContainer = mLayoutInflater.inflate(R.layout.sr_gdt_ad_view, null); |
| | | mDownloadButton = mContainer.findViewById(R.id.btn_download); |
| | | mMediaView = mContainer.findViewById(R.id.gdt_media_view); |
| | | mImagePoster = mContainer.findViewById(R.id.img_poster); |
| | | mNative3imgAdContainer = mContainer.findViewById(R.id.native_3img_ad_container); |
| | | tv_skip = mContainer.findViewById(R.id.tv_skip); |
| | | tv_skip.setVisibility(View.GONE); |
| | | tv_skip.setOnClickListener(new OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | iadLoadListener.finishAd(); |
| | | } |
| | | }); |
| | | |
| | | mAQuery = new AQuery(mContainer); |
| | | int patternType = ad.getAdPatternType(); |
| | | if (patternType == AdPatternType.NATIVE_VIDEO) { |
| | |
| | | params.height = FrameLayout.LayoutParams.MATCH_PARENT; |
| | | } |
| | | mContainer.setLayoutParams(params); |
| | | |
| | | } |
| | | if (patternType == AdPatternType.NATIVE_2IMAGE_2TEXT |
| | | || patternType == AdPatternType.NATIVE_VIDEO) { |
| | |
| | | } |
| | | }); |
| | | |
| | | //4秒内视频还没加载完成的话就跳过 |
| | | tv_skip.removeCallbacks(playADErrorRunnable); |
| | | tv_skip.postDelayed(playADErrorRunnable, 4000); |
| | | |
| | | VideoOption.Builder builder = new VideoOption.Builder(); |
| | | |
| | | builder.setAutoPlayPolicy(VideoOption.AutoPlayPolicy.ALWAYS); |
| | |
| | | @Override |
| | | public void onVideoLoaded(int videoDuration) { |
| | | Log.d(TAG, "onVideoLoaded: "); |
| | | tv_skip.removeCallbacks(playADErrorRunnable); |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoStart() { |
| | | Log.d(TAG, "onVideoStart"); |
| | | Log.d(TAG, "onVideoStart"); |
| | | if (ad.getVideoDuration() / 1000 > 5) |
| | | remainTime = 5; |
| | | else |
| | | remainTime = ad.getVideoDuration() / 1000; |
| | | |
| | | autoTimer(mContainer); |
| | | mContainer.post(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | tv_skip.setVisibility(View.VISIBLE); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | @Override |
| | |
| | | @Override |
| | | public void onVideoCompleted() { |
| | | Log.d(TAG, "onVideoCompleted: "); |
| | | adShowFinish(); |
| | | iadLoadListener.finishAd(); |
| | | } |
| | | |
| | | @Override |
| | | public void onVideoError(AdError error) { |
| | | |
| | | iadLoadListener.finishAd(); |
| | | } |
| | | |
| | | }); |
| | |
| | | |
| | | |
| | | //广告展示完成 |
| | | private void adShowFinish() { |
| | | private void adShowFinish(FunshionPlayInfo info) { |
| | | fl_ad.setVisibility(View.GONE); |
| | | fl_ad.removeAllViews(); |
| | | mFSVideoAD = null; |
| | |
| | | mVideoSurfView.postDelayed(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | EventBus.getDefault().post(playInfo); |
| | | //播放视频 |
| | | if (!StringUtils.isNullOrEmpty(info.getPlayUrl().getAid())) |
| | | playMedia(info.getPlayUrl().getAid(), (info.getPosition() + 1) + ""); |
| | | else |
| | | playVideo(info.getPlayUrl().getVid()); |
| | | } |
| | | }, 1000); |
| | | } |
| | |
| | | rl_container = view.findViewById(R.id.rl_container); |
| | | fl_container = view.findViewById(R.id.fl_container); |
| | | fl_ad = view.findViewById(R.id.fl_ad); |
| | | mLayoutInflater = LayoutInflater.from(getContext()); |
| | | } |
| | | |
| | | //创建广播接受者对象 |
| | |
| | | getContext().registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); |
| | | getContext().registerReceiver(networkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); |
| | | initAd(); |
| | | fl_ad.setVisibility(View.VISIBLE); |
| | | fl_ad.post(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | loadAD(); |
| | | } |
| | | }); |
| | | |
| | | mShowAd = true; |
| | | onEventMainThread(playInfo); |
| | | } |
| | | |
| | | @Override |
| | |
| | | VideoDefinition vdf = new VideoDefinition(); |
| | | vdf.setClarity(mCurrDefinition.getStringDefinition()); |
| | | vdf.setName(getDefinitionName(mCurrDefinition.getStringDefinition())); |
| | | |
| | | vpc_funshion.setDefinition(vdfList, vdf); |
| | | |
| | | Toast.makeText(BeibeiVideoApplication.application, "当前清晰度:" + currDefinition.getStringDefinition(), Toast.LENGTH_LONG).show(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | isReady = false; |
| | | |
| | | Log.d(TAG, "surfaceDestroyed"); |
| | | if (mVideoPlayer.isPlaying()) { |
| | | if (mVideoPlayer != null) { |
| | | position = mVideoPlayer.getCurrentPosition(); |
| | | Log.d(TAG, "当前播放时间:" + position); |
| | | } |
| | | if (mVideoPlayer.isPlaying()) { |
| | | mVideoPlayer.stop(); |
| | | } |
| | | } |
| | |
| | | mVideoPlayer.prepare(); |
| | | if (position > 0) |
| | | mVideoPlayer.seekTo(position); |
| | | position = -1; |
| | | Log.d(TAG, "续播时间:" + position); |
| | | position = -1; |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | |
| | | |
| | | @Override |
| | | public boolean onError(MediaPlayer mp, int what, int extra) { |
| | | mFunshionIVideoPlayer.onMediaPlayerError(what, extra); |
| | | if (mFunshionIVideoPlayer != null) |
| | | mFunshionIVideoPlayer.onMediaPlayerError(what, extra); |
| | | return false; |
| | | } |
| | | }; |
| | |
| | | |
| | | @Override |
| | | public void onDestroy() { |
| | | super.onDestroy(); |
| | | stopPlay(); |
| | | if (tv_skip != null) |
| | | tv_skip.setVisibility(View.GONE); |
| | | if (mFunshionIVideoPlayer != null) { |
| | | mFunshionIVideoPlayer.onActivityDestroy(); |
| | | mFunshionIVideoPlayer.release(); |
| | | } |
| | | |
| | | |
| | | mLayoutInflater = null; |
| | | super.onDestroy(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | super.onStop(); |
| | | if (mVideoPlayer != null && mVideoPlayer.isPlaying()) |
| | | mVideoPlayer.pause(); |
| | | |
| | | } |
| | | |
| | | @Override |
| | |
| | | gdtAd.resumeVideo(); |
| | | gdtAd.startVideo(); |
| | | } |
| | | |
| | | vpc_funshion.onResume(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | if (mFunshionIVideoPlayer != null) |
| | | mFunshionIVideoPlayer.onActivityPause(); |
| | | EventBus.getDefault().unregister(this); |
| | | vpc_funshion.onPause(); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | |
| | | public void onEventMainThread(FunshionPlayInfo info) { |
| | | Log.i(TAG, "onEventMainThread:FunshionPlayInfo"); |
| | | mCurrentPosition = info.getPosition(); |
| | | List<VideoEpisode> episodes = new ArrayList<>(); |
| | | for (int i = 0; i < info.getVideoInfo().getVideoDetailList().size(); i++) { |
| | | VideoDetailInfo detail = info.getVideoInfo().getVideoDetailList().get(i); |
| | | VideoEpisode es = new VideoEpisode(); |
| | | es.setId(detail.getId()); |
| | | es.setTag(detail.getTag()); |
| | | es.setName(detail.getName()); |
| | | es.setVideoId(info.getVideoInfo().getId()); |
| | | if (mCurrentPosition == i) |
| | | es.setVideoUrl(info.getPlayUrl().getUrl()); |
| | | episodes.add(es); |
| | | } |
| | | mCurrentPosition = info.getPosition(); |
| | | vpc_funshion.setContentView(fl_container).setVideoInfo(episodes, info.getVideoInfo().getName(), info.getPlayUrl().getUrl(), info.getPosition()).setVideoPlayerListener(this).build(getActivity(), FunshionPlayerFragment.this); |
| | | //播放视频 |
| | | // playVideo(info.getVideoInfo().getVideoDetailList().get(info.getPosition()).getId()); |
| | | |
| | | playMedia("99989", (info.getPosition() + 1) + ""); |
| | | vpc_funshion.setContentView(fl_container).setVideoInfo(episodes, info.getPosition(), mVideoInfo.getShowType(), "风行").setVideoPlayerListener(this).build(getActivity(), FunshionPlayerFragment.this); |
| | | loadAD(new IADLoadListener() { |
| | | @Override |
| | | public void finishAd() { |
| | | vpc_funshion.post(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | tv_skip.setVisibility(View.GONE); |
| | | adShowFinish(info); |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | //监听 |
| | |
| | | |
| | | @Override |
| | | public void selectEpisode(int p, VideoEpisode episode) { |
| | | mShowAd = false; |
| | | //选集 |
| | | final FunshionPlayInfo playInfo = new FunshionPlayInfo(); |
| | | playInfo = new FunshionPlayInfo(); |
| | | playInfo.setVideoInfo(mVideoInfo); |
| | | playInfo.setPosition(p); |
| | | playInfo.setCollected(collected); |
| | | VideoDetailInfo detailInfo = mVideoInfo.getVideoDetailList().get(p); |
| | | String uid = UserUtil.getUid(BeibeiVideoApplication.application); |
| | | if (mVideoPlayer != null && mVideoPlayer.isPlaying()) |
| | | mVideoPlayer.pause(); |
| | | |
| | | BeibeiVideoAPI.getPlayUrl(BeibeiVideoApplication.application, uid, detailInfo.getType(), mVideoInfo.getId(), |
| | | detailInfo.getId(), videoResource.getId(), detailInfo.geteId(), |
| | | new BasicTextHttpResponseHandler() { |
| | |
| | | }.getType()); |
| | | PlayUrl info = new PlayUrl(); |
| | | info.setResource(resource); |
| | | info.setPlayType(Integer.parseInt(jsonObject |
| | | .getJSONObject("Data") |
| | | JSONObject data = jsonObject.getJSONObject("Data"); |
| | | info.setPlayType(Integer.parseInt(data |
| | | .optString("PlayType"))); |
| | | info.setUrl(jsonObject.getJSONObject("Data") |
| | | .optString("Url")); |
| | | info.setParams(jsonObject.getJSONObject("Data") |
| | | info.setUrl( |
| | | data.optString("Url")); |
| | | info.setParams(data |
| | | .optString("Params")); |
| | | info.setAid(data.optString("Aid")); |
| | | info.setVid(data.optString("Vid")); |
| | | playInfo.setPlayUrl(info); |
| | | mShowAd = false; |
| | | EventBus.getDefault().post(playInfo); |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | //保存数据 |
| | | @Override |
| | | public void onSaveInstanceState(@NonNull Bundle outState) { |
| | | super.onSaveInstanceState(outState); |
| | | Log.i(TAG, "onSaveInstanceState"); |
| | | } |
| | | |
| | | //恢复数据 |
| | | @Override |
| | | public void onViewStateRestored(@Nullable Bundle savedInstanceState) { |
| | | super.onViewStateRestored(savedInstanceState); |
| | | Log.i(TAG, "onViewStateRestored"); |
| | | } |
| | | |
| | | interface IADLoadListener { |
| | | public void finishAd(); |
| | | } |
| | | } |