From 95ded2f77c9c4ce409b1ff3baf91b7c9159c1b24 Mon Sep 17 00:00:00 2001 From: Martin <13046765170@163.com> Date: Wed, 8 May 2024 10:00:00 +0800 Subject: [PATCH] =?UTF-8?q?add[=E5=A3=B0=E6=9C=9B=E5=8D=87=E7=BA=A7-?= =?UTF-8?q?=E5=A4=9A=E4=BA=BAPK]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/proguard-rules.pro | 2 + .../beautyapi/faceunity/agora/SWManager.java | 14 ++++--- .../live/activity/LiveRyAnchorActivity.java | 1 - .../presenter/LiveRyLinkMicPkPresenter.java | 28 +++++++------ .../com/yunbao/live/socket/SocketClient.java | 2 + .../live/socket/SocketMessageListener.java | 1 + .../yunbao/live/socket/SocketRyClient.java | 30 ++++++++----- .../live/views/LivePlayRyViewHolder.java | 24 ++++++----- .../live/views/LivePushRyViewHolder.java | 42 +++++++++++++++++++ .../yunbao/live/views/LiveRoomViewHolder.java | 1 + .../live/views/PortraitLiveManager.java | 6 +-- .../main/res/layout/view_live_play_ksy.xml | 2 +- 12 files changed, 108 insertions(+), 45 deletions(-) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 1a522d0c3..bc2809798 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -190,6 +190,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode; -keep class org.greenrobot.eventbus.android.AndroidComponentsImpl* #--------ARouter + +-keep public class com.alibaba.android.arouter.**{*;} -keep public class com.alibaba.android.arouter.routes.**{*;} -keep public class com.alibaba.android.arouter.facade.**{*;} -keep class * implements com.alibaba.android.arouter.facade.template.ISyringe{*;} diff --git a/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java b/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java index 76d06f7fa..1b7e3ebff 100644 --- a/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java +++ b/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java @@ -153,20 +153,22 @@ public class SWManager extends BaseCacheManager { switch (selectClarity) { case 0: cfg.dimensions = VideoEncoderConfiguration.VD_840x480; + L.eSw("VideoEncoderConfiguration.VD_840x480"); break; case 1: cfg.dimensions = VideoEncoderConfiguration.VD_1280x720; + L.eSw("VideoEncoderConfiguration.VD_1280x720"); break; case 2: cfg.dimensions = VideoEncoderConfiguration.VD_1920x1080; + L.eSw("VideoEncoderConfiguration.VD_1920x1080"); + break; + case 3: + cfg.dimensions = VideoEncoderConfiguration.VD_320x240; + L.eSw("VideoEncoderConfiguration.VD_320x240"); break; } mRtcEngine.setVideoEncoderConfiguration(cfg); - // 创建一个 SurfaceView 对象,并将其作为 FrameLayout 的子对象 - SurfaceView surfaceView = new SurfaceView(mContext); - anchorContainer.addView(surfaceView); - // 设置视图 - mRtcEngine.setupLocalVideo(new VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_HIDDEN, uid)); } } @@ -241,7 +243,7 @@ public class SWManager extends BaseCacheManager { // 创建 ChannelMediaOptions 对象,并进行配置 ChannelMediaOptions options = new ChannelMediaOptions(); // 根据场景将用户角色设置为 AUDIENCE (观众) - options.clientRoleType = Constants.CLIENT_ROLE_BROADCASTER; + options.clientRoleType = Constants.CLIENT_ROLE_AUDIENCE; options.autoSubscribeVideo = true; options.autoSubscribeAudio = true; options.publishMicrophoneTrack = false; diff --git a/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java index 6a8d9bd51..3a4e4c05a 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java @@ -1314,7 +1314,6 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl if (mLiveAnchorViewHolder != null) { mLiveAnchorViewHolder.setYaoqing(pkUid); } - } /** diff --git a/live/src/main/java/com/yunbao/live/presenter/LiveRyLinkMicPkPresenter.java b/live/src/main/java/com/yunbao/live/presenter/LiveRyLinkMicPkPresenter.java index 32be6313e..a91c15a13 100644 --- a/live/src/main/java/com/yunbao/live/presenter/LiveRyLinkMicPkPresenter.java +++ b/live/src/main/java/com/yunbao/live/presenter/LiveRyLinkMicPkPresenter.java @@ -1041,7 +1041,7 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { } JSONObject obj = JSONObject.parseObject(info[0]); drPkbeans = JSONObject.parseArray(obj.getString("userlist"), DrPkbean.class); - + SWManager.get().setDimensions(3);//加入成功后,将分别率设置为 VD_320x240 //将自己从多人pk列表里剔除 int removeIndex = -1; for (int i = 0; i < drPkbeans.size(); i++) { @@ -1066,12 +1066,12 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { .param("action", 2) .param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()) .param("pkuid", CommonAppConfig.getInstance().getUid()) - .param("type", 2) + .param("msgtype", 2) .param("uid", drPkbeans.get(i).getId()) .param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar()) .param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()); msg1.create(); - + L.eSw("uiduiduiduiduiduiduiduid"+drPkbeans.get(i).getId()); String targetId = String.valueOf(drPkbeans.get(i).getId()); Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE; TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString()); @@ -1093,24 +1093,27 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { ToastUtil.show(errorCode.code + ":" + errorCode.msg); } }); + // int index = livePushRyViewHolder.setAnDrPkRtc(String.valueOf(drPkbeans.get(i).getId()), -1); L.eSw("onLinkDRMicPkApplyOk(UserBean u)-点击接收 1 " + u.getUserNiceName()); L.eSw("發送action = 2"); + } - if(!mApplyUid.equals(String.valueOf(drPkbeans.get(i).getId()))&&!CommonAppConfig.getInstance().getUid().equals(String.valueOf(drPkbeans.get(i).getId()))){ + + if (!CommonAppConfig.getInstance().getUid().equals(String.valueOf(drPkbeans.get(i).getId()))) { final SocketSendBean msg1 = new SocketSendBean().param("_method_", SOCKET_LIVE_DRPK) .param("action", 3) .param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()) .param("pkuid", CommonAppConfig.getInstance().getUid()) - .param("type", 3) + .param("msgtype", 3) .param("uid", drPkbeans.get(i).getId()) .param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar()) .param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()); msg1.create(); - - String targetId = "g" + drPkbeans.get(i).getId(); + L.eSw("發送給自己直播間"+drPkbeans.get(i).getId()); + String targetId = "g" + CommonAppConfig.getInstance().getUid(); Conversation.ConversationType conversationType = Conversation.ConversationType.CHATROOM; //群聊 TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString()); io.rong.imlib.model.Message message = io.rong.imlib.model.Message.obtain(targetId, conversationType, messageContent); @@ -1132,18 +1135,20 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { } }); } - if(!CommonAppConfig.getInstance().getUid().equals(String.valueOf(drPkbeans.get(i).getId()))){ + + + if(!mApplyUid.equals(String.valueOf(drPkbeans.get(i).getId()))&&!CommonAppConfig.getInstance().getUid().equals(String.valueOf(drPkbeans.get(i).getId()))){ final SocketSendBean msg1 = new SocketSendBean().param("_method_", SOCKET_LIVE_DRPK) .param("action", 3) .param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()) .param("pkuid", CommonAppConfig.getInstance().getUid()) - .param("type", 3) + .param("msgtype", 3) .param("uid", drPkbeans.get(i).getId()) .param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar()) .param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()); msg1.create(); - - String targetId = "g" + CommonAppConfig.getInstance().getUid(); + L.eSw("發送給其他主播直播间"+drPkbeans.get(i).getId()); + String targetId = "g" + drPkbeans.get(i).getId(); Conversation.ConversationType conversationType = Conversation.ConversationType.CHATROOM; //群聊 TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString()); io.rong.imlib.model.Message message = io.rong.imlib.model.Message.obtain(targetId, conversationType, messageContent); @@ -1156,7 +1161,6 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { @Override public void onSuccess(io.rong.imlib.model.Message message) { - } @Override diff --git a/live/src/main/java/com/yunbao/live/socket/SocketClient.java b/live/src/main/java/com/yunbao/live/socket/SocketClient.java index 4647f45d1..852ae096e 100644 --- a/live/src/main/java/com/yunbao/live/socket/SocketClient.java +++ b/live/src/main/java/com/yunbao/live/socket/SocketClient.java @@ -10,6 +10,7 @@ import android.widget.LinearLayout; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.google.gson.Gson; import com.tencent.imsdk.v2.V2TIMCallback; import com.tencent.imsdk.v2.V2TIMManager; import com.yunbao.common.CommonAppConfig; @@ -760,6 +761,7 @@ public class SocketClient { */ private static void processAnchorLinkMicPk(JSONObject map) { int action = map.getIntValue("action"); + L.eSw(new Gson().toJson(map)); switch (action) { case 1://收到对方主播发起PK回调 UserBean u = new UserBean(); diff --git a/live/src/main/java/com/yunbao/live/socket/SocketMessageListener.java b/live/src/main/java/com/yunbao/live/socket/SocketMessageListener.java index 0463910fd..6ac19c675 100644 --- a/live/src/main/java/com/yunbao/live/socket/SocketMessageListener.java +++ b/live/src/main/java/com/yunbao/live/socket/SocketMessageListener.java @@ -257,6 +257,7 @@ public interface SocketMessageListener { */ void onLinkMicPkClose(int i); + /** * 主播与主播PK 对方主播拒绝pk的回调 */ diff --git a/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java b/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java index 62b6e3b8b..bc88a548d 100644 --- a/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java +++ b/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java @@ -88,6 +88,7 @@ import java.util.List; import cn.rongcloud.rtc.api.RCRTCEngine; import cn.rongcloud.rtc.api.callback.IRCRTCResultCallback; import cn.rongcloud.rtc.base.RTCErrorCode; +import io.agora.beautyapi.faceunity.agora.SWManager; import io.rong.imlib.IRongCoreCallback; import io.rong.imlib.IRongCoreEnum; import io.rong.imlib.chatroom.base.RongChatRoomClient; @@ -315,12 +316,16 @@ public class SocketRyClient { } //收到对方同意多人PK邀请 else if (action3 == 2) { + if("0".equals(map.getString("msgtype"))){ + return; + } UserBean u = new UserBean(); // u.setUserNiceName(map.getString("uname")); u.setId(map.getString("pkuid")); L.eSw("action3 == 2:"+u.getId()); L.eSw("收到对方同意多人PK邀请"); mListener.onLinkDRMicPkApplyOk(u); + SWManager.get().setDimensions(3);//退出直播间,将分别率设置为 VD_840x480 } else if (action3 == 6) {//开始Pk if (LiveRoomViewHolder.mHandler != null) { LiveRoomViewHolder.mHandler.removeCallbacksAndMessages(null); @@ -343,25 +348,28 @@ public class SocketRyClient { // LiveAudienceActivity.getmLivePlayViewHolder().setPkEndview(); Bus.get().post(new LiveAudienceEvent().setType(LiveAudienceEvent.LiveAudienceType.SOCKET_LIVE_DRPK_SET_PK_END_VIEW)); } + SWManager.get().setDimensions(0);//退出直播间,将分别率设置为 VD_840x480 //創建了多人房間 } else if (action3 == 3) { L.eSw("創建了多人房間action3 == 3"); /* if (LiveAudienceActivity.getmLivePlayViewHolder() != null) { LiveAudienceActivity.getmLivePlayViewHolder().setPkview(); }*/ - if("4".equals(map.getString("msgtype"))){ - return; - } - UserBean u = new UserBean(); + if(livePushRyViewHolder==null){ + if("4".equals(map.getString("msgtype"))){ + return; + } + UserBean u = new UserBean(); // u.setUserNiceName(map.getString("uname")); - u.setId(map.getString("uid")); - if(StringUtil.isEmpty(u.getId())){ - return; + u.setId(map.getString("uid")); + if(StringUtil.isEmpty(u.getId())){ + return; + } + L.eSw("通知用户 action3 == 3:"+u.getId()); + mListener.onLinkDRMicPKToUser(u); + Bus.get().post(new LiveAudienceEvent().setType(LiveAudienceEvent.LiveAudienceType.SOCKET_LIVE_DRPK_SET_PK_VIEW)); + isDRPK = 1; } - L.eSw("通知用户 action3 == 3:"+u.getId()); - mListener.onLinkDRMicPKToUser(u); - Bus.get().post(new LiveAudienceEvent().setType(LiveAudienceEvent.LiveAudienceType.SOCKET_LIVE_DRPK_SET_PK_VIEW)); - isDRPK = 1; } else if (action3 == 10) { //显示pk分数 if (!map.getString("uid").equals(CommonAppConfig.getInstance().getUid())) { diff --git a/live/src/main/java/com/yunbao/live/views/LivePlayRyViewHolder.java b/live/src/main/java/com/yunbao/live/views/LivePlayRyViewHolder.java index 73cd4416e..c1960b6b5 100644 --- a/live/src/main/java/com/yunbao/live/views/LivePlayRyViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LivePlayRyViewHolder.java @@ -252,6 +252,7 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder { ry_view.removeAllViews(); swAuManager.updateMyChannelView((FrameLayout) dr1_preview, Integer.parseInt(liveUid)); swAuManager.joinChannelDrEx(dr2_preview, CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, u.getId(), SWAuManager.getChannelName(u.getId())); + dr1_preview.setVisibility(View.VISIBLE); dr2_preview.setVisibility(View.VISIBLE); dr3_preview.setVisibility(View.GONE); dr4_preview.setVisibility(View.GONE); @@ -306,11 +307,15 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder { } public void setDrPkView(List drPkbeanList){ - if (detailsView1 != null) { dr1_preview.removeView(detailsView1); } - detailsView1 = LayoutInflater.from(mContext).inflate(R.layout.view_live_pk_details, null); + + /*new Handler().postDelayed(new Runnable() { + @Override + public void run() { + + detailsView1 = LayoutInflater.from(mContext).inflate(R.layout.view_live_pk_details, null); detailsLinearLayout1 = detailsView1.findViewById(R.id.lin_pk1); linearGrade1 = detailsView1.findViewById(R.id.linear_grade1); imageGrade1 = detailsView1.findViewById(R.id.image_grade1); @@ -320,9 +325,7 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder { dr1_preview.addView(detailsView1); detailsLinearLayout1.setVisibility(View.VISIBLE); linearGrade1.setVisibility(View.GONE); - new Handler().postDelayed(new Runnable() { - @Override - public void run() { + for (int j = 0; j < drPkbeanList.size(); j++) { if (j == 0) { L.eSw("j == 0:" + j); @@ -392,7 +395,7 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder { } } } - }, 2000); + }, 2000);*/ } @@ -407,6 +410,7 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder { mPkContainer.setVisibility(View.GONE); swAuManager.exitChannelToUid(Integer.parseInt(CommonAppConfig.getInstance().getUid()), SWAuManager.getChannelName(pkUid)); swAuManager.updateMyChannelView(ry_view, Integer.parseInt(liveUid)); + ry_view.setVisibility(View.VISIBLE); mLeftContainer.removeAllViews(); mRightContainer.removeAllViews(); } @@ -942,7 +946,7 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder { LiveAudienceActivity.mProcessResultUtil.requestPermissions(permissions, new Runnable() { @Override public void run() { - //UsertoRY(); + // UsertoRY(); //将自己设置成给主播,和主播连麦 L.eSw("将自己设置成给主播,和主播连麦"); joinLiveMic(); @@ -1068,18 +1072,17 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder { } } - /** * 把观众转换成主播 */ public List userinputStreamList = new ArrayList<>(); - public void UsertoRY() { userinputStreamList.clear(); Log.e("ry", "主播同意了UsertoRY"); if (userJoinLinkMic) {//已经在房间内,不再joinRoom直接去连麦 - subscribeMic(rcrtcRoom); + //subscribeMic(rcrtcRoom); + joinLiveMic(); return; } RCRTCRoomConfig roomConfig = RCRTCRoomConfig.Builder.create() @@ -1093,7 +1096,6 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder { userJoinLinkMic = true; rcrtcRoom = data; subscribeMic(data); - } @Override diff --git a/live/src/main/java/com/yunbao/live/views/LivePushRyViewHolder.java b/live/src/main/java/com/yunbao/live/views/LivePushRyViewHolder.java index a54f2f6b4..6178fa71e 100644 --- a/live/src/main/java/com/yunbao/live/views/LivePushRyViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LivePushRyViewHolder.java @@ -88,6 +88,7 @@ import io.agora.beautyapi.faceunity.agora.SWManager; import io.rong.imlib.IRongCallback; import io.rong.imlib.RongIMClient; import io.rong.imlib.model.Conversation; +import io.rong.imlib.model.Message; import io.rong.message.TextMessage; /** @@ -604,6 +605,47 @@ public class LivePushRyViewHolder extends AbsRyLivePushViewHolder implements ITX swManager.setPkContainer(mRightContainer); swManager.joinChannelEx(CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, u.getId(), SWAuManager.getChannelName(u.getId())); } + HttpClient.getInstance().get("Livepk.setPK", "Livepk.setPK") + .params("uid", CommonAppConfig.getInstance().getUid()) + .params("pkuid", u.getId()) + .params("type", "1") + .params("sign", "1") + .execute(new HttpCallback() { + @Override + public void onSuccess(int code, String msgs, String[] info) { + if (code == 0) { + final SocketSendBean msg1 = new SocketSendBean() + .param("_method_", Constants.SOCKET_LINK_MIC_PK) + .param("action", 4) + .param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()) + .param("pkuid", u.getId()) + .param("uid", CommonAppConfig.getInstance().getUid()); + msg1.create(); + + Conversation.ConversationType conversationType = Conversation.ConversationType.CHATROOM; + TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString()); + Message message1 = Message.obtain("g" + CommonAppConfig.getInstance().getUid(), conversationType, messageContent); + + RongIMClient.getInstance().sendMessage(message1, null, null, new IRongCallback.ISendMessageCallback() { + @Override + public void onAttached(Message message) { + + } + + @Override + public void onSuccess(Message message) { + Log.i("tx", "发送成功"); + } + + @Override + public void onError(Message message, RongIMClient.ErrorCode errorCode) { + + } + }); + } + + } + }); } private int currentPosition = 0; diff --git a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java index 726d171b5..5fdcd3f5d 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java @@ -5302,6 +5302,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis linearGrade2.setVisibility(View.GONE); linearGrade3.setVisibility(View.GONE); linearGrade4.setVisibility(View.GONE); + mRoot.removeView(detailsView); mRoot.addView(detailsView); mRoot.post(new Runnable() { @Override diff --git a/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java b/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java index 7c5d090bf..eacf7ba34 100644 --- a/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java +++ b/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java @@ -660,7 +660,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe mLivePlayViewHolder.setDrMicInfo(drPkbean); } } - mLivePlayViewHolder.setDrPkView(drPkbeans); + //mLivePlayViewHolder.setDrPkView(drPkbeans); } }else{//单人连麦 LivePkMicModel connection_info = data.getEnterRoomInfo().getConnectionInfo(); @@ -723,7 +723,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe UserBean userBean = new UserBean(); DrPkbean drPkbean = new DrPkbean(); JSONObject da = array.getJSONObject(j); - if(!String.valueOf(da.getIntValue("id")).equals(data.getLiveInfo().getUid())){ + if(!String.valueOf(da.getIntValue("id")).equals(String.valueOf(data.getLiveInfo().getUid()))){ userBean.setId(String.valueOf(da.getIntValue("id"))); drPkbean.setId(da.getIntValue("id")); drPkbean.setUser_nicename(da.getString("user_nicename")); @@ -731,7 +731,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe mLivePlayViewHolder.setDrMicInfo(userBean); } } - mLivePlayViewHolder.setDrPkView(drPkbeans); + //mLivePlayViewHolder.setDrPkView(drPkbeans); } upDataPkScore(pkInfo.getJSONArray("userlist"), pkInfo.getIntValue("drpk_time")); diff --git a/live/src/main/res/layout/view_live_play_ksy.xml b/live/src/main/res/layout/view_live_play_ksy.xml index 03fe704b1..f7c596dc0 100644 --- a/live/src/main/res/layout/view_live_play_ksy.xml +++ b/live/src/main/res/layout/view_live_play_ksy.xml @@ -69,7 +69,7 @@