From baa3b2bfaa66e653b886b4f2f4ed974805db3125 Mon Sep 17 00:00:00 2001 From: cuihailong Date: Fri, 8 Mar 2019 17:32:33 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E6=8A=95=E5=B1=8F=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=9Aandroid8=E4=B9=8B=E5=90=8Elistitem=E4=B8=8D=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E5=B8=83=E5=B1=80=E5=86=85=E5=AE=B9=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/ctyun/videoplayer/widget/DanmukuVideoView.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/player/src/main/java/cn/ctyun/videoplayer/widget/DanmukuVideoView.java b/player/src/main/java/cn/ctyun/videoplayer/widget/DanmukuVideoView.java index 05c45cb..6d4e3d1 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/widget/DanmukuVideoView.java +++ b/player/src/main/java/cn/ctyun/videoplayer/widget/DanmukuVideoView.java @@ -817,7 +817,8 @@ public class DanmukuVideoView extends CacheIjkVideoView implements DanmuControlI private void showDevicesPop() { Log.d(TAG, "showDevicesPop()"); - mPopLayout.measure(View.MeasureSpec.AT_MOST, View.MeasureSpec.UNSPECIFIED); + //下面measure操作会导致Android 8.0以上手机弹出框第二次显示时listitem不加载 + //mPopLayout.measure(View.MeasureSpec.AT_MOST, View.MeasureSpec.UNSPECIFIED); mPopupWindow.setWidth((int)getResources().getDimension(R.dimen.dlna_pop_width)); mPopupWindow.showAtLocation(((Activity)mContext).getWindow().getDecorView(), Gravity.CENTER, 0, 0); // mLLSearching.setVisibility(View.VISIBLE); -- Gitee From 1611f026affe8adb446bc4435bab0c5ab47a916c Mon Sep 17 00:00:00 2001 From: liujt Date: Sun, 10 Mar 2019 11:22:39 +0800 Subject: [PATCH 02/12] =?UTF-8?q?UI=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/ctyun/player/activity/DemoActivity.java | 12 ++++++------ .../controller/StandardVideoController.java | 14 ++++++++++---- .../layout/dkplayer_layout_standard_controller.xml | 3 +-- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java b/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java index 52ea14c..e03b3d0 100644 --- a/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java +++ b/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java @@ -78,12 +78,12 @@ public class DemoActivity extends AppCompatActivity{ // 必选:设置播放源 List videos = new ArrayList<>(); -// videos.add(new VideoModel(URL_AD, "片头广告", Constants.VIDEO_TYPE_START_AD, new AdControllerListener() { -// @Override -// public void onAdClick() { -// Toast.makeText(DemoActivity.this, "广告点击跳转", Toast.LENGTH_SHORT).show(); -// } -// })); + videos.add(new VideoModel(URL_AD, "片头广告", Constants.VIDEO_TYPE_START_AD, new AdControllerListener() { + @Override + public void onAdClick() { + Toast.makeText(DemoActivity.this, "广告点击跳转", Toast.LENGTH_SHORT).show(); + } + })); videos.add(new VideoModel(URL_VOD, "这是一个标题", Constants.VIDEO_TYPE_VOD)); videos.add(new VideoModel(URL_AD, "片尾广告", Constants.VIDEO_TYPE_END_AD)); diff --git a/player/src/main/java/cn/ctyun/videoplayer/controller/StandardVideoController.java b/player/src/main/java/cn/ctyun/videoplayer/controller/StandardVideoController.java index 9fa6e04..4bdd4c5 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/controller/StandardVideoController.java +++ b/player/src/main/java/cn/ctyun/videoplayer/controller/StandardVideoController.java @@ -5,13 +5,11 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ActivityInfo; -import android.os.Build; import android.support.annotation.AttrRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.AttributeSet; -import android.util.DisplayMetrics; import android.util.Log; import android.view.View; import android.view.ViewGroup; @@ -248,7 +246,7 @@ public class StandardVideoController extends GestureVideoController implements V } public void showDLNAIcon() { - mDLNAButton.setVisibility(VISIBLE); +// mDLNAButton.setVisibility(VISIBLE); } public void setControllerListener(DLNAControllerInterface listener) { @@ -283,7 +281,7 @@ public class StandardVideoController extends GestureVideoController implements V mTitle.setVisibility(INVISIBLE); mSysTime.setVisibility(GONE); mBatteryLevel.setVisibility(GONE); - mTopContainer.setVisibility(VISIBLE); +// mTopContainer.setVisibility(VISIBLE); if (isPauseAdAvailable) { resizePauseAd(false); } @@ -493,6 +491,8 @@ public class StandardVideoController extends GestureVideoController implements V hideAllViews(); } } else { + mTopContainer.setVisibility(GONE); + mTopContainer.startAnimation(mHideAnim); mBottomContainer.setVisibility(GONE); mBottomContainer.startAnimation(mHideAnim); } @@ -505,6 +505,8 @@ public class StandardVideoController extends GestureVideoController implements V } protected void hideAllViews() { + mBackButton.setVisibility(GONE); + mBackButton.startAnimation(mHideAnim); mTopContainer.setVisibility(GONE); mTopContainer.startAnimation(mHideAnim); mBottomContainer.setVisibility(GONE); @@ -521,6 +523,8 @@ public class StandardVideoController extends GestureVideoController implements V showAllViews(); } } else { + mTopContainer.setVisibility(VISIBLE); + mTopContainer.startAnimation(mShowAnim); mBottomContainer.setVisibility(VISIBLE); mBottomContainer.startAnimation(mShowAnim); } @@ -537,6 +541,8 @@ public class StandardVideoController extends GestureVideoController implements V } protected void showAllViews() { + mBackButton.setVisibility(VISIBLE); + mBackButton.startAnimation(mShowAnim); mBottomContainer.setVisibility(VISIBLE); mBottomContainer.startAnimation(mShowAnim); mTopContainer.setVisibility(VISIBLE); diff --git a/player/src/main/res/layout/dkplayer_layout_standard_controller.xml b/player/src/main/res/layout/dkplayer_layout_standard_controller.xml index d3cf47c..c95f7dc 100644 --- a/player/src/main/res/layout/dkplayer_layout_standard_controller.xml +++ b/player/src/main/res/layout/dkplayer_layout_standard_controller.xml @@ -52,8 +52,7 @@ android:layout_height="20dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" - android:src="@drawable/dkplayer_icon_dlna" - android:visibility="gone" /> + android:src="@drawable/dkplayer_icon_dlna" /> Date: Mon, 11 Mar 2019 13:13:19 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E5=BC=B9=E5=B9=95UI=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=9B=E5=A4=9A=E6=AC=A1=E7=82=B9=E5=87=BB=E5=81=9C=E6=AD=A2?= =?UTF-8?q?=E6=92=AD=E6=94=BE=E5=B4=A9=E6=BA=83=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ctyun/player/activity/DemoActivity.java | 18 +++---- ...e.java => DanmakuControllerInterface.java} | 4 +- .../ListMediaPlayerControlInterface.java | 5 +- .../videoplayer/player/BaseIjkVideoView.java | 4 +- .../videoplayer/widget/DanmukuVideoView.java | 20 +++++++- .../ctyun/videoplayer/widget/VideoView.java | 47 ++++++++++--------- .../widget/controller/AdController.java | 3 +- .../widget/controller/DanmakuController.java | 39 +++++++++------ .../sel_btn_danmaku_control.xml | 5 +- 9 files changed, 91 insertions(+), 54 deletions(-) rename player/src/main/java/cn/ctyun/videoplayer/controller/{DanmuControlInterface.java => DanmakuControllerInterface.java} (66%) diff --git a/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java b/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java index e03b3d0..c8d5004 100644 --- a/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java +++ b/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java @@ -78,14 +78,16 @@ public class DemoActivity extends AppCompatActivity{ // 必选:设置播放源 List videos = new ArrayList<>(); - videos.add(new VideoModel(URL_AD, "片头广告", Constants.VIDEO_TYPE_START_AD, new AdControllerListener() { - @Override - public void onAdClick() { - Toast.makeText(DemoActivity.this, "广告点击跳转", Toast.LENGTH_SHORT).show(); - } - })); + // 片头广告 +// videos.add(new VideoModel(URL_AD, "", Constants.VIDEO_TYPE_START_AD, new AdControllerListener() { +// @Override +// public void onAdClick() { +// Toast.makeText(DemoActivity.this, "广告点击跳转", Toast.LENGTH_SHORT).show(); +// } +// })); videos.add(new VideoModel(URL_VOD, "这是一个标题", Constants.VIDEO_TYPE_VOD)); - videos.add(new VideoModel(URL_AD, "片尾广告", Constants.VIDEO_TYPE_END_AD)); + // 片尾广告 + videos.add(new VideoModel(URL_AD, "", Constants.VIDEO_TYPE_END_AD)); mVideoView.setVideos(videos); @@ -94,7 +96,7 @@ public class DemoActivity extends AppCompatActivity{ mVideoView.setVideoId("asdasdasdads"); // 启用弹幕 - mVideoView.enableDanmaku(); +// mVideoView.enableDanmaku(); // 启用投屏 mVideoView.enableDLNA(); // 自动播放 diff --git a/player/src/main/java/cn/ctyun/videoplayer/controller/DanmuControlInterface.java b/player/src/main/java/cn/ctyun/videoplayer/controller/DanmakuControllerInterface.java similarity index 66% rename from player/src/main/java/cn/ctyun/videoplayer/controller/DanmuControlInterface.java rename to player/src/main/java/cn/ctyun/videoplayer/controller/DanmakuControllerInterface.java index 218da87..dffe978 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/controller/DanmuControlInterface.java +++ b/player/src/main/java/cn/ctyun/videoplayer/controller/DanmakuControllerInterface.java @@ -1,6 +1,6 @@ package cn.ctyun.videoplayer.controller; -public interface DanmuControlInterface extends MediaPlayerControlInterface { +public interface DanmakuControllerInterface extends MediaPlayerControlInterface { void sendDanmu(int danmakuType, String text, float danmakuTextSize, int danmakuTextColor, boolean isLive); @@ -8,4 +8,6 @@ public interface DanmuControlInterface extends MediaPlayerControlInterface { void releaseDanmaku(); + boolean isDanmakuEnable(); + } \ No newline at end of file diff --git a/player/src/main/java/cn/ctyun/videoplayer/interf/ListMediaPlayerControlInterface.java b/player/src/main/java/cn/ctyun/videoplayer/interf/ListMediaPlayerControlInterface.java index 9d90ad0..9a6d3f6 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/interf/ListMediaPlayerControlInterface.java +++ b/player/src/main/java/cn/ctyun/videoplayer/interf/ListMediaPlayerControlInterface.java @@ -1,12 +1,12 @@ package cn.ctyun.videoplayer.interf; -import cn.ctyun.videoplayer.controller.DanmuControlInterface; +import cn.ctyun.videoplayer.controller.DanmakuControllerInterface; /** * Created by xinyu on 2017/12/25. */ -public interface ListMediaPlayerControlInterface extends DanmuControlInterface { +public interface ListMediaPlayerControlInterface extends DanmakuControllerInterface { void skipToNext(); @@ -18,5 +18,4 @@ public interface ListMediaPlayerControlInterface extends DanmuControlInterface { void stopEndAd(); - void restart(); } diff --git a/player/src/main/java/cn/ctyun/videoplayer/player/BaseIjkVideoView.java b/player/src/main/java/cn/ctyun/videoplayer/player/BaseIjkVideoView.java index f820725..41b7597 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/player/BaseIjkVideoView.java +++ b/player/src/main/java/cn/ctyun/videoplayer/player/BaseIjkVideoView.java @@ -227,8 +227,10 @@ public abstract class BaseIjkVideoView extends FrameLayout implements MediaPlaye */ @Override public void start() { - if (mCurrentPlayState == STATE_IDLE || mCurrentPlayState == STATE_PLAYBACK_COMPLETED) { + if (mCurrentPlayState == STATE_IDLE) { startPlay(); + } else if (mCurrentPlayState == STATE_PLAYBACK_COMPLETED) { + retry(); } else if (isInPlaybackState()) { startInPlaybackState(); } diff --git a/player/src/main/java/cn/ctyun/videoplayer/widget/DanmukuVideoView.java b/player/src/main/java/cn/ctyun/videoplayer/widget/DanmukuVideoView.java index 6d4e3d1..0fa5214 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/widget/DanmukuVideoView.java +++ b/player/src/main/java/cn/ctyun/videoplayer/widget/DanmukuVideoView.java @@ -46,7 +46,7 @@ import java.util.HashMap; import cn.ctyun.videoplayer.R; import cn.ctyun.videoplayer.adapter.DLNADevicesAdapter; import cn.ctyun.videoplayer.controller.DLNAControllerInterface; -import cn.ctyun.videoplayer.controller.DanmuControlInterface; +import cn.ctyun.videoplayer.controller.DanmakuControllerInterface; import cn.ctyun.videoplayer.controller.StandardVideoController; import cn.ctyun.videoplayer.danmaku.BiliDanmukuParser; import cn.ctyun.videoplayer.dlnaupnp.Intents; @@ -85,8 +85,9 @@ import master.flame.danmaku.ui.widget.DanmakuView; * Created by liujingtao on 2019/2/25. */ -public class DanmukuVideoView extends CacheIjkVideoView implements DanmuControlInterface, View.OnClickListener { +public class DanmukuVideoView extends CacheIjkVideoView implements DanmakuControllerInterface, View.OnClickListener { + private boolean mDanmakuEnable; // 弹幕视图 private DanmakuView mDanmakuView; // 弹幕控制相关 @@ -301,6 +302,13 @@ public class DanmukuVideoView extends CacheIjkVideoView implements DanmuControlI } public void enableDanmaku() { + + mDanmakuEnable = true; + + if (mVideoController instanceof DanmakuController) { + ((DanmakuController)mVideoController).selectDanmakuControl(true); + } + // 设置最大显示行数 HashMap maxLinesPair = new HashMap(); maxLinesPair.put(BaseDanmaku.TYPE_SCROLL_RL, 5); // 滚动弹幕最大显示5行 @@ -1006,4 +1014,12 @@ public class DanmukuVideoView extends CacheIjkVideoView implements DanmuControlI } } } + + public boolean isDanmakuEnable() { + return mDanmakuEnable; + } + + public void setDanmakuEnable(boolean mDanmakuEnable) { + this.mDanmakuEnable = mDanmakuEnable; + } } diff --git a/player/src/main/java/cn/ctyun/videoplayer/widget/VideoView.java b/player/src/main/java/cn/ctyun/videoplayer/widget/VideoView.java index 3aba336..547e70d 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/widget/VideoView.java +++ b/player/src/main/java/cn/ctyun/videoplayer/widget/VideoView.java @@ -8,16 +8,6 @@ import android.util.AttributeSet; import android.util.Log; import android.widget.Toast; - -import cn.ctyun.videoplayer.bean.M3u8PlayList; -import cn.ctyun.videoplayer.bean.VideoModel; -import cn.ctyun.videoplayer.controller.MediaPlayerControlInterface; -import cn.ctyun.videoplayer.controller.StandardVideoController; -import cn.ctyun.videoplayer.interf.ListMediaPlayerControlInterface; -import cn.ctyun.videoplayer.util.Constants; -import cn.ctyun.videoplayer.util.HttpUtils; -import cn.ctyun.videoplayer.widget.controller.AdController; -import cn.ctyun.videoplayer.widget.controller.DanmakuController; import com.iheartradio.m3u8.Encoding; import com.iheartradio.m3u8.Format; import com.iheartradio.m3u8.ParseException; @@ -35,6 +25,13 @@ import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; +import cn.ctyun.videoplayer.bean.M3u8PlayList; +import cn.ctyun.videoplayer.bean.VideoModel; +import cn.ctyun.videoplayer.interf.ListMediaPlayerControlInterface; +import cn.ctyun.videoplayer.util.Constants; +import cn.ctyun.videoplayer.util.HttpUtils; +import cn.ctyun.videoplayer.widget.controller.AdController; +import cn.ctyun.videoplayer.widget.controller.DanmakuController; import okhttp3.Call; import okhttp3.Response; @@ -67,6 +64,9 @@ public class VideoView extends DefinitionIjkVideoView implements ListMediaPlayer @Override public void stop() { + if (mVideoModels == null || mCurrentVideoPosition > mVideoModels.size() - 1) { + return; + } VideoModel videoModel = mVideoModels.get(mCurrentVideoPosition); if (Constants.VIDEO_TYPE_START_AD.equals(videoModel.getVideoType()) || Constants.VIDEO_TYPE_END_AD.equals(videoModel.getVideoType())) { @@ -88,16 +88,15 @@ public class VideoView extends DefinitionIjkVideoView implements ListMediaPlayer @Override public void stopStartAd() { - if (mVideoModels != null && mVideoModels.size() > 0) { - if (mCurrentVideoPosition < mVideoModels.size()) { - VideoModel videoModel = mVideoModels.get(mCurrentVideoPosition); - if (Constants.VIDEO_TYPE_START_AD.equals(videoModel.getVideoType())) { - if (mCurrentVideoPosition + 1 == mVideoModels.size()) { // 已经最后一个,直接停止 - super.stop(); - } else { - skipToNext(); - } - } + if (mVideoModels == null || mCurrentVideoPosition > mVideoModels.size() - 1) { + return; + } + VideoModel videoModel = mVideoModels.get(mCurrentVideoPosition); + if (Constants.VIDEO_TYPE_START_AD.equals(videoModel.getVideoType())) { + if (mCurrentVideoPosition + 1 == mVideoModels.size()) { // 已经最后一个,直接停止 + super.stop(); + } else { + skipToNext(); } } } @@ -120,8 +119,11 @@ public class VideoView extends DefinitionIjkVideoView implements ListMediaPlayer } } + /** + * 重新播放 + */ @Override - public void restart() { + public void retry() { mCurrentVideoPosition = 0; playNext(); addDisplay(); @@ -142,6 +144,9 @@ public class VideoView extends DefinitionIjkVideoView implements ListMediaPlayer * 播放下一条视频 */ private void playNext() { + if (mVideoModels == null || mCurrentVideoPosition > mVideoModels.size() - 1) { + return; + } VideoModel videoModel = mVideoModels.get(mCurrentVideoPosition); if (videoModel != null) { diff --git a/player/src/main/java/cn/ctyun/videoplayer/widget/controller/AdController.java b/player/src/main/java/cn/ctyun/videoplayer/widget/controller/AdController.java index d40cb81..a2c3134 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/widget/controller/AdController.java +++ b/player/src/main/java/cn/ctyun/videoplayer/widget/controller/AdController.java @@ -102,7 +102,8 @@ public class AdController extends BaseVideoController implements View.OnClickLis } else if (id == R.id.start_play) { doPauseResume(); } else if (id == R.id.iv_replay) { - ((ListMediaPlayerControlInterface)mMediaPlayer).restart(); +// ((ListMediaPlayerControlInterface)mMediaPlayer).restart(); + mMediaPlayer.retry(); } } diff --git a/player/src/main/java/cn/ctyun/videoplayer/widget/controller/DanmakuController.java b/player/src/main/java/cn/ctyun/videoplayer/widget/controller/DanmakuController.java index d57322c..7a0a83d 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/widget/controller/DanmakuController.java +++ b/player/src/main/java/cn/ctyun/videoplayer/widget/controller/DanmakuController.java @@ -11,10 +11,9 @@ import android.widget.EditText; import android.widget.ImageView; import android.widget.RadioButton; import android.widget.RadioGroup; -import android.widget.Toast; import cn.ctyun.videoplayer.R; -import cn.ctyun.videoplayer.controller.DanmuControlInterface; +import cn.ctyun.videoplayer.controller.DanmakuControllerInterface; import cn.ctyun.videoplayer.player.IjkVideoView; import cn.ctyun.videoplayer.util.AnimHelper; import cn.ctyun.videoplayer.util.NavUtils; @@ -107,6 +106,12 @@ public class DanmakuController extends DefinitionController { mIvDanmakuControl.setOnClickListener(this); mOpenEditDanmaku = mControllerView.findViewById(R.id.iv_open_edit_danmaku); mOpenEditDanmaku.setOnClickListener(this); + if (mMediaPlayer instanceof DanmakuControllerInterface) { + if (!((DanmakuControllerInterface) mMediaPlayer).isDanmakuEnable()) { + mIvDanmakuControl.setVisibility(GONE); + mOpenEditDanmaku.setVisibility(GONE); + } + } mEditDanmakuLayout = findViewById(R.id.ll_edit_danmaku); mEtDanmakuContent = findViewById(R.id.et_danmaku_content); int navigationBarHeight = NavUtils.getNavigationBarHeight(getContext()); @@ -119,7 +124,7 @@ public class DanmakuController extends DefinitionController { mIvDoSendDanmaku = mControllerView.findViewById(R.id.iv_do_send); mIvDoSendDanmaku.setOnClickListener(this); - // TODO: 2019/2/28 默认状态 + mIvDanmakuControl.setSelected(false); // if (mIvDanmakuControl.isSelected()) { // mOpenEditDanmaku.setVisibility(GONE); @@ -183,9 +188,9 @@ public class DanmakuController extends DefinitionController { case IjkVideoView.PLAYER_FULL_SCREEN: if (mShowing) { if (mIvDanmakuControl.isSelected()) { - mOpenEditDanmaku.setVisibility(GONE); - } else { mOpenEditDanmaku.setVisibility(VISIBLE); + } else { + mOpenEditDanmaku.setVisibility(GONE); } } break; @@ -209,11 +214,11 @@ public class DanmakuController extends DefinitionController { recoverFromEditVideo(); } else if (i == R.id.iv_do_send) { recoverFromEditVideo(); - if (mMediaPlayer instanceof DanmuControlInterface) { + if (mMediaPlayer instanceof DanmakuControllerInterface) { if (mDanmakuTextSize == INVALID_VALUE) { mDanmakuTextSize = 25f * (((DanmukuVideoView)mMediaPlayer).getDanmakuParser().getDisplayer().getDensity() - 0.6f); } - ((DanmuControlInterface) mMediaPlayer).sendDanmu(mDanmakuType, + ((DanmakuControllerInterface) mMediaPlayer).sendDanmu(mDanmakuType, mEtDanmakuContent.getText().toString(), mDanmakuTextSize, mDanmakuTextColor, false); mEtDanmakuContent.setText(""); } @@ -222,20 +227,24 @@ public class DanmakuController extends DefinitionController { } } + public void selectDanmakuControl(boolean isSelected) { + mIvDanmakuControl.setSelected(isSelected); + } + /** * 切换弹幕的显示/隐藏 */ private void _toggleDanmakuShow() { if (mIvDanmakuControl.isSelected()) { mOpenEditDanmaku.setVisibility(GONE); - showOrHideDanmaku(true); + showOrHideDanmaku(false); } else { - // 竖屏才显示此按钮 + // 横屏才显示此按钮 if (IjkVideoView.PLAYER_FULL_SCREEN == mCurrentPlayerState) { mOpenEditDanmaku.setVisibility(VISIBLE); } - showOrHideDanmaku(false); + showOrHideDanmaku(true); } } @@ -247,12 +256,12 @@ public class DanmakuController extends DefinitionController { */ public void showOrHideDanmaku(boolean isShow) { if (isShow) { - mIvDanmakuControl.setSelected(false); - } else { mIvDanmakuControl.setSelected(true); + } else { + mIvDanmakuControl.setSelected(false); } - if (mMediaPlayer instanceof DanmuControlInterface) { - ((DanmuControlInterface) mMediaPlayer).showOrHideDanmaku(isShow); + if (mMediaPlayer instanceof DanmakuControllerInterface) { + ((DanmakuControllerInterface) mMediaPlayer).showOrHideDanmaku(isShow); } } @@ -340,7 +349,7 @@ public class DanmakuController extends DefinitionController { switch (playState) { case IjkVideoView.STATE_PLAYBACK_COMPLETED: // Toast.makeText(mAttachActivity, "dasdasd", Toast.LENGTH_SHORT).show(); - ((DanmuControlInterface) mMediaPlayer).releaseDanmaku(); + ((DanmakuControllerInterface) mMediaPlayer).releaseDanmaku(); // showOrHideDanmaku(false); break; } diff --git a/player/src/main/res/drawable-xxhdpi/sel_btn_danmaku_control.xml b/player/src/main/res/drawable-xxhdpi/sel_btn_danmaku_control.xml index 376f705..24a3498 100644 --- a/player/src/main/res/drawable-xxhdpi/sel_btn_danmaku_control.xml +++ b/player/src/main/res/drawable-xxhdpi/sel_btn_danmaku_control.xml @@ -1,6 +1,7 @@ - - + + + \ No newline at end of file -- Gitee From f4ece4c10368c093e3a895a2d76c611f8b09a241 Mon Sep 17 00:00:00 2001 From: liujt Date: Mon, 11 Mar 2019 17:52:30 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E5=BC=B9=E5=B9=95=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E8=AE=BE=E7=BD=AE=EF=BC=9B=E6=A8=AA=E7=AB=96=E5=B1=8F?= =?UTF-8?q?=E5=88=87=E6=8D=A2=EF=BC=8C=E8=BF=94=E5=9B=9E=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ctyun/player/activity/DemoActivity.java | 8 +- .../controller/StandardVideoController.java | 4 +- .../videoplayer/widget/DanmukuVideoView.java | 222 +++++++----------- .../widget/controller/DanmakuController.java | 29 ++- .../dkplayer_layout_standard_controller.xml | 4 + 5 files changed, 120 insertions(+), 147 deletions(-) diff --git a/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java b/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java index c8d5004..c976535 100644 --- a/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java +++ b/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java @@ -87,7 +87,7 @@ public class DemoActivity extends AppCompatActivity{ // })); videos.add(new VideoModel(URL_VOD, "这是一个标题", Constants.VIDEO_TYPE_VOD)); // 片尾广告 - videos.add(new VideoModel(URL_AD, "", Constants.VIDEO_TYPE_END_AD)); +// videos.add(new VideoModel(URL_AD, "", Constants.VIDEO_TYPE_END_AD)); mVideoView.setVideos(videos); @@ -95,8 +95,10 @@ public class DemoActivity extends AppCompatActivity{ // 设置播放器id mVideoView.setVideoId("asdasdasdads"); - // 启用弹幕 -// mVideoView.enableDanmaku(); + // 启用弹幕,进入播放器不展示弹幕 + mVideoView.enableDanmaku(); + // 启用弹幕,进入播放器就展示弹幕 +// mVideoView.enableDanmaku(true); // 启用投屏 mVideoView.enableDLNA(); // 自动播放 diff --git a/player/src/main/java/cn/ctyun/videoplayer/controller/StandardVideoController.java b/player/src/main/java/cn/ctyun/videoplayer/controller/StandardVideoController.java index 4bdd4c5..d30cb6b 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/controller/StandardVideoController.java +++ b/player/src/main/java/cn/ctyun/videoplayer/controller/StandardVideoController.java @@ -276,7 +276,7 @@ public class StandardVideoController extends GestureVideoController implements V mIsGestureEnabled = false; // mFullScreenButton.setSelected(false); mFullScreenButton.setVisibility(VISIBLE); -// mBackButton.setVisibility(GONE); + mBackButton.setVisibility(VISIBLE); mLockButton.setVisibility(GONE); mTitle.setVisibility(INVISIBLE); mSysTime.setVisibility(GONE); @@ -301,8 +301,10 @@ public class StandardVideoController extends GestureVideoController implements V mBatteryLevel.setVisibility(VISIBLE); if (mShowing) { mLockButton.setVisibility(VISIBLE); + mBackButton.setVisibility(VISIBLE); mTopContainer.setVisibility(VISIBLE); } else { + mBackButton.setVisibility(GONE); mLockButton.setVisibility(GONE); } if (isPauseAdAvailable) { diff --git a/player/src/main/java/cn/ctyun/videoplayer/widget/DanmukuVideoView.java b/player/src/main/java/cn/ctyun/videoplayer/widget/DanmukuVideoView.java index 0fa5214..e742844 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/widget/DanmukuVideoView.java +++ b/player/src/main/java/cn/ctyun/videoplayer/widget/DanmukuVideoView.java @@ -87,7 +87,10 @@ import master.flame.danmaku.ui.widget.DanmakuView; public class DanmukuVideoView extends CacheIjkVideoView implements DanmakuControllerInterface, View.OnClickListener { + // 是否启用弹幕 private boolean mDanmakuEnable; + // 是否初始化显示弹幕 + private boolean mIsShowDanmakuInit; // 弹幕视图 private DanmakuView mDanmakuView; // 弹幕控制相关 @@ -100,18 +103,17 @@ public class DanmukuVideoView extends CacheIjkVideoView implements DanmakuContro private View mBottomDivider; public DanmukuVideoView(@NonNull Context context) { - super(context); - mContext = context; + this(context, null); } public DanmukuVideoView(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - mContext = context; + this(context, attrs, 0); } public DanmukuVideoView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mContext = context; + initDanMuView(); } @Override @@ -127,9 +129,10 @@ public class DanmukuVideoView extends CacheIjkVideoView implements DanmakuContro @Override protected void startPrepare(boolean needReset) { super.startPrepare(needReset); + if (mDanmakuView != null && mDanmakuParser != null && mDanmakuContext != null) { if (mVideoController instanceof DanmakuController) { - showOrHideDanmaku(true); + showOrHideDanmaku(mIsShowDanmakuInit); mDanmakuView.prepare(mDanmakuParser, mDanmakuContext); } else { showOrHideDanmaku(false); @@ -224,162 +227,107 @@ public class DanmukuVideoView extends CacheIjkVideoView implements DanmakuContro } public void initDanMuView() { -// 设置最大显示行数 -// HashMap maxLinesPair = new HashMap<>(); -// maxLinesPair.put(BaseDanmaku.TYPE_SCROLL_RL, 5); // 滚动弹幕最大显示5行 -// // 设置是否禁止重叠 -// HashMap overlappingEnablePair = new HashMap<>(); -// overlappingEnablePair.put(BaseDanmaku.TYPE_SCROLL_RL, true); -// overlappingEnablePair.put(BaseDanmaku.TYPE_FIX_TOP, true); - - setDanmakuSource(getResources().openRawResource(R.raw.bili)); - - mDanmakuView = new DanmakuView(getContext()); - mDanmakuContext = DanmakuContext.create(); -// mDanmakuContext.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3).setDuplicateMergingEnabled(false).setScrollSpeedFactor(1.2f).setScaleTextSize(1.2f) -//// .setCacheStuffer(new SpannedCacheStuffer(), null) // 图文混排使用SpannedCacheStuffer -// .setCacheStuffer(new BackgroundCacheStuffer(), null) // 绘制背景使用BackgroundCacheStuffer -// .setMaximumLines(maxLinesPair) -// .preventOverlapping(overlappingEnablePair).setDanmakuMargin(40); - if (mDanmakuView != null) { - if (mDanmakuParser == null) { - mDanmakuParser = new BaseDanmakuParser() { - @Override - protected IDanmakus parse() { - return new Danmakus(); - } - }; + if (mVideoController instanceof DanmakuController) { + ((DanmakuController)mVideoController).selectDanmakuControl(true); } - mDanmakuView.setCallback(new master.flame.danmaku.controller.DrawHandler.Callback() { - @Override - public void updateTimer(DanmakuTimer timer) { - } - - @Override - public void drawingFinished() { - - } - - @Override - public void danmakuShown(BaseDanmaku danmaku) { -// Log.d("DFM", "danmakuShown(): text=" + danmaku.text); - } - - @Override - public void prepared() { - mDanmakuView.start(); - } - }); -// mDanmakuView.setOnDanmakuClickListener(new IDanmakuView.OnDanmakuClickListener() { -// -// @Override -// public boolean onDanmakuClick(IDanmakus danmakus) { -// Log.d("DFM", "onDanmakuClick: danmakus size:" + danmakus.size()); -// BaseDanmaku latest = danmakus.last(); -// if (null != latest) { -// Log.d("DFM", "onDanmakuClick: text of latest danmaku:" + latest.text); -// return true; -// } -// return false; -// } -// -// @Override -// public boolean onDanmakuLongClick(IDanmakus danmakus) { -// return false; -// } -// -// @Override -// public boolean onViewClick(IDanmakuView view) { -// return false; -// } -// }); -// mDanmakuView.showFPS(true); - mDanmakuView.enableDanmakuDrawingCache(true); -// mDanmakuView.prepare(mDanmakuParser, mDanmakuContext); - } - } - - public void enableDanmaku() { - - mDanmakuEnable = true; - - if (mVideoController instanceof DanmakuController) { - ((DanmakuController)mVideoController).selectDanmakuControl(true); - } - - // 设置最大显示行数 - HashMap maxLinesPair = new HashMap(); - maxLinesPair.put(BaseDanmaku.TYPE_SCROLL_RL, 5); // 滚动弹幕最大显示5行 - // 设置是否禁止重叠 - HashMap overlappingEnablePair = new HashMap(); - overlappingEnablePair.put(BaseDanmaku.TYPE_SCROLL_RL, true); - overlappingEnablePair.put(BaseDanmaku.TYPE_FIX_TOP, true); + // 设置最大显示行数 + HashMap maxLinesPair = new HashMap(); + maxLinesPair.put(BaseDanmaku.TYPE_SCROLL_RL, 5); // 滚动弹幕最大显示5行 + // 设置是否禁止重叠 + HashMap overlappingEnablePair = new HashMap(); + overlappingEnablePair.put(BaseDanmaku.TYPE_SCROLL_RL, true); + overlappingEnablePair.put(BaseDanmaku.TYPE_FIX_TOP, true); // mDanmakuView = (IDanmakuView) findViewById(R.id.sv_danmaku); - mDanmakuView = new DanmakuView(getContext()); - mDanmakuContext = DanmakuContext.create(); - mDanmakuContext.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3) - .setDuplicateMergingEnabled(false) + mDanmakuView = new DanmakuView(getContext()); + mDanmakuContext = DanmakuContext.create(); + mDanmakuContext.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3) + .setDuplicateMergingEnabled(false) // .setScrollSpeedFactor(1.2f) // .setScaleTextSize(1.2f) // .setCacheStuffer(new BackgroundCacheStuffer(), mCacheStufferAdapter) // 图文混排使用SpannedCacheStuffer // .setCacheStuffer(new BackgroundCacheStuffer()) // 绘制背景使用BackgroundCacheStuffer - .setMaximumLines(maxLinesPair) - .preventOverlapping(overlappingEnablePair).setDanmakuMargin(40); - if (mDanmakuView != null) { - mDanmakuParser = createParser(this.getResources().openRawResource(R.raw.bili)); - mDanmakuView.setCallback(new master.flame.danmaku.controller.DrawHandler.Callback() { - @Override - public void updateTimer(DanmakuTimer timer) { - } + .setMaximumLines(maxLinesPair) + .preventOverlapping(overlappingEnablePair).setDanmakuMargin(40); + if (mDanmakuView != null) { + mDanmakuParser = createParser(this.getResources().openRawResource(R.raw.bili)); + mDanmakuView.setCallback(new master.flame.danmaku.controller.DrawHandler.Callback() { + @Override + public void updateTimer(DanmakuTimer timer) { + } - @Override - public void drawingFinished() { + @Override + public void drawingFinished() { - } + } - @Override - public void danmakuShown(BaseDanmaku danmaku) { + @Override + public void danmakuShown(BaseDanmaku danmaku) { // Log.d("DFM", "danmakuShown(): text=" + danmaku.text); - } + } - @Override - public void prepared() { - mDanmakuView.start(); - } - }); - mDanmakuView.setOnDanmakuClickListener(new IDanmakuView.OnDanmakuClickListener() { + @Override + public void prepared() { + mDanmakuView.start(); + } + }); + mDanmakuView.setOnDanmakuClickListener(new IDanmakuView.OnDanmakuClickListener() { - @Override - public boolean onDanmakuClick(IDanmakus danmakus) { - Log.d("DFM", "onDanmakuClick: danmakus size:" + danmakus.size()); - BaseDanmaku latest = danmakus.last(); - if (null != latest) { - Log.d("DFM", "onDanmakuClick: text of latest danmaku:" + latest.text); - return true; + @Override + public boolean onDanmakuClick(IDanmakus danmakus) { + Log.d("DFM", "onDanmakuClick: danmakus size:" + danmakus.size()); + BaseDanmaku latest = danmakus.last(); + if (null != latest) { + Log.d("DFM", "onDanmakuClick: text of latest danmaku:" + latest.text); + return true; + } + return false; } - return false; - } - @Override - public boolean onDanmakuLongClick(IDanmakus danmakus) { - return false; - } + @Override + public boolean onDanmakuLongClick(IDanmakus danmakus) { + return false; + } - @Override - public boolean onViewClick(IDanmakuView view) { + @Override + public boolean onViewClick(IDanmakuView view) { // mMediaController.setVisibility(View.VISIBLE); - return false; - } - }); + return false; + } + }); // mDanmakuView.prepare(mDanmakuParser, mDanmakuContext); // mDanmakuView.showFPS(true); - mDanmakuView.enableDanmakuDrawingCache(true); + mDanmakuView.enableDanmakuDrawingCache(true); + } + + } + + public void enableDanmaku() { + mDanmakuEnable = true; + mIsShowDanmakuInit = false; // 默认关闭弹幕 + if (mVideoController instanceof DanmakuController) { + ((DanmakuController) mVideoController).enableDanmaku(); + } + } + + public void enableDanmaku(boolean showDanmakuInit) { + mDanmakuEnable = true; + mIsShowDanmakuInit = showDanmakuInit; + if (mVideoController instanceof DanmakuController) { + ((DanmakuController) mVideoController).enableDanmaku(); + if (showDanmakuInit) { + ((DanmakuController) mVideoController).showDanmakuInit(); + } } } + +// public void showDanmaku() { +// mVideoController +// } + private BaseDanmakuParser createParser(InputStream stream) { if (stream == null) { diff --git a/player/src/main/java/cn/ctyun/videoplayer/widget/controller/DanmakuController.java b/player/src/main/java/cn/ctyun/videoplayer/widget/controller/DanmakuController.java index 7a0a83d..7408f04 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/widget/controller/DanmakuController.java +++ b/player/src/main/java/cn/ctyun/videoplayer/widget/controller/DanmakuController.java @@ -5,6 +5,7 @@ import android.graphics.Color; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.view.ViewCompat; +import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.widget.EditText; @@ -12,8 +13,11 @@ import android.widget.ImageView; import android.widget.RadioButton; import android.widget.RadioGroup; +import com.bumptech.glide.Glide; + import cn.ctyun.videoplayer.R; import cn.ctyun.videoplayer.controller.DanmakuControllerInterface; +import cn.ctyun.videoplayer.controller.MediaPlayerControlInterface; import cn.ctyun.videoplayer.player.IjkVideoView; import cn.ctyun.videoplayer.util.AnimHelper; import cn.ctyun.videoplayer.util.NavUtils; @@ -106,12 +110,6 @@ public class DanmakuController extends DefinitionController { mIvDanmakuControl.setOnClickListener(this); mOpenEditDanmaku = mControllerView.findViewById(R.id.iv_open_edit_danmaku); mOpenEditDanmaku.setOnClickListener(this); - if (mMediaPlayer instanceof DanmakuControllerInterface) { - if (!((DanmakuControllerInterface) mMediaPlayer).isDanmakuEnable()) { - mIvDanmakuControl.setVisibility(GONE); - mOpenEditDanmaku.setVisibility(GONE); - } - } mEditDanmakuLayout = findViewById(R.id.ll_edit_danmaku); mEtDanmakuContent = findViewById(R.id.et_danmaku_content); int navigationBarHeight = NavUtils.getNavigationBarHeight(getContext()); @@ -178,6 +176,25 @@ public class DanmakuController extends DefinitionController { }); } + @Override + public void setMediaPlayer(MediaPlayerControlInterface mediaPlayer) { + super.setMediaPlayer(mediaPlayer); + if (mediaPlayer != null) { + if (!((DanmakuControllerInterface) mMediaPlayer).isDanmakuEnable()) { + mIvDanmakuControl.setVisibility(GONE); + mOpenEditDanmaku.setVisibility(GONE); + } + } + } + + public void enableDanmaku() { + mIvDanmakuControl.setVisibility(VISIBLE); + } + + public void showDanmakuInit() { + mIvDanmakuControl.setSelected(true); + } + @Override public void setPlayerState(int playerState) { super.setPlayerState(playerState); diff --git a/player/src/main/res/layout/dkplayer_layout_standard_controller.xml b/player/src/main/res/layout/dkplayer_layout_standard_controller.xml index c95f7dc..330457c 100644 --- a/player/src/main/res/layout/dkplayer_layout_standard_controller.xml +++ b/player/src/main/res/layout/dkplayer_layout_standard_controller.xml @@ -60,6 +60,8 @@ android:layout_height="20dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" + android:visibility="gone" + tools:visibility="visible" android:src="@drawable/ic_open_edit_danmaku" /> Date: Mon, 11 Mar 2019 19:45:49 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E5=B1=8F=E8=94=BD=E5=8A=A0=E4=B8=8A?= =?UTF-8?q?=E7=9A=84=E4=BF=9D=E6=8C=81=E5=B1=8F=E5=B9=95=E5=B8=B8=E4=BA=AE?= =?UTF-8?q?=E7=9A=84=E9=80=BB=E8=BE=91=EF=BC=8C=E5=8E=9F=E5=BC=80=E6=BA=90?= =?UTF-8?q?=E5=BA=93=E5=B7=B2=E6=9C=89=E6=AD=A4=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/ctyun/videoplayer/player/BaseIjkVideoView.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/player/src/main/java/cn/ctyun/videoplayer/player/BaseIjkVideoView.java b/player/src/main/java/cn/ctyun/videoplayer/player/BaseIjkVideoView.java index 41b7597..405ed05 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/player/BaseIjkVideoView.java +++ b/player/src/main/java/cn/ctyun/videoplayer/player/BaseIjkVideoView.java @@ -240,7 +240,7 @@ public abstract class BaseIjkVideoView extends FrameLayout implements MediaPlaye } // 视频播放时开启屏幕常亮 - mAttachActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); +// mAttachActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } /** @@ -282,7 +282,7 @@ public abstract class BaseIjkVideoView extends FrameLayout implements MediaPlaye } } // 视频暂停时关闭屏幕常亮 - mAttachActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); +// mAttachActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } /** @@ -348,7 +348,7 @@ public abstract class BaseIjkVideoView extends FrameLayout implements MediaPlaye // } // 关闭屏幕常亮 - mAttachActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); +// mAttachActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } -- Gitee From 6cc45a65314e02c005145f99c5b75649f2da460e Mon Sep 17 00:00:00 2001 From: liujt Date: Mon, 11 Mar 2019 20:02:46 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E9=9B=86=E6=88=90bugly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 12 +++--------- app/proguard-rules.pro | 5 ++++- app/src/main/AndroidManifest.xml | 2 ++ .../main/java/cn/ctyun/player/app/MyApplication.java | 4 ++++ 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index aa0acc2..09c5311 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,17 +91,11 @@ dependencies { // releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2' // debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.2' implementation "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion" -// implementation 'com.github.bumptech.glide:glide:3.7.0' implementation 'com.yanzhenjie:permission:2.0.0-rc12' -// implementation 'com.github.ctiao:DanmakuFlameMaster:0.8.3' -// implementation 'com.github.ctiao:DanmakuFlameMaster:0.6.2' -// implementation 'com.github.ctiao:ndkbitmap-armv7a:0.8.3' - implementation "com.android.support:design:$rootProject.supportLibraryVersion" -// implementation 'com.google.android.exoplayer:exoplayer:2.8.2' -// implementation 'com.google.android.exoplayer:extension-rtmp:2.8.2' - //缓存 -// implementation 'com.danikula:videocache:2.7.1' + implementation "com.android.support:design:$rootProject.supportLibraryVersion" + implementation 'com.tencent.bugly:crashreport:2.8.6.0' + implementation 'com.tencent.bugly:nativecrashreport:3.6.0.1' implementation project(':player') diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 83838b4..853c5ab 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -34,4 +34,7 @@ -keep class android.support.** { *; } --keep class com.bumptech.glide.** { *; } \ No newline at end of file +-keep class com.bumptech.glide.** { *; } + +-dontwarn com.tencent.bugly.** +-keep public class com.tencent.bugly.**{*;} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 136831a..ec888db 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,8 @@ + + Date: Tue, 12 Mar 2019 10:20:51 +0800 Subject: [PATCH 07/12] =?UTF-8?q?sdk=E4=BE=9D=E8=B5=96=E5=BA=93version?= =?UTF-8?q?=E5=86=99=E5=88=B0=E6=9C=AC=E5=9C=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- player/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/player/build.gradle b/player/build.gradle index ed33862..5d4359a 100644 --- a/player/build.gradle +++ b/player/build.gradle @@ -11,8 +11,8 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion" - api "tv.danmaku.ijk.media:ijkplayer-java:$rootProject.ijkPlayerVersion" + implementation "com.android.support:appcompat-v7:27.1.1" + api "tv.danmaku.ijk.media:ijkplayer-java:0.8.8" implementation 'com.github.ctiao:DanmakuFlameMaster:0.9.25' implementation 'com.github.ctiao:ndkbitmap-armv7a:0.9.21' -- Gitee From 90aff6b2e11b44f947a6454f69d9823202f07cb7 Mon Sep 17 00:00:00 2001 From: liujt Date: Tue, 12 Mar 2019 14:30:46 +0800 Subject: [PATCH 08/12] =?UTF-8?q?ids=E4=BF=AE=E6=94=B9=EF=BC=9Bapp=5Fname?= =?UTF-8?q?=E5=86=B2=E7=AA=81=E9=97=AE=E9=A2=98=EF=BC=9B=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E5=BC=B9=E5=B9=95=E6=95=B0=E6=8D=AE=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../ctyun/player/activity/DemoActivity.java | 12 +- app/src/main/res/layout/activity_demo.xml | 6 - app/src/main/res/layout/activity_main.xml | 16 +- app/src/main/res/values-en/strings.xml | 2 +- player/src/main/AndroidManifest.xml | 2 +- .../videoplayer/bean/FloatingComment.java | 23 +++ ...kuVideoView.java => DanmakuVideoView.java} | 170 ++++++++---------- .../widget/DefinitionIjkVideoView.java | 2 +- .../widget/controller/DanmakuController.java | 11 +- player/src/main/res/values/ids.xml | 50 +++--- player/src/main/res/values/strings.xml | 2 +- 12 files changed, 148 insertions(+), 150 deletions(-) create mode 100644 player/src/main/java/cn/ctyun/videoplayer/bean/FloatingComment.java rename player/src/main/java/cn/ctyun/videoplayer/widget/{DanmukuVideoView.java => DanmakuVideoView.java} (88%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ec888db..ac003eb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -19,7 +19,7 @@ android:name="cn.ctyun.player.app.MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" - android:label="@string/app_name" + android:label="@string/my_app_name" android:supportsRtl="true" android:theme="@style/AppTheme" tools:ignore="GoogleAppIndexingWarning"> diff --git a/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java b/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java index c976535..c0fd747 100644 --- a/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java +++ b/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java @@ -11,6 +11,7 @@ import android.widget.LinearLayout; import android.widget.Toast; import cn.ctyun.player.R; +import cn.ctyun.videoplayer.bean.FloatingComment; import cn.ctyun.videoplayer.bean.VideoModel; import cn.ctyun.videoplayer.interf.AdControllerListener; import cn.ctyun.videoplayer.player.PlayerConfig; @@ -95,10 +96,17 @@ public class DemoActivity extends AppCompatActivity{ // 设置播放器id mVideoView.setVideoId("asdasdasdads"); + List floatingComments = new ArrayList<>(); + FloatingComment floatingComment = new FloatingComment(); + floatingComment.setText("啊啊啊啊啊啊啊啊啊啊啊啊"); + floatingComments.add(floatingComment); + FloatingComment floatingComment2 = new FloatingComment(); + floatingComment2.setText("dsadasdsadadssd"); + floatingComments.add(floatingComment2); // 启用弹幕,进入播放器不展示弹幕 - mVideoView.enableDanmaku(); + mVideoView.enableDanmaku(floatingComments); // 启用弹幕,进入播放器就展示弹幕 -// mVideoView.enableDanmaku(true); +// mVideoView.enableDanmaku(floatingComments, true); // 启用投屏 mVideoView.enableDLNA(); // 自动播放 diff --git a/app/src/main/res/layout/activity_demo.xml b/app/src/main/res/layout/activity_demo.xml index 9d7b1f0..eb66782 100644 --- a/app/src/main/res/layout/activity_demo.xml +++ b/app/src/main/res/layout/activity_demo.xml @@ -63,12 +63,6 @@ android:onClick="testGetCurrentPosition" android:text="当前视频播放位置"/> -