From f17c21b64d13245f2c2e2078e5fc39fd779e1bcd Mon Sep 17 00:00:00 2001 From: liujt Date: Thu, 7 Mar 2019 15:00:43 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 72ecc8e..2c2008c 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,8 @@ clone工程到本地,git地址:git@gitee.com:keijack/ctyun-xstore-player-and protected void onDestroy() { super.onDestroy(); ijkVideoView.release(); + // 解决内存泄漏的问题 + MemoryLeakUtil.fixLeak(this); } -- Gitee From d8ddb5848cd949bbd929c5fdb1fc3bad37ef5101 Mon Sep 17 00:00:00 2001 From: cuihailong Date: Thu, 7 Mar 2019 15:12:04 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E6=8A=95=E5=B1=8F=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=9A=E8=AE=BE=E5=A4=87=E5=88=97=E8=A1=A8=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E7=8A=B6=E6=80=81=EF=BC=9B=E9=80=80=E5=87=BA=E6=8A=95=E5=B1=8F?= =?UTF-8?q?=E6=81=A2=E5=A4=8D=E6=92=AD=E6=94=BE=E6=97=B6=E9=9A=90=E8=97=8F?= =?UTF-8?q?=E5=B9=BF=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/DLNADevicesAdapter.java | 22 ++----- .../videoplayer/widget/DanmukuVideoView.java | 62 ++----------------- 2 files changed, 10 insertions(+), 74 deletions(-) diff --git a/player/src/main/java/cn/ctyun/videoplayer/adapter/DLNADevicesAdapter.java b/player/src/main/java/cn/ctyun/videoplayer/adapter/DLNADevicesAdapter.java index 607c23a..41c99c0 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/adapter/DLNADevicesAdapter.java +++ b/player/src/main/java/cn/ctyun/videoplayer/adapter/DLNADevicesAdapter.java @@ -21,24 +21,17 @@ import org.fourthline.cling.model.meta.Device; public class DLNADevicesAdapter extends ArrayAdapter { private LayoutInflater mInflater; - public void setConnectedDevice(Device mConnectedDevice) { + /*public void setConnectedDevice(Device mConnectedDevice) { this.mConnectedDevice = mConnectedDevice; } - private Device mConnectedDevice; + private Device mConnectedDevice;*/ public DLNADevicesAdapter(Context context) { super(context, 0); mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } - @Nullable - @Override - public ClingDevice getItem(int position) { - Log.e("CHL_", "***************** getItem position="+ position); - return super.getItem(position); - } - @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) @@ -56,21 +49,16 @@ public class DLNADevicesAdapter extends ArrayAdapter { ProgressBar connecting = (ProgressBar) convertView.findViewById(R.id.dlna_progress_device_connecting); - ImageView imageView = (ImageView)convertView.findViewById(R.id.dlna_tv_device_connected); -// imageView.setBackgroundResource(R.drawable.ic_action_dock); - - if (ClingManager.getInstance().getSelectedDevice() != null) { - Log.d("IjkVideoView", " position="+position+" getDisplayString=" + device.getDisplayString() + " getIdentity=" + device.getIdentity() - + " Identity equal=" + device.getIdentity().equals(((Device) ClingManager.getInstance().getSelectedDevice().getDevice()).getIdentity()) - + " getSerialNumber=" + device.getDetails().getSerialNumber() + " equals=" + device.equals(mConnectedDevice) - + " ," + ClingManager.getInstance().getSelectedDevice() + " isSelected=" + ((ClingDevice) ClingManager.getInstance().getSelectedDevice()).isSelected()); + if (ClingManager.getInstance().getSelectedDevice() != null && ((ClingDevice)ClingManager.getInstance().getSelectedDevice()).isSelected()) { if (device.getIdentity().equals(((Device) ClingManager.getInstance().getSelectedDevice().getDevice()).getIdentity())) { imageView.setVisibility(View.VISIBLE); } else { imageView.setVisibility(View.GONE); } + } else { + imageView.setVisibility(View.GONE); } return convertView; } 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 049c451..69452a5 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/widget/DanmukuVideoView.java +++ b/player/src/main/java/cn/ctyun/videoplayer/widget/DanmukuVideoView.java @@ -675,8 +675,10 @@ public class DanmukuVideoView extends CacheIjkVideoView implements DanmuControlI @Override public void onDLNAExitClick() { Log.d(TAG, " onDLNAExitClick() !!!!@@@@@@@@"); + ClingManager.getInstance().cleanSelectedDevice(); stopDLNA(); ((DanmakuController) mVideoController).setDLNADisableGesture(false); + hidePausedAd(); mMediaPlayer.start(); setPlayState(STATE_PLAYING); } @@ -767,8 +769,8 @@ public class DanmukuVideoView extends CacheIjkVideoView implements DanmuControlI Log.d(TAG, "***************** onItemClick name="+device.getDetails().getFriendlyName()); - play(); - mDevicesAdapter.setConnectedDevice(mSelectedDevice.getDevice()); + playDLNA(); + //mDevicesAdapter.setConnectedDevice(mSelectedDevice.getDevice()); } }); @@ -779,12 +781,6 @@ public class DanmukuVideoView extends CacheIjkVideoView implements DanmuControlI ((Activity)mContext).runOnUiThread(new Runnable() { public void run() { mDevicesAdapter.add((ClingDevice) device); -// setListViewHeightBasedOnChildren(mDeviceList); -// if (mDevicesAdapter.getCount() >= 3) { -// mBottomDivider.setVisibility(GONE); -// } else { -// mBottomDivider.setVisibility(VISIBLE); -// } } }); } @@ -794,12 +790,6 @@ public class DanmukuVideoView extends CacheIjkVideoView implements DanmuControlI ((Activity)mContext).runOnUiThread(new Runnable() { public void run() { mDevicesAdapter.remove((ClingDevice) device); -// setListViewHeightBasedOnChildren(mDeviceList); -// if (mDevicesAdapter.getCount() >= 3) { -// mBottomDivider.setVisibility(GONE); -// } else { -// mBottomDivider.setVisibility(VISIBLE); -// } } }); } @@ -815,12 +805,6 @@ public class DanmukuVideoView extends CacheIjkVideoView implements DanmuControlI ClingDeviceList.getInstance().setClingDeviceList(devices); mDevicesAdapter.addAll(devices); } -// setListViewHeightBasedOnChildren(mDeviceList); -// if (mDevicesAdapter.getCount() >= 3) { -// mBottomDivider.setVisibility(GONE); -// } else { -// mBottomDivider.setVisibility(VISIBLE); -// } WifiManager wifiMgr = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); int wifiState = wifiMgr.getWifiState(); @@ -840,28 +824,6 @@ public class DanmukuVideoView extends CacheIjkVideoView implements DanmuControlI +" mPopupWindow="+mPopupWindow.getWidth()); } - /** - * 动态设置ListView的高度 - * @param listView - */ - public static void setListViewHeightBasedOnChildren(ListView listView) { - if(listView == null) return; - ListAdapter listAdapter = listView.getAdapter(); - if (listAdapter == null) { - return; - } - int totalHeight = 0; - int count = listAdapter.getCount() >= 3 ? 3 : listAdapter.getCount(); //HeaderView也占一项 - for (int i = 0; i < count; i++) { - View listItem = listAdapter.getView(i, null, listView); - listItem.measure(0, 0); - totalHeight += listItem.getMeasuredHeight(); - } - ViewGroup.LayoutParams params = listView.getLayoutParams(); - params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); - listView.setLayoutParams(params); - } - private void stopDLNA() { mClingPlayControl.stop(new ControlCallback() { @Override @@ -876,25 +838,11 @@ public class DanmukuVideoView extends CacheIjkVideoView implements DanmuControlI }); } - /*private void pause() { - mClingPlayControl.pause(new ControlCallback() { - @Override - public void success(IResponse response) { - Log.e(TAG, "pause success"); - } - - @Override - public void fail(IResponse response) { - Log.e(TAG, "pause fail"); - } - }); - }*/ - /** * 投屏播放视频 */ - private void play() { + private void playDLNA() { @DLANPlayState.DLANPlayStates int currentState = mClingPlayControl.getCurrentState(); /** -- Gitee From f6012145b993181829d7e6f16a568597a20c9be3 Mon Sep 17 00:00:00 2001 From: liujt Date: Thu, 7 Mar 2019 16:27:37 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E4=BF=AE=E6=94=B9UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ctyun/player/activity/DemoActivity.java | 10 ++++----- .../controller/StandardVideoController.java | 16 ++++++++------ .../widget/controller/AdController.java | 22 ++++++++++--------- .../dkplayer_layout_standard_controller.xml | 17 +++++++------- .../main/res/layout/layout_ad_controller.xml | 15 ++++++++----- 5 files changed, 43 insertions(+), 37 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 a4a6d8c..7a3e5fa 100644 --- a/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java +++ b/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java @@ -51,11 +51,11 @@ public class DemoActivity extends AppCompatActivity{ Log.d(TAG, "onCreate"); - ActionBar actionBar = getSupportActionBar(); - if (actionBar != null) { - actionBar.setTitle("Demo"); - actionBar.setDisplayHomeAsUpEnabled(true); - } +// ActionBar actionBar = getSupportActionBar(); +// if (actionBar != null) { +// actionBar.setTitle("Demo"); +// actionBar.setDisplayHomeAsUpEnabled(true); +// } mVideoView = findViewById(R.id.player); 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 813fbea..9fa6e04 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/controller/StandardVideoController.java +++ b/player/src/main/java/cn/ctyun/videoplayer/controller/StandardVideoController.java @@ -221,8 +221,10 @@ public class StandardVideoController extends GestureVideoController implements V @Override public void onClick(View v) { int i = v.getId(); - if (i == R.id.fullscreen || i == R.id.back) { + if (i == R.id.fullscreen) { doStartStopFullScreen(); + } else if (i == R.id.back) { + mAttachActivity.onBackPressed(); } else if (i == R.id.lock) { doLockUnlock(); } else if (i == R.id.iv_play || i == R.id.thumb) { @@ -276,7 +278,7 @@ public class StandardVideoController extends GestureVideoController implements V mIsGestureEnabled = false; // mFullScreenButton.setSelected(false); mFullScreenButton.setVisibility(VISIBLE); - mBackButton.setVisibility(GONE); +// mBackButton.setVisibility(GONE); mLockButton.setVisibility(GONE); mTitle.setVisibility(INVISIBLE); mSysTime.setVisibility(GONE); @@ -295,7 +297,7 @@ public class StandardVideoController extends GestureVideoController implements V mIsGestureEnabled = true; // mFullScreenButton.setSelected(true); mFullScreenButton.setVisibility(GONE); - mBackButton.setVisibility(VISIBLE); +// mBackButton.setVisibility(VISIBLE); mTitle.setVisibility(VISIBLE); mSysTime.setVisibility(VISIBLE); mBatteryLevel.setVisibility(VISIBLE); @@ -665,8 +667,8 @@ public class StandardVideoController extends GestureVideoController implements V mTvAdDesc.setTextSize(SP, 14); mTvCloseAd.setTextSize(SP, 18); - mIvcloseAd.getLayoutParams().width = Utils.dp2px(mAttachActivity, 16); - mIvcloseAd.getLayoutParams().height = Utils.dp2px(mAttachActivity, 16); + mIvcloseAd.getLayoutParams().width = Utils.dp2px(mAttachActivity, 18); + mIvcloseAd.getLayoutParams().height = Utils.dp2px(mAttachActivity, 18); } else { ViewGroup.LayoutParams layoutParams = ((IjkVideoView) mMediaPlayer).getLayoutParams(); mRlPauseAd.getLayoutParams().height = layoutParams.height * 37 / 70; @@ -674,8 +676,8 @@ public class StandardVideoController extends GestureVideoController implements V // mRlPauseAd.getLayoutParams().height = mRlPauseAd.getLayoutParams().width * 37 / 41; mTvAdDesc.setTextSize(SP, 10); mTvCloseAd.setTextSize(SP, 14); - mIvcloseAd.getLayoutParams().width = Utils.dp2px(mAttachActivity, 12); - mIvcloseAd.getLayoutParams().height = Utils.dp2px(mAttachActivity, 12); + mIvcloseAd.getLayoutParams().width = Utils.dp2px(mAttachActivity, 14); + mIvcloseAd.getLayoutParams().height = Utils.dp2px(mAttachActivity, 14); } } 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 5b64b6f..7670271 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 @@ -30,7 +30,7 @@ import cn.ctyun.videoplayer.util.PlayerUtils; public class AdController extends BaseVideoController implements View.OnClickListener { protected TextView adTime, adDetail; - protected ImageView back, volume, fullScreen, playButton; + protected ImageView back, volume, fullScreen; protected AdControllerListener listener; protected ImageView mStartPlayButton; protected RelativeLayout mTopContainer; @@ -64,11 +64,11 @@ public class AdController extends BaseVideoController implements View.OnClickLis adDetail = mControllerView.findViewById(R.id.ad_detail); adDetail.setText("了解详情>"); back = mControllerView.findViewById(R.id.back); - back.setVisibility(GONE); +// back.setVisibility(GONE); volume = mControllerView.findViewById(R.id.iv_volume); fullScreen = mControllerView.findViewById(R.id.fullscreen); - playButton = mControllerView.findViewById(R.id.iv_play); - playButton.setOnClickListener(this); +// playButton = mControllerView.findViewById(R.id.iv_play); +// playButton.setOnClickListener(this); adTime.setOnClickListener(this); adDetail.setOnClickListener(this); back.setOnClickListener(this); @@ -85,15 +85,17 @@ public class AdController extends BaseVideoController implements View.OnClickLis @Override public void onClick(View v) { int id = v.getId(); - if (id == R.id.back | id == R.id.fullscreen) { + if (id == R.id.fullscreen) { doStartStopFullScreen(); + } else if (id == R.id.back) { + mAttachActivity.onBackPressed(); } else if (id == R.id.iv_volume) { doMute(); } else if (id == R.id.ad_detail) { if (listener != null) listener.onAdClick(); } else if (id == R.id.ad_time) { ((ListMediaPlayerControlInterface) mMediaPlayer).skipToNext(); - } else if (id == R.id.iv_play || id == R.id.start_play) { + } else if (id == R.id.start_play) { doPauseResume(); } } @@ -144,7 +146,7 @@ public class AdController extends BaseVideoController implements View.OnClickLis break; case IjkVideoView.STATE_PLAYING: post(mShowProgress); - playButton.setSelected(true); +// playButton.setSelected(true); mThumb.setVisibility(GONE); mLoadingProgress.setVisibility(GONE); mStartPlayButton.setVisibility(GONE); @@ -152,7 +154,7 @@ public class AdController extends BaseVideoController implements View.OnClickLis mBottomContainer.setVisibility(VISIBLE); break; case IjkVideoView.STATE_PAUSED: - playButton.setSelected(false); +// playButton.setSelected(false); mStartPlayButton.setVisibility(GONE); mTopContainer.setVisibility(VISIBLE); mBottomContainer.setVisibility(VISIBLE); @@ -206,12 +208,12 @@ public class AdController extends BaseVideoController implements View.OnClickLis super.setPlayerState(playerState); switch (playerState) { case IjkVideoView.PLAYER_NORMAL: - back.setVisibility(GONE); +// back.setVisibility(GONE); // fullScreen.setSelected(false); fullScreen.setVisibility(VISIBLE); break; case IjkVideoView.PLAYER_FULL_SCREEN: - back.setVisibility(VISIBLE); +// back.setVisibility(VISIBLE); // fullScreen.setSelected(true); fullScreen.setVisibility(GONE); break; 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 9aa34ef..9d0db4b 100644 --- a/player/src/main/res/layout/dkplayer_layout_standard_controller.xml +++ b/player/src/main/res/layout/dkplayer_layout_standard_controller.xml @@ -22,9 +22,7 @@ android:layout_height="@dimen/controller_height" android:layout_gravity="center" android:padding="@dimen/controller_icon_padding" - android:src="@drawable/ic_back" - android:visibility="gone" - tools:visibility="visible" /> + android:src="@drawable/ic_back"/> @@ -284,8 +283,8 @@ android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_margin="6dp" - android:padding="4dp" - android:alpha="0.5" + android:padding="2dp" + android:background="@color/dkplayer_background_color" android:text="广告" android:textSize="12sp" android:textColor="@android:color/white"/> diff --git a/player/src/main/res/layout/layout_ad_controller.xml b/player/src/main/res/layout/layout_ad_controller.xml index 6d8b652..6cfad46 100644 --- a/player/src/main/res/layout/layout_ad_controller.xml +++ b/player/src/main/res/layout/layout_ad_controller.xml @@ -13,8 +13,11 @@ + android:layout_width="@dimen/controller_height" + android:layout_height="@dimen/controller_height" + android:layout_gravity="center" + android:padding="@dimen/controller_icon_padding" + android:src="@drawable/ic_back"/> - + + + + Date: Thu, 7 Mar 2019 17:44:27 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E8=A7=86=E5=B1=8F=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E6=97=B6=E4=BF=9D=E6=8C=81=E5=B1=8F=E5=B9=95=E5=B8=B8=E4=BA=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 6 ++--- .../cn/ctyun/player/app/MyApplication.java | 10 ++++---- .../videoplayer/player/BaseIjkVideoView.java | 24 +++++++++++++++++-- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9c8a20d..aa0acc2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -87,9 +87,9 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.2' - releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2' - debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.2' +// debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.2' +// 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' diff --git a/app/src/main/java/cn/ctyun/player/app/MyApplication.java b/app/src/main/java/cn/ctyun/player/app/MyApplication.java index 3744c4c..1c7641c 100644 --- a/app/src/main/java/cn/ctyun/player/app/MyApplication.java +++ b/app/src/main/java/cn/ctyun/player/app/MyApplication.java @@ -4,7 +4,7 @@ import android.app.Application; import cn.ctyun.player.BuildConfig; import cn.ctyun.videoplayer.util.L; -import com.squareup.leakcanary.LeakCanary; +//import com.squareup.leakcanary.LeakCanary; /** * app @@ -19,10 +19,10 @@ public class MyApplication extends Application{ public void onCreate() { super.onCreate(); instance = this; - if (LeakCanary.isInAnalyzerProcess(this)) { - return; - } - LeakCanary.install(this); +// if (LeakCanary.isInAnalyzerProcess(this)) { +// return; +// } +// LeakCanary.install(this); //播放器日志 L.setDebug(BuildConfig.DEBUG); } 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 33a5ec7..441b8c5 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/player/BaseIjkVideoView.java +++ b/player/src/main/java/cn/ctyun/videoplayer/player/BaseIjkVideoView.java @@ -7,9 +7,11 @@ import android.content.res.AssetFileDescriptor; import android.media.AudioManager; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.util.AttributeSet; import android.view.OrientationEventListener; +import android.view.WindowManager; import android.widget.FrameLayout; import cn.ctyun.videoplayer.controller.BaseVideoController; @@ -33,6 +35,8 @@ import tv.danmaku.ijk.media.player.IjkMediaPlayer; public abstract class BaseIjkVideoView extends FrameLayout implements MediaPlayerControlInterface, PlayerEventListener { + // 关联的Activity + protected AppCompatActivity mAttachActivity; protected AbstractPlayer mMediaPlayer;//播放器 @Nullable protected BaseVideoController mVideoController;//控制器 @@ -173,6 +177,12 @@ public abstract class BaseIjkVideoView extends FrameLayout implements MediaPlaye public BaseIjkVideoView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mPlayerConfig = new PlayerConfig.Builder().build(); + + if (context instanceof AppCompatActivity) { + mAttachActivity = (AppCompatActivity) context; + } else { + throw new IllegalArgumentException("Context must be AppCompatActivity"); + } } /** @@ -223,8 +233,12 @@ public abstract class BaseIjkVideoView extends FrameLayout implements MediaPlaye startInPlaybackState(); } setKeepScreenOn(true); - if (mAudioFocusHelper != null) + if (mAudioFocusHelper != null) { mAudioFocusHelper.requestFocus(); + } + + // 视频播放时开启屏幕常亮 + mAttachActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } /** @@ -261,9 +275,12 @@ public abstract class BaseIjkVideoView extends FrameLayout implements MediaPlaye mMediaPlayer.pause(); setPlayState(STATE_PAUSED); setKeepScreenOn(false); - if (mAudioFocusHelper != null) + if (mAudioFocusHelper != null) { mAudioFocusHelper.abandonFocus(); + } } + // 视频暂停时关闭屏幕常亮 + mAttachActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } /** @@ -328,6 +345,9 @@ public abstract class BaseIjkVideoView extends FrameLayout implements MediaPlaye // mVideoController = null; // } + // 关闭屏幕常亮 + mAttachActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } private void onPlayStopped() { -- Gitee From 196248859da39cff6b14b5e37f8769a848bf8d7f Mon Sep 17 00:00:00 2001 From: liujt Date: Thu, 7 Mar 2019 17:55:08 +0800 Subject: [PATCH 05/10] test --- app/src/main/java/cn/ctyun/player/activity/DemoActivity.java | 3 ++- .../src/main/java/cn/ctyun/videoplayer/widget/VideoView.java | 2 +- 2 files changed, 3 insertions(+), 2 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 7a3e5fa..12db1a9 100644 --- a/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java +++ b/app/src/main/java/cn/ctyun/player/activity/DemoActivity.java @@ -30,7 +30,8 @@ public class DemoActivity extends AppCompatActivity{ private static final String TAG = "CHL_" + DemoActivity.class.getSimpleName(); private VideoView mVideoView; - private static final String URL_VOD = "http://mov.bn.netease.com/open-movie/nos/flv/2017/01/03/SC8U8K7BC_hd.flv"; +// private static final String URL_VOD = "http://mov.bn.netease.com/open-movie/nos/flv/2017/01/03/SC8U8K7BC_hd.flv"; + private static final String URL_VOD = "http://vfile.hshan.com/2018/1524/9156/4430/152491564430.ssm/152491564430.m3u8"; // private static final String URL_VOD = "http://baobab.wdjcdn.com/14564977406580.mp4"; // private static final String URL_VOD = "http://uploads.cutv.com:8088/video/data/201703/10/encode_file/515b6a95601ba6b39620358f2677a17358c2472411d53.mp4"; private static final String URL_AD = "https://gslb.miaopai.com/stream/IR3oMYDhrON5huCmf7sHCfnU5YKEkgO2.mp4"; 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 f5377e3..bba4d5e 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/widget/VideoView.java +++ b/player/src/main/java/cn/ctyun/videoplayer/widget/VideoView.java @@ -173,7 +173,7 @@ public class VideoView extends DefinitionIjkVideoView implements ListMediaPlayer } - setVideoPath(videoModel.getUrl()); +// setVideoPath(videoModel.getUrl()); } -- Gitee From 167d86a0fad65e3fafad218830d61389d21f55c4 Mon Sep 17 00:00:00 2001 From: liujt Date: Thu, 7 Mar 2019 18:04:10 +0800 Subject: [PATCH 06/10] test --- player/src/main/res/layout/dkplayer_layout_center_window.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/player/src/main/res/layout/dkplayer_layout_center_window.xml b/player/src/main/res/layout/dkplayer_layout_center_window.xml index 4e1117f..d5ef01d 100644 --- a/player/src/main/res/layout/dkplayer_layout_center_window.xml +++ b/player/src/main/res/layout/dkplayer_layout_center_window.xml @@ -10,7 +10,7 @@ android:id="@+id/iv_icon" android:layout_width="36dp" android:layout_height="36dp" - tools:src="@drawable/dkplayer_ic_action_volume_up"/> + tools:src="@drawable/ic_action_volume_up"/> Date: Thu, 7 Mar 2019 18:15:33 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E6=8A=95=E5=B1=8F=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=9A=E8=B5=84=E6=BA=90=E7=9B=AE=E5=BD=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values-en/strings.xml | 4 ---- app/src/main/res/values/colors.xml | 2 -- app/src/main/res/values/dimens.xml | 8 -------- app/src/main/res/values/strings.xml | 6 +----- .../src/main/res/drawable-hdpi/dlna_icon_close.png | Bin .../main/res/drawable-hdpi/dlna_icon_progress.png | Bin .../main/res/drawable-hdpi/dlna_icon_selected.png | Bin .../src/main/res/drawable-hdpi/dlna_icon_wifi.png | Bin .../src/main/res/drawable/anim_loading_rotate.xml | 0 .../src/main/res/layout/layout_dlna_devices_pop.xml | 4 ++-- player/src/main/res/values/colors.xml | 2 ++ player/src/main/res/values/dimens.xml | 9 +++++++++ player/src/main/res/values/strings.xml | 6 ++++++ 13 files changed, 20 insertions(+), 21 deletions(-) rename {app => player}/src/main/res/drawable-hdpi/dlna_icon_close.png (100%) rename {app => player}/src/main/res/drawable-hdpi/dlna_icon_progress.png (100%) rename {app => player}/src/main/res/drawable-hdpi/dlna_icon_selected.png (100%) rename {app => player}/src/main/res/drawable-hdpi/dlna_icon_wifi.png (100%) rename {app => player}/src/main/res/drawable/anim_loading_rotate.xml (100%) diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 7964e6e..755532d 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -33,8 +33,4 @@ PIP Android O PiP CACHE - 点击刷新DLNA设备 - 连接中… - 选择要投射的电视 - 请确保设备连接同一个WiFi \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index d0c4263..026b931 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -7,6 +7,4 @@ #9939C5BB #96000000 - - #FFFFFF diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 57c2624..f8b8bc5 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -17,12 +17,4 @@ 4dp 360dp - - 10sp - 11sp - 10sp - 17sp - 19sp - - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ce872dc..f11f745 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,7 +1,3 @@ - 点击刷新DLNA设备 - 正在搜索设备… - 连接中… - 选择要投射的电视 - 请确保设备连接同一个WiFi + diff --git a/app/src/main/res/drawable-hdpi/dlna_icon_close.png b/player/src/main/res/drawable-hdpi/dlna_icon_close.png similarity index 100% rename from app/src/main/res/drawable-hdpi/dlna_icon_close.png rename to player/src/main/res/drawable-hdpi/dlna_icon_close.png diff --git a/app/src/main/res/drawable-hdpi/dlna_icon_progress.png b/player/src/main/res/drawable-hdpi/dlna_icon_progress.png similarity index 100% rename from app/src/main/res/drawable-hdpi/dlna_icon_progress.png rename to player/src/main/res/drawable-hdpi/dlna_icon_progress.png diff --git a/app/src/main/res/drawable-hdpi/dlna_icon_selected.png b/player/src/main/res/drawable-hdpi/dlna_icon_selected.png similarity index 100% rename from app/src/main/res/drawable-hdpi/dlna_icon_selected.png rename to player/src/main/res/drawable-hdpi/dlna_icon_selected.png diff --git a/app/src/main/res/drawable-hdpi/dlna_icon_wifi.png b/player/src/main/res/drawable-hdpi/dlna_icon_wifi.png similarity index 100% rename from app/src/main/res/drawable-hdpi/dlna_icon_wifi.png rename to player/src/main/res/drawable-hdpi/dlna_icon_wifi.png diff --git a/app/src/main/res/drawable/anim_loading_rotate.xml b/player/src/main/res/drawable/anim_loading_rotate.xml similarity index 100% rename from app/src/main/res/drawable/anim_loading_rotate.xml rename to player/src/main/res/drawable/anim_loading_rotate.xml diff --git a/player/src/main/res/layout/layout_dlna_devices_pop.xml b/player/src/main/res/layout/layout_dlna_devices_pop.xml index 1e624fd..b29ada6 100644 --- a/player/src/main/res/layout/layout_dlna_devices_pop.xml +++ b/player/src/main/res/layout/layout_dlna_devices_pop.xml @@ -48,8 +48,8 @@ android:orientation="horizontal" > diff --git a/player/src/main/res/values/colors.xml b/player/src/main/res/values/colors.xml index 4dfffa0..a2333f3 100644 --- a/player/src/main/res/values/colors.xml +++ b/player/src/main/res/values/colors.xml @@ -13,4 +13,6 @@ #55ffffff #ffffff + + #FFFFFF \ No newline at end of file diff --git a/player/src/main/res/values/dimens.xml b/player/src/main/res/values/dimens.xml index e05a8c1..e91dd16 100644 --- a/player/src/main/res/values/dimens.xml +++ b/player/src/main/res/values/dimens.xml @@ -44,4 +44,13 @@ 334dp 160dp 50dp + + + + 10sp + 11sp + 10sp + 17sp + 19sp + \ No newline at end of file diff --git a/player/src/main/res/values/strings.xml b/player/src/main/res/values/strings.xml index 90baf1b..b188441 100644 --- a/player/src/main/res/values/strings.xml +++ b/player/src/main/res/values/strings.xml @@ -42,4 +42,10 @@ 多播放器切换 悬浮窗 缓存 + + 点击刷新DLNA设备 + 正在搜索设备… + 连接中… + 选择要投射的电视 + 请确保设备连接同一个WiFi -- Gitee From e8c271451fdf73cda621debfc591ddbcb8b6a08f Mon Sep 17 00:00:00 2001 From: liujt Date: Thu, 7 Mar 2019 18:43:13 +0800 Subject: [PATCH 08/10] =?UTF-8?q?m3u8=E6=96=87=E4=BB=B6=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../videoplayer/widget/CacheIjkVideoView.java | 3 +- .../ctyun/videoplayer/widget/VideoView.java | 2 +- .../widget/controller/AdController.java | 19 +- .../dkplayer_layout_standard_controller.xml | 235 +++++++++--------- .../main/res/layout/layout_ad_controller.xml | 15 +- 5 files changed, 140 insertions(+), 134 deletions(-) diff --git a/player/src/main/java/cn/ctyun/videoplayer/widget/CacheIjkVideoView.java b/player/src/main/java/cn/ctyun/videoplayer/widget/CacheIjkVideoView.java index 1c4d44c..54e439e 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/widget/CacheIjkVideoView.java +++ b/player/src/main/java/cn/ctyun/videoplayer/widget/CacheIjkVideoView.java @@ -40,7 +40,8 @@ public class CacheIjkVideoView extends IjkVideoView { if (needReset) mMediaPlayer.reset(); if (mAssetFileDescriptor != null) { mMediaPlayer.setDataSource(mAssetFileDescriptor); - } else if (mIsCacheEnabled && !mCurrentUrl.startsWith("file://")) { //本地文件不能缓存 + } else if (mIsCacheEnabled && !mCurrentUrl.startsWith("file://") && !mCurrentUrl.contains(".m3u8")) { + //本地文件和m3u8不能缓存 mCacheServer = getCacheServer(); String proxyPath = mCacheServer.getProxyUrl(mCurrentUrl); mCacheServer.registerCacheListener(cacheListener, mCurrentUrl); 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 bba4d5e..4250617 100644 --- a/player/src/main/java/cn/ctyun/videoplayer/widget/VideoView.java +++ b/player/src/main/java/cn/ctyun/videoplayer/widget/VideoView.java @@ -138,7 +138,7 @@ public class VideoView extends DefinitionIjkVideoView implements ListMediaPlayer if (videoModel != null) { mCurrentUrl = videoModel.getUrl(); mCurrentTitle = videoModel.getTitle(); - setCacheEnabled(true); // 默认打开缓存,离线可观看 +// setCacheEnabled(true); // 默认打开缓存,离线可观看 mCurrentPosition = 0; if (Constants.VIDEO_TYPE_START_AD.equals(videoModel.getVideoType()) || Constants.VIDEO_TYPE_END_AD.equals(videoModel.getVideoType())) { 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 7670271..b79510d 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 @@ -162,8 +162,8 @@ public class AdController extends BaseVideoController implements View.OnClickLis case IjkVideoView.STATE_PREPARING: mStartPlayButton.setVisibility(GONE); mLoadingProgress.setVisibility(VISIBLE); - mTopContainer.setVisibility(VISIBLE); - mBottomContainer.setVisibility(VISIBLE); +// mTopContainer.setVisibility(VISIBLE); +// mBottomContainer.setVisibility(VISIBLE); break; case IjkVideoView.STATE_PREPARED: mStartPlayButton.setVisibility(GONE); @@ -175,30 +175,29 @@ public class AdController extends BaseVideoController implements View.OnClickLis mLoadingProgress.setVisibility(GONE); mThumb.setVisibility(GONE); mTopContainer.setVisibility(GONE); - mTopContainer.setVisibility(VISIBLE); - mBottomContainer.setVisibility(VISIBLE); + mBottomContainer.setVisibility(GONE); break; case IjkVideoView.STATE_BUFFERING: mStartPlayButton.setVisibility(GONE); mLoadingProgress.setVisibility(VISIBLE); mThumb.setVisibility(GONE); - mTopContainer.setVisibility(VISIBLE); - mBottomContainer.setVisibility(VISIBLE); + mTopContainer.setVisibility(GONE); + mBottomContainer.setVisibility(GONE); break; case IjkVideoView.STATE_BUFFERED: mLoadingProgress.setVisibility(GONE); mStartPlayButton.setVisibility(GONE); mThumb.setVisibility(GONE); - mTopContainer.setVisibility(VISIBLE); - mBottomContainer.setVisibility(VISIBLE); + mTopContainer.setVisibility(GONE); + mBottomContainer.setVisibility(GONE); break; case IjkVideoView.STATE_PLAYBACK_COMPLETED: mStartPlayButton.setVisibility(GONE); mThumb.setVisibility(VISIBLE); mIsLocked = false; mMediaPlayer.setLock(false); - mTopContainer.setVisibility(VISIBLE); - mBottomContainer.setVisibility(VISIBLE); + mTopContainer.setVisibility(GONE); + mBottomContainer.setVisibility(GONE); break; } } 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 9d0db4b..d3cf47c 100644 --- a/player/src/main/res/layout/dkplayer_layout_standard_controller.xml +++ b/player/src/main/res/layout/dkplayer_layout_standard_controller.xml @@ -7,14 +7,10 @@ android:orientation="vertical"> + android:orientation="horizontal"> + android:src="@drawable/ic_back" /> - + - - + - + - + - + + + + + + + @@ -124,14 +132,14 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:layout_marginEnd="10dp" android:layout_marginStart="10dp" + android:layout_marginEnd="10dp" android:layout_weight="1" android:background="@null" android:max="1000" android:maxHeight="2dp" - android:paddingEnd="0dp" android:paddingStart="0dp" + android:paddingEnd="0dp" android:progressDrawable="@drawable/dkplayer_layer_progress_bar" android:thumb="@drawable/dkplayer_seekbar_thumb" android:thumbOffset="0dp" /> @@ -148,8 +156,8 @@ android:id="@+id/tv_multi_rate" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/default_spacing" android:layout_marginStart="@dimen/default_spacing" + android:layout_marginLeft="@dimen/default_spacing" android:textColor="@android:color/white" android:textSize="@dimen/controller_time_text_size" android:visibility="gone" @@ -240,9 +248,9 @@ android:id="@+id/rl_pause_ad" android:layout_width="200dp" android:layout_height="100dp" + android:layout_gravity="center" android:visibility="gone" - tools:visibility="visible" - android:layout_gravity="center"> + tools:visibility="visible"> + android:gravity="center" + android:padding="2dp"> + + android:src="@drawable/ic_close_ad" /> + android:textColor="@android:color/white" + android:textSize="12sp" /> @@ -280,39 +289,37 @@ android:id="@+id/tv_ad_desc" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" + android:layout_alignParentBottom="true" android:layout_margin="6dp" - android:padding="2dp" android:background="@color/dkplayer_background_color" + android:padding="2dp" android:text="广告" - android:textSize="12sp" - android:textColor="@android:color/white"/> - + android:textColor="@android:color/white" + android:textSize="12sp" /> - - + + tools:visibility="gone"> + android:background="@drawable/dkplayer_dlna_connected_tv_bg_land" + android:gravity="center">