fix[声望升级-修复BUG]

This commit is contained in:
Martin 2024-05-29 21:24:05 +08:00
parent 9711b1f8d4
commit d9b1149832
17 changed files with 323 additions and 861 deletions

View File

@ -1649,6 +1649,13 @@ public abstract class LiveActivity extends AbsActivity implements SocketMessageL
} }
} }
@Override
public void onLinkDRMicPkQuit(String uid) {
if(mLiveSwLinkMicPkPresenter!=null){
mLiveSwLinkMicPkPresenter.onLinkDRMicPkQuit(uid);
}
}
@Override @Override
public boolean isSoftInputShowed() { public boolean isSoftInputShowed() {
if (mKeyBoardHeightUtil != null) { if (mKeyBoardHeightUtil != null) {

View File

@ -551,6 +551,11 @@ public class LiveAudienceActivity extends LiveActivity {
//manager.getmLivePlayViewHolder().setDrMicInfo(u); //manager.getmLivePlayViewHolder().setDrMicInfo(u);
} }
@Override
public void onLinkDRMicPkQuit(String uid) {
}
@Override @Override
public void onLinkDRMicPkApplyOk(UserBean u) { public void onLinkDRMicPkApplyOk(UserBean u) {
L.eSw("onLinkDRMicPkApplyOk:" + u.getId()); L.eSw("onLinkDRMicPkApplyOk:" + u.getId());

View File

@ -1288,6 +1288,13 @@ public class LiveSwAnchorActivity extends LiveActivity implements LiveFunctionCl
} }
} }
public void linkDrMicRemoveListUid(String uid){
if (mLiveAnchorViewHolder != null) {
mLiveAnchorViewHolder.removeYaoqing(uid);
}
}
/** /**
* 发起多人主播连麦PK申请 * 发起多人主播连麦PK申请
* *
@ -1655,6 +1662,7 @@ public class LiveSwAnchorActivity extends LiveActivity implements LiveFunctionCl
break; break;
case LEAVE_PK_SCORE: case LEAVE_PK_SCORE:
if (mLiveSwLinkMicPkPresenter != null) { if (mLiveSwLinkMicPkPresenter != null) {
mLiveSwLinkMicPkPresenter.closeButtonGone();
mLiveSwLinkMicPkPresenter.upDataPkScore(event.getPkScores(), event.getUid(), event.getTime()); mLiveSwLinkMicPkPresenter.upDataPkScore(event.getPkScores(), event.getUid(), event.getTime());
} }
if (mLiveRoomViewHolder != null) { if (mLiveRoomViewHolder != null) {

View File

@ -490,7 +490,8 @@ public class LiveAudienceEvent extends BaseModel {
SUD_GAME_CREATE_ROOM(75, "主播创建sud游戏"), SUD_GAME_CREATE_ROOM(75, "主播创建sud游戏"),
PK_RANK_START(76, "PK排位赛开始"), PK_RANK_START(76, "PK排位赛开始"),
GuardSpecialEffect(77, "PK排位赛开始"), GuardSpecialEffect(77, "PK排位赛开始"),
LIVE_DIALOG_ANCHOR_TIPS(78, "主播公会赛tips"); LIVE_DIALOG_ANCHOR_TIPS(78, "主播公会赛tips"),
LIVE_REMOVE_LIVEUID(79, "主播退出多人PK");
private int type; private int type;
private String name; private String name;

View File

@ -5,6 +5,7 @@ import static com.yunbao.common.Constants.SOCKET_LINK_MIC_PK;
import static com.yunbao.common.Constants.SOCKET_LIVE_DRPK; import static com.yunbao.common.Constants.SOCKET_LIVE_DRPK;
import static com.yunbao.live.activity.LiveSwAnchorActivity.PKing; import static com.yunbao.live.activity.LiveSwAnchorActivity.PKing;
import static com.yunbao.live.activity.LiveSwAnchorActivity.isDRPK; import static com.yunbao.live.activity.LiveSwAnchorActivity.isDRPK;
import static com.yunbao.live.activity.LiveSwAnchorActivity.mLiveAnchorViewHolder;
import static com.yunbao.live.views.LivePushSwViewHolder.btn_close; import static com.yunbao.live.views.LivePushSwViewHolder.btn_close;
import static com.yunbao.live.views.LivePushSwViewHolder.rtcRoom; import static com.yunbao.live.views.LivePushSwViewHolder.rtcRoom;
@ -457,6 +458,30 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
showDRApplyDialog(u); showDRApplyDialog(u);
} }
public void onLinkDRMicPkQuit(String uid) {
HttpClient.getInstance().get("Live.getDRPKroom", "Live.getDRPKroom").params("uid", CommonAppConfig.getInstance().getUid()).params("roomid", mApplyUid).execute(new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (info.length > 0) {
//退出所有直播間
livePushSwViewHolder.exitChannelDrPk(drPkbeans);
JSONObject obj = JSONObject.parseObject(info[0]);
drPkbeans = JSONObject.parseArray(obj.getString("userlist"), DrPkbean.class);
for (int i = 0; i < drPkbeans.size(); i++) {
if (!CommonAppConfig.getInstance().getUid().equals(String.valueOf(drPkbeans.get(i).getId()))) {
livePushSwViewHolder.setAnDrPkRtc(String.valueOf(drPkbeans.get(i).getId()), -1);
}
}
if(drPkbeans.size()==1){
mLiveAnchorViewHolder.closeEndPkBt();
}
}
}
});
}
/** /**
* 主播与主播PK 主播收到其他主播发过来的多人PK申请同意了的回调 * 主播与主播PK 主播收到其他主播发过来的多人PK申请同意了的回调
*/ */
@ -466,14 +491,7 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
if (livePushSwViewHolder != null) { if (livePushSwViewHolder != null) {
livePushSwViewHolder.setAnDrPkRtc(String.valueOf(u.getId()), -1); livePushSwViewHolder.setAnDrPkRtc(String.valueOf(u.getId()), -1);
} }
final SocketSendBean msg1 = new SocketSendBean().param("_method_", SOCKET_LIVE_DRPK) 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("uid", u.getId()).param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar()).param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName());
.param("action", 3)
.param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName())
.param("pkuid", CommonAppConfig.getInstance().getUid())
.param("type", 3)
.param("uid", u.getId())
.param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar())
.param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName());
msg1.create(); msg1.create();
String targetId = "g" + CommonAppConfig.getInstance().getUid(); String targetId = "g" + CommonAppConfig.getInstance().getUid();
@ -498,6 +516,8 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
} }
}); });
dRjoinOtherRoom(u); dRjoinOtherRoom(u);
//展示结束连麦按钮
mLiveAnchorViewHolder.showEndPkBt();
} }
/** /**
@ -509,18 +529,18 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
mApplyUrl = u.getAvatar(); mApplyUrl = u.getAvatar();
mApplyNmae = u.getUserNiceName(); mApplyNmae = u.getUserNiceName();
if (by != 1) { if (by != 1) {
Log.e("ry", "1"+u.getUserNiceName() + "单人收到" + u.getAvatar()); Log.e("ry", "1" + u.getUserNiceName() + "单人收到" + u.getAvatar());
if (mIsApplyDialogShow == false) { if (mIsApplyDialogShow == false) {
if (u.isRandomPk()) { if (u.isRandomPk()) {
Log.e("ry", "2"+u.getUserNiceName() + "单人收到" + u.getAvatar()); Log.e("ry", "2" + u.getUserNiceName() + "单人收到" + u.getAvatar());
showPkDialog(u); showPkDialog(u);
} else { } else {
Log.e("ry", "3"+u.getUserNiceName() + "单人收到" + u.getAvatar()); Log.e("ry", "3" + u.getUserNiceName() + "单人收到" + u.getAvatar());
showApplyDialog(u); showApplyDialog(u);
} }
} }
} else { } else {
Log.e("ry", "4"+u.getUserNiceName() + "单人收到" + u.getAvatar()); Log.e("ry", "4" + u.getUserNiceName() + "单人收到" + u.getAvatar());
isPK(u); isPK(u);
} }
} }
@ -553,14 +573,8 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
LiveSwAnchorActivity.isDRPK = 1; LiveSwAnchorActivity.isDRPK = 1;
/*---------------------------------------------------------------- */ /*---------------------------------------------------------------- */
final SocketSendBean msg1 = new SocketSendBean().param("_method_", SOCKET_LINK_MIC_PK) final SocketSendBean msg1 = new SocketSendBean().param("_method_", SOCKET_LINK_MIC_PK).param("action", 2) //回复PK申请 2
.param("action", 2) //回复PK申请 2 .param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()).param("pkuid", bean.getId()).param("uid", CommonAppConfig.getInstance().getUid()).param("uhead", CommonAppConfig.getInstance().getUserBean().getAvatar()).param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar()).param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName());
.param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName())
.param("pkuid", bean.getId())
.param("uid", CommonAppConfig.getInstance().getUid())
.param("uhead", CommonAppConfig.getInstance().getUserBean().getAvatar())
.param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar())
.param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName());
if (RandomPkManager.getInstance().isRankModel()) { if (RandomPkManager.getInstance().isRankModel()) {
L.eSw("排位赛"); L.eSw("排位赛");
msg1.param("is_ladders", "https://downs.yaoulive.com/rank_top_box.png"); msg1.param("is_ladders", "https://downs.yaoulive.com/rank_top_box.png");
@ -570,7 +584,7 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
System.out.println("PK回执 = " + msg1.toString()); System.out.println("PK回执 = " + msg1.toString());
Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE; Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE;
TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString()); TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString());
io.rong.imlib.model.Message message = io.rong.imlib.model.Message.obtain( bean.getId(), conversationType, messageContent); io.rong.imlib.model.Message message = io.rong.imlib.model.Message.obtain(bean.getId(), conversationType, messageContent);
RongIMClient.getInstance().sendMessage(message, null, null, new IRongCallback.ISendMessageCallback() { RongIMClient.getInstance().sendMessage(message, null, null, new IRongCallback.ISendMessageCallback() {
@Override @Override
@ -633,11 +647,13 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
if (obj != null) { if (obj != null) {
if (obj.getString("ispk").equals("0")) { if (obj.getString("ispk").equals("0")) {
isPK(u); isPK(u);
}else{ } else {
ToastUtil.show(mContext.getString(R.string.pking_over)); ToastUtil.show(mContext.getString(R.string.pking_over));
} }
} }
}}}); }
}
});
} else { } else {
if (mPkWaitCount < 0) { if (mPkWaitCount < 0) {
final SocketSendBean msg1 = new SocketSendBean().param("_method_", SOCKET_LINK_MIC_PK).param("action", 8); final SocketSendBean msg1 = new SocketSendBean().param("_method_", SOCKET_LINK_MIC_PK).param("action", 8);
@ -701,6 +717,7 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
} }
} }
}); });
mLiveAnchorViewHolder.closeEndPkBt();
livePushSwViewHolder.exitChannelDrPk(drPkbeans); livePushSwViewHolder.exitChannelDrPk(drPkbeans);
leaveHandler.removeCallbacks(leaveRunnable); leaveHandler.removeCallbacks(leaveRunnable);
} }
@ -911,17 +928,9 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
drPkbeans = JSONObject.parseArray(obj.getString("userlist"), DrPkbean.class); drPkbeans = JSONObject.parseArray(obj.getString("userlist"), DrPkbean.class);
for (int i = 0; i < drPkbeans.size(); i++) { for (int i = 0; i < drPkbeans.size(); i++) {
if (!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) final SocketSendBean msg1 = new SocketSendBean().param("_method_", SOCKET_LIVE_DRPK).param("action", 2).param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()).param("pkuid", CommonAppConfig.getInstance().getUid()).param("msgtype", 2).param("uid", drPkbeans.get(i).getId()).param("uhead", CommonAppConfig.getInstance().getUserBean().getAvatar()).param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar()).param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName());
.param("action", 2)
.param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName())
.param("pkuid", CommonAppConfig.getInstance().getUid())
.param("msgtype", 2)
.param("uid", drPkbeans.get(i).getId())
.param("uhead", CommonAppConfig.getInstance().getUserBean().getAvatar())
.param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar())
.param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName());
msg1.create(); msg1.create();
L.eSw("uiduiduiduiduiduiduiduid"+drPkbeans.get(i).getId()); L.eSw("uiduiduiduiduiduiduiduid" + drPkbeans.get(i).getId());
String targetId = String.valueOf(drPkbeans.get(i).getId()); String targetId = String.valueOf(drPkbeans.get(i).getId());
Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE; Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE;
TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString()); TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString());
@ -953,16 +962,9 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
} }
if (!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) 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("msgtype", 3).param("uid", drPkbeans.get(i).getId()).param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar()).param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName());
.param("action", 3)
.param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName())
.param("pkuid", CommonAppConfig.getInstance().getUid())
.param("msgtype", 3)
.param("uid", drPkbeans.get(i).getId())
.param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar())
.param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName());
msg1.create(); msg1.create();
L.eSw("發送給自己直播間"+drPkbeans.get(i).getId()); L.eSw("發送給自己直播間" + drPkbeans.get(i).getId());
String targetId = "g" + CommonAppConfig.getInstance().getUid(); String targetId = "g" + CommonAppConfig.getInstance().getUid();
Conversation.ConversationType conversationType = Conversation.ConversationType.CHATROOM; //群聊 Conversation.ConversationType conversationType = Conversation.ConversationType.CHATROOM; //群聊
TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString()); TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString());
@ -987,17 +989,10 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
} }
if(!mApplyUid.equals(String.valueOf(drPkbeans.get(i).getId()))&&!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) 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("msgtype", 3).param("uid", drPkbeans.get(i).getId()).param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar()).param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName());
.param("action", 3)
.param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName())
.param("pkuid", CommonAppConfig.getInstance().getUid())
.param("msgtype", 3)
.param("uid", drPkbeans.get(i).getId())
.param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar())
.param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName());
msg1.create(); msg1.create();
L.eSw("發送給其他主播直播间"+drPkbeans.get(i).getId()); L.eSw("發送給其他主播直播间" + drPkbeans.get(i).getId());
String targetId = "g" + drPkbeans.get(i).getId(); String targetId = "g" + drPkbeans.get(i).getId();
Conversation.ConversationType conversationType = Conversation.ConversationType.CHATROOM; //群聊 Conversation.ConversationType conversationType = Conversation.ConversationType.CHATROOM; //群聊
TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString()); TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString());
@ -1022,41 +1017,13 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
} }
} }
dRjoinOtherRoom(u); dRjoinOtherRoom(u);
//展示结束连麦按钮
//设置多人PK 房主ROOM UID
mLiveAnchorViewHolder.setDrpkRoomId(mApplyUid);
mLiveAnchorViewHolder.showEndPkBt();
} }
} }
}); });
/*for (int i = 0; i < users.size(); i++) {
JSONObject user = users.getJSONObject(i);
Log.e("ry", mApplyUid + "VS" + user.getString("id") + "列表");
if (!user.getString("id").equals(CommonAppConfig.getInstance().getUid())) {
if (!user.getString("id").equals(CommonAppConfig.getInstance().getUid()) && !user.getString("id").equals(u.getId())) {
*//**
* 向指定用户发送跨房间连麦请求
* <P>
* 1: inviterAutoMix为true时
*
* 1.1如果被邀请方在加入邀请方房间之前发布了资源当被邀请方加入邀请者房间成功后服务器会把被邀请方流资源合并到邀请方视图 ·默认仅悬浮布局合流
*
* 1.2如果被邀请方在加入邀请方房间之前没有发布过资源将会在被邀请方发布资源成功后服务器会把被邀请方流资源合并到邀请方视图默认仅悬浮布局合流
*
* 2:无论为true或false双方都可以使用{@link RCRTCLiveInfo#setMixConfig(RCRTCMixConfig, IRCRTCResultCallback)} 方法主动设置合流布局一旦主动设置过合流布局后续音视频直播过程中设置的自动合流参数将失效
* <P/>
*//*
IMRTCManager.getInstance().requestJoinOtherRoom(user.getString("id"), false, "LiveDRPK1", new IRCRTCResultCallback() {
@Override
public void onSuccess() {
}
@Override
public void onFailed(RTCErrorCode errorCode) {
}
});
}
}
}*/
} }
}); });
} }
@ -1071,22 +1038,6 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
} }
} }
}); });
/*LiveHttpUtil.livePkCheckLive(u.getId(), "", "", new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0 && info.length > 0) {
JSONObject obj = JSON.parseObject(info[0]);
if (obj != null) {
if (obj.getString("ispk").equals("0")) {
} else {
ToastUtil.show(mContext.getString(R.string.pking_over));
}
}
}
}
});*/
} else { } else {
if (mPkWaitCount < 0) { if (mPkWaitCount < 0) {
IMRTCManager.getInstance().responseJoinOtherRoom(u.getId(), false, "extra", new IRCRTCResultCallback() { IMRTCManager.getInstance().responseJoinOtherRoom(u.getId(), false, "extra", new IRCRTCResultCallback() {
@ -1199,7 +1150,7 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
} }
public void setPkUserInfoView(UserBean userBean){ public void setPkUserInfoView(UserBean userBean) {
} }
@ -1431,7 +1382,7 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
* 主播与主播PK 所有人收到PK开始的回调 * 主播与主播PK 所有人收到PK开始的回调
*/ */
public void onLinkMicPkStart(String pkUid, int i) { public void onLinkMicPkStart(String pkUid, int i) {
L.eSw("onLinkMicPkStart pkUid "+pkUid+" "+i); L.eSw("onLinkMicPkStart pkUid " + pkUid + " " + i);
Log.d("tag", i + "mPkTimeCount2"); Log.d("tag", i + "mPkTimeCount2");
mIsPk = true; mIsPk = true;
hideSendPkWait(); hideSendPkWait();
@ -1440,7 +1391,7 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
mPkUid = pkUid; mPkUid = pkUid;
mApplyUid = null; mApplyUid = null;
mApplyStream = null; mApplyStream = null;
isDRPK=1; isDRPK = 1;
if (mLiveLinkMicPkViewHolder == null) { if (mLiveLinkMicPkViewHolder == null) {
mLiveLinkMicPkViewHolder = new LiveLinkMicPkViewHolder(mContext, mPkContainer); mLiveLinkMicPkViewHolder = new LiveLinkMicPkViewHolder(mContext, mPkContainer);
mLiveLinkMicPkViewHolder.addToParent(); mLiveLinkMicPkViewHolder.addToParent();
@ -1611,7 +1562,6 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
mLiveLinkMicPkViewHolder = null; mLiveLinkMicPkViewHolder = null;
} }
public void clearData() { public void clearData() {
mIsApplyDialogShow = false; mIsApplyDialogShow = false;
mAcceptPk = false; mAcceptPk = false;
@ -1635,11 +1585,14 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
mLiveLinkMicPkViewHolder = null; mLiveLinkMicPkViewHolder = null;
} }
public void setSelfStream(String selfStream) { public void setSelfStream(String selfStream) {
mSelfStream = selfStream; mSelfStream = selfStream;
} }
public void closeButtonGone() {
mLiveAnchorViewHolder.closeEndPkBt();
}
/** /**
* 更新Pk分数 * 更新Pk分数
*/ */
@ -1864,6 +1817,7 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener {
mHandler.sendEmptyMessageAtTime(WHAT_PK_TIME2, getNextSecondTime()); mHandler.sendEmptyMessageAtTime(WHAT_PK_TIME2, getNextSecondTime());
} }
} else { } else {
mLiveAnchorViewHolder.showEndPkBt();
livePushSwViewHolder.timeTitle.setVisibility(View.GONE); livePushSwViewHolder.timeTitle.setVisibility(View.GONE);
if (mHandler != null) { if (mHandler != null) {
mHandler.removeCallbacksAndMessages(null); mHandler.removeCallbacksAndMessages(null);

View File

@ -247,6 +247,8 @@ public interface SocketMessageListener {
//接受多人PK //接受多人PK
void onLinkDRMicPkApplyOk(UserBean u); void onLinkDRMicPkApplyOk(UserBean u);
void onLinkDRMicPkQuit(String uid);
/** /**
* 主播与主播PK 所有人收到PK开始的回调 * 主播与主播PK 所有人收到PK开始的回调
*/ */

View File

@ -199,7 +199,7 @@ public class SocketSwClient {
//用户连麦 //用户连麦
case Constants.LIAN_MAI: case Constants.LIAN_MAI:
int actions = map.getIntValue("action"); int actions = map.getIntValue("action");
L.eSw("用户连麦:actions"+actions); L.eSw("用户连麦:actions" + actions);
//主播邀请用户连麦消息 //主播邀请用户连麦消息
if (actions == 1) { if (actions == 1) {
EventBus.getDefault().post("inviteMic"); EventBus.getDefault().post("inviteMic");
@ -304,7 +304,7 @@ public class SocketSwClient {
// break; // break;
case Constants.SOCKET_LIVE_DRPK_RANDOM: case Constants.SOCKET_LIVE_DRPK_RANDOM:
case Constants.SOCKET_LIVE_DRPK://多人PK case Constants.SOCKET_LIVE_DRPK://多人PK
L.eSw("map"+new Gson().toJson(map)); L.eSw("map" + new Gson().toJson(map));
int action3 = map.getIntValue("action"); int action3 = map.getIntValue("action");
//收到多人PK邀请 //收到多人PK邀请
if (action3 == 1) { if (action3 == 1) {
@ -314,13 +314,13 @@ public class SocketSwClient {
mListener.onLinkDRMicPkApply(u); mListener.onLinkDRMicPkApply(u);
} else if (action3 == 2) { } else if (action3 == 2) {
//收到对方同意多人PK邀请 //收到对方同意多人PK邀请
if("0".equals(map.getString("msgtype"))){ if ("0".equals(map.getString("msgtype"))) {
return; return;
} }
UserBean u = new UserBean(); UserBean u = new UserBean();
// u.setUserNiceName(map.getString("uname")); // u.setUserNiceName(map.getString("uname"));
u.setId(map.getString("pkuid")); u.setId(map.getString("pkuid"));
L.eSw("action3 == 2:"+u.getId()); L.eSw("action3 == 2:" + u.getId());
L.eSw("收到对方同意多人PK邀请"); L.eSw("收到对方同意多人PK邀请");
mListener.onLinkDRMicPkApplyOk(u); mListener.onLinkDRMicPkApplyOk(u);
SWManager.get().setDimensions(3);//退出直播间将分别率设置为 VD_840x480 SWManager.get().setDimensions(3);//退出直播间将分别率设置为 VD_840x480
@ -334,7 +334,7 @@ public class SocketSwClient {
// LiveAudienceActivity.getmLivePlayViewHolder().setPkview(); // LiveAudienceActivity.getmLivePlayViewHolder().setPkview();
Bus.get().post(new LiveAudienceEvent().setType(LiveAudienceEvent.LiveAudienceType.SOCKET_LIVE_DRPK_SET_PK_VIEW)); Bus.get().post(new LiveAudienceEvent().setType(LiveAudienceEvent.LiveAudienceType.SOCKET_LIVE_DRPK_SET_PK_VIEW));
} }
} else if (action3 == 5) { } else if (action3 == 5) {//结束PK
// endDRGif(); // endDRGif();
LiveRoomViewHolder.d_pk_view.setVisibility(View.GONE); LiveRoomViewHolder.d_pk_view.setVisibility(View.GONE);
if (LiveSwAnchorActivity.mLiveAnchorViewHolder != null) { if (LiveSwAnchorActivity.mLiveAnchorViewHolder != null) {
@ -353,20 +353,20 @@ public class SocketSwClient {
/* if (LiveAudienceActivity.getmLivePlayViewHolder() != null) { /* if (LiveAudienceActivity.getmLivePlayViewHolder() != null) {
LiveAudienceActivity.getmLivePlayViewHolder().setPkview(); LiveAudienceActivity.getmLivePlayViewHolder().setPkview();
}*/ }*/
if(livePushSwViewHolder==null){ isDRPK = 1;
if("4".equals(map.getString("msgtype"))){ if (livePushSwViewHolder == null) {
if ("4".equals(map.getString("msgtype"))) {
return; return;
} }
UserBean u = new UserBean(); UserBean u = new UserBean();
// u.setUserNiceName(map.getString("uname")); // u.setUserNiceName(map.getString("uname"));
u.setId(map.getString("uid")); u.setId(map.getString("uid"));
if(StringUtil.isEmpty(u.getId())){ if (StringUtil.isEmpty(u.getId())) {
return; return;
} }
L.eSw("通知用户 action3 == 3:"+u.getId()); L.eSw("通知用户 action3 == 3:" + u.getId());
mListener.onLinkDRMicPKToUser(u); mListener.onLinkDRMicPKToUser(u);
Bus.get().post(new LiveAudienceEvent().setType(LiveAudienceEvent.LiveAudienceType.SOCKET_LIVE_DRPK_SET_PK_VIEW)); Bus.get().post(new LiveAudienceEvent().setType(LiveAudienceEvent.LiveAudienceType.SOCKET_LIVE_DRPK_SET_PK_VIEW));
isDRPK = 1;
} }
} else if (action3 == 10) { } else if (action3 == 10) {
//显示pk分数 //显示pk分数
@ -374,6 +374,13 @@ public class SocketSwClient {
// LiveAudienceActivity.getmLivePlayViewHolder().setPkview(); // LiveAudienceActivity.getmLivePlayViewHolder().setPkview();
Bus.get().post(new LiveAudienceEvent().setType(LiveAudienceEvent.LiveAudienceType.SOCKET_LIVE_DRPK_SET_PK_VIEW)); Bus.get().post(new LiveAudienceEvent().setType(LiveAudienceEvent.LiveAudienceType.SOCKET_LIVE_DRPK_SET_PK_VIEW));
} }
} else if (action3 == 7) {
L.eSw("主播退出直播間:"+map.getString("uid"));
mListener.onLinkDRMicPkQuit(map.getString("uid"));
//清除已邀请人数
if(LiveSwAnchorActivity.mLiveAnchorViewHolder!=null){
LiveSwAnchorActivity.mLiveAnchorViewHolder.removeYaoqing(map.getString("uid"));
}
} }
break; break;
@ -1282,10 +1289,13 @@ public class SocketSwClient {
u.setUserNiceName(map.getString("uname")); u.setUserNiceName(map.getString("uname"));
u.setAvatar(map.getString("uhead")); u.setAvatar(map.getString("uhead"));
u.setRandomPk("11".equals(map.getString("msgtype"))); u.setRandomPk("11".equals(map.getString("msgtype")));
mListener.onLinkMicPkApply(u, map.getString("stream"), "11".equals(map.getString("msgtype"))?2:1); mListener.onLinkMicPkApply(u, map.getString("stream"), "11".equals(map.getString("msgtype")) ? 2 : 1);
break; break;
case 2://收到对方主播PK回调 case 2://收到对方主播PK回调
L.eSw("收到对方主播PK回调"); L.eSw("收到对方主播PK回调");
/*if("1".equals(map.getString("random_pk"))){
}*/
RandomPkManager.getInstance().setPkStatus(RandomPkManager.PK_STATUS_START); RandomPkManager.getInstance().setPkStatus(RandomPkManager.PK_STATUS_START);
mListener.onLinkMicToPk(map.getString("uid"), map.getString("uhead"), map.getString("uhead")); mListener.onLinkMicToPk(map.getString("uid"), map.getString("uhead"), map.getString("uhead"));
mListener.onLinkMicPkStart(map.getString("uid"), map.getString("uhead"), map.getString("uname"), map.getString("is_ladders"));// mListener.onLinkMicPkStart(map.getString("uid")); mListener.onLinkMicPkStart(map.getString("uid"), map.getString("uhead"), map.getString("uname"), map.getString("is_ladders"));// mListener.onLinkMicPkStart(map.getString("uid"));
@ -1340,15 +1350,13 @@ public class SocketSwClient {
} }
break; break;
case 10://系统发起PK回调 case 10://系统发起PK回调
if(livePushSwViewHolder!=null){ if (livePushSwViewHolder != null) {
final SocketSendBean msg1 = new SocketSendBean().param("_method_", SOCKET_LINK_MIC_PK) final SocketSendBean msg1 = new SocketSendBean()
.param("action", 2) .param("_method_", SOCKET_LINK_MIC_PK).param("action", 2)
.param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()) .param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()).param("pkuid", CommonAppConfig.getInstance().getUid())
.param("pkuid", CommonAppConfig.getInstance().getUid()) .param("msgtype", 2).param("uid", CommonAppConfig.getInstance().getUid())
.param("msgtype", 2)
.param("uid", CommonAppConfig.getInstance().getUid())
.param("uhead", CommonAppConfig.getInstance().getUserBean().getAvatar()) .param("uhead", CommonAppConfig.getInstance().getUserBean().getAvatar())
.param("random_pk", "1") .param("is_auto ", "1")
.param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar()) .param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar())
.param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()); .param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName());
msg1.create(); msg1.create();
@ -1376,65 +1384,25 @@ public class SocketSwClient {
RandomPkManager.getInstance().setPkStatus(RandomPkManager.PK_STATUS_START); RandomPkManager.getInstance().setPkStatus(RandomPkManager.PK_STATUS_START);
LiveNetManager.get(mContext).getLiveInfo(map.getString("uid"), new com.yunbao.common.http.base.HttpCallback<LiveInfoModel>() { LiveNetManager.get(mContext).getLiveInfo(map.getString("uid"), new com.yunbao.common.http.base.HttpCallback<LiveInfoModel>() {
@Override @Override
public void onSuccess(LiveInfoModel data) { public void onSuccess(LiveInfoModel data) {
mListener.onLinkMicToPk(map.getString("uid"), data.getAvatar(), map.getString("uhead")); mListener.onLinkMicToPk(map.getString("uid"), data.getAvatar(), map.getString("uhead"));
mListener.onLinkMicPkStart(map.getString("uid"), data.getAvatar(), map.getString("uname"), map.getString("is_ladders"));// mListener.onLinkMicPkStart(map.getString("uid")); mListener.onLinkMicPkStart(map.getString("uid"), data.getAvatar(), map.getString("uname"), map.getString("is_ladders"));// mListener.onLinkMicPkStart(map.getString("uid"));
if (livePushSwViewHolder != null) { if (livePushSwViewHolder != null) {
UserBean userBean = new UserBean(); UserBean userBean = new UserBean();
userBean.setId(map.getString("uid")); userBean.setId(map.getString("uid"));
userBean.setAvatar(data.getAvatar()); userBean.setAvatar(data.getAvatar());
userBean.setUserNiceName(map.getString("uname")); userBean.setUserNiceName(map.getString("uname"));
livePushSwViewHolder.setAnPkRtc(userBean); livePushSwViewHolder.setAnPkRtc(userBean);
}
}
@Override
public void onError(String error) {
}
} }
); }
@Override
public void onError(String error) {
}
});
} }
/*JSONObject msg1 = new JSONObject();
msg1.put("type", "autoLivePK");
msg1.put("uid", CommonAppConfig.getInstance().getUid());
msg1.put("pkuid", CommonAppConfig.getInstance().getUid());
msg1.put("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName());
msg1.put("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar());
IMRTCManager.getInstance().requestJoinOtherRoom(map.getString("uid"), true, msg1.toString(), new IRCRTCResultCallback() {
@Override
public void onSuccess() {
if (WordUtil.isNewZh()) {
ToastUtil.show("邀请 " + map.getString("uid") + " 发送成功");
} else {
ToastUtil.show("invite " + map.getString("uid") + " successful");
}
runOnUiThread(new Runnable() {
@Override
public void run() {
dismiss();
}
});
}
@Override
public void onFailed(RTCErrorCode rtcErrorCode) {
runOnUiThread(new Runnable() {
@Override
public void run() {
dismiss();
}
});
//todo 安卓端状态码说明文档https://docs.rongcloud.cn/v4/views/rtc/call/code/android.html
Log.e("ry", rtcErrorCode + "aaaaaa" + CommonAppConfig.getInstance().getUid() + "VDSSSS" + map.getString("uid"));
if (WordUtil.isNewZh()) {
ToastUtil.show("邀请 " + map.getString("uid") + " 发送失败 " + rtcErrorCode);
} else {
ToastUtil.show("invite " + map.getString("uid") + " lose " + rtcErrorCode);
}
}
});*/
break; break;
} }
} }

View File

@ -278,6 +278,11 @@ public class LivePlayKsyViewHolder extends LiveRoomPlayViewHolder {
} }
@Override
public void removeLiveUid(String uid) {
}
@Override @Override
public void removeDetailView() { public void removeDetailView() {

View File

@ -425,6 +425,11 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder {
} }
@Override
public void removeLiveUid(String uid) {
}
@Override @Override
public void release() { public void release() {
mEnd = true; mEnd = true;

View File

@ -1,6 +1,5 @@
package com.yunbao.live.views; package com.yunbao.live.views;
import static com.lzy.okgo.utils.HttpUtils.runOnUiThread;
import android.Manifest; import android.Manifest;
import android.app.Activity; import android.app.Activity;
@ -9,8 +8,6 @@ import android.content.Context;
import android.graphics.Color; import android.graphics.Color;
import android.media.AudioManager; import android.media.AudioManager;
import android.os.Build; import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
@ -24,16 +21,12 @@ import android.widget.RelativeLayout;
import android.widget.TextView; import android.widget.TextView;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.android.exoplayer2.PlaybackException;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.ui.StyledPlayerView; import com.google.android.exoplayer2.ui.StyledPlayerView;
import com.google.android.exoplayer2.video.VideoSize;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.lxj.xpopup.XPopup; import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.core.BasePopupView; import com.lxj.xpopup.core.BasePopupView;
import com.lxj.xpopup.interfaces.XPopupCallback; import com.lxj.xpopup.interfaces.XPopupCallback;
import com.lzf.easyfloat.EasyFloat; import com.lzf.easyfloat.EasyFloat;
import com.lzy.okserver.OkDownload;
import com.yunbao.common.CommonAppConfig; import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.Constants; import com.yunbao.common.Constants;
import com.yunbao.common.bean.BaseModel; import com.yunbao.common.bean.BaseModel;
@ -70,31 +63,10 @@ import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode; import org.greenrobot.eventbus.ThreadMode;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale;
import cn.rongcloud.rtc.api.RCRTCEngine;
import cn.rongcloud.rtc.api.RCRTCRemoteUser;
import cn.rongcloud.rtc.api.RCRTCRoom;
import cn.rongcloud.rtc.api.callback.IRCRTCResultCallback;
import cn.rongcloud.rtc.api.callback.IRCRTCRoomEventsListener;
import cn.rongcloud.rtc.api.callback.IRCRTCSwitchRoleDataCallback;
import cn.rongcloud.rtc.api.callback.IRCRTCVideoInputFrameListener;
import cn.rongcloud.rtc.api.stream.RCRTCInputStream; import cn.rongcloud.rtc.api.stream.RCRTCInputStream;
import cn.rongcloud.rtc.api.stream.RCRTCLiveInfo;
import cn.rongcloud.rtc.api.stream.RCRTCOutputStream;
import cn.rongcloud.rtc.api.stream.RCRTCVideoInputStream;
import cn.rongcloud.rtc.api.stream.RCRTCVideoStreamConfig;
import cn.rongcloud.rtc.api.stream.RCRTCVideoView;
import cn.rongcloud.rtc.base.RCRTCMediaType;
import cn.rongcloud.rtc.base.RCRTCParamsType;
import cn.rongcloud.rtc.base.RCRTCRemoteVideoFrame;
import cn.rongcloud.rtc.base.RCRTCStreamType;
import cn.rongcloud.rtc.base.RTCErrorCode;
import cn.rongcloud.rtc.core.RendererCommon;
import io.agora.beautyapi.faceunity.agora.SWAuManager; import io.agora.beautyapi.faceunity.agora.SWAuManager;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer; import io.reactivex.functions.Consumer;
@ -116,9 +88,6 @@ public class LivePlaySwViewHolder extends LiveRoomPlayViewHolder {
private ViewGroup mPkContainer; private ViewGroup mPkContainer;
public StyledPlayerView mVideoView; public StyledPlayerView mVideoView;
private FrameLayout playFrameLayout;
private FrameLayout playFrameLayout1;
private View mLoading, mLoading2; private View mLoading, mLoading2;
private ImageView mCover; private ImageView mCover;
private boolean mPaused;//是否切后台了 private boolean mPaused;//是否切后台了
@ -142,7 +111,6 @@ public class LivePlaySwViewHolder extends LiveRoomPlayViewHolder {
private boolean userJoinLinkMic = false;//用户是否已加入房间 private boolean userJoinLinkMic = false;//用户是否已加入房间
//0未申请1申请中2连麦中 //0未申请1申请中2连麦中
RCRTCRoom rcrtcRoom;
String purl, srcUrl; String purl, srcUrl;
SWAuManager swAuManager; SWAuManager swAuManager;
String liveUid; String liveUid;
@ -184,8 +152,6 @@ public class LivePlaySwViewHolder extends LiveRoomPlayViewHolder {
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
Bus.getOn(this); Bus.getOn(this);
mRoot = (ViewGroup) findViewById(R.id.root); mRoot = (ViewGroup) findViewById(R.id.root);
playFrameLayout = (FrameLayout) findViewById(R.id.playView);
playFrameLayout1 = (FrameLayout) findViewById(R.id.playView1);
mSmallContainer = (ViewGroup) findViewById(R.id.small_container); mSmallContainer = (ViewGroup) findViewById(R.id.small_container);
mLeftContainer = (ViewGroup) findViewById(R.id.left_container); mLeftContainer = (ViewGroup) findViewById(R.id.left_container);
mRightContainer = (ViewGroup) findViewById(R.id.right_container); mRightContainer = (ViewGroup) findViewById(R.id.right_container);
@ -275,6 +241,25 @@ public class LivePlaySwViewHolder extends LiveRoomPlayViewHolder {
swAuManager.joinRoom(CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken,liveUid, SWAuManager.getChannelName(liveUid)); swAuManager.joinRoom(CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken,liveUid, SWAuManager.getChannelName(liveUid));
} }
@Override
public void removeLiveUid(String uid) {
//先结束PK
if(drMicUserList!=null){
List<UserBean> tempList = new ArrayList<>();
int index = -1;
for (int i = 0; i <drMicUserList.size(); i++) {
if(!drMicUserList.get(i).getId().equals(uid)){
tempList.add(drMicUserList.get(i));
}
}
//结束所有直播
endPk();
for (int i = 0; i < tempList.size(); i++) {
setDrMicInfo(tempList.get(i));
}
}
}
/** /**
* 开启单人PK * 开启单人PK
* *
@ -371,95 +356,8 @@ public class LivePlaySwViewHolder extends LiveRoomPlayViewHolder {
if (detailsView1 != null) { if (detailsView1 != null) {
dr1_preview.removeView(detailsView1); dr1_preview.removeView(detailsView1);
} }
/*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);
textGrade1 = detailsView1.findViewById(R.id.text_grade1);
textPkName1 = detailsView1.findViewById(R.id.text_pk_name1);
imageGrade1.setTag(String.valueOf(IMLoginManager.get(mContext).getUserInfo().getId()));
dr1_preview.addView(detailsView1);
detailsLinearLayout1.setVisibility(View.VISIBLE);
linearGrade1.setVisibility(View.GONE);
for (int j = 0; j < drPkbeanList.size(); j++) {
if (j == 0) {
L.eSw("j == 0" + j);
//设置多人PK数据
if (detailsView2 != null) {
dr2_preview.removeView(detailsView2);
}
detailsView2 = LayoutInflater.from(mContext).inflate(R.layout.view_live_pk_details, null);
detailsLinearLayout2 = detailsView2.findViewById(R.id.lin_pk2);
linearGrade2 = detailsView2.findViewById(R.id.linear_grade2);
textPkName2 = detailsView2.findViewById(R.id.text_pk_name2);
imageGrade2 = detailsView2.findViewById(R.id.image_grade2);
textGrade2 = detailsView2.findViewById(R.id.text_grade2);
imageGrade2.setTag(String.valueOf(drPkbeanList.get(0).getId()));
textPkName2.setText(drPkbeanList.get(0).getUser_nicename());
dr2_preview.addView(detailsView2);
detailsLinearLayout2.setVisibility(View.VISIBLE);
linearGrade2.setVisibility(View.GONE);
} else if (j == 1) {
L.eSw("j == 1" + j);
if (detailsView4 != null) {
dr4_preview.removeView(detailsView4);
}
detailsView4 = LayoutInflater.from(mContext).inflate(R.layout.view_live_pk_details, null);
detailsLinearLayout4 = detailsView4.findViewById(R.id.lin_pk4);
linearGrade4 = detailsView4.findViewById(R.id.linear_grade4);
textPkName4 = detailsView4.findViewById(R.id.text_pk_name4);
imageGrade4 = detailsView4.findViewById(R.id.image_grade4);
textGrade4 = detailsView4.findViewById(R.id.text_grade4);
imageGrade4.setTag(String.valueOf(drPkbeanList.get(1).getId()));
textPkName4.setText(drPkbeanList.get(1).getUser_nicename());
dr4_preview.addView(detailsView4);
detailsLinearLayout4.setVisibility(View.VISIBLE);
linearGrade4.setVisibility(View.GONE);
} else if (j == 2) {
L.eSw("j == 2" + j);
if (detailsView4 != null) {
dr4_preview.removeView(detailsView4);
}
detailsView4 = LayoutInflater.from(mContext).inflate(R.layout.view_live_pk_details, null);
detailsLinearLayout4 = detailsView4.findViewById(R.id.lin_pk4);
linearGrade4 = detailsView4.findViewById(R.id.linear_grade4);
textPkName4 = detailsView4.findViewById(R.id.text_pk_name4);
imageGrade4 = detailsView4.findViewById(R.id.image_grade4);
textGrade4 = detailsView4.findViewById(R.id.text_grade4);
imageGrade4.setTag(String.valueOf(drPkbeanList.get(2).getId()));
textPkName4.setText(drPkbeanList.get(2).getUser_nicename());
dr4_preview.addView(detailsView4);
detailsLinearLayout4.setVisibility(View.VISIBLE);
linearGrade4.setVisibility(View.GONE);
if (detailsView3 != null) {
dr3_preview.removeView(detailsView3);
}
detailsView3 = LayoutInflater.from(mContext).inflate(R.layout.view_live_pk_details, null);
detailsLinearLayout3 = detailsView3.findViewById(R.id.lin_pk3);
linearGrade3 = detailsView3.findViewById(R.id.linear_grade3);
textPkName3 = detailsView3.findViewById(R.id.text_pk_name3);
imageGrade3 = detailsView3.findViewById(R.id.image_grade3);
textGrade3 = detailsView3.findViewById(R.id.text_grade3);
imageGrade3.setTag(String.valueOf(drPkbeanList.get(1).getId()));
textPkName3.setText(drPkbeanList.get(1).getUser_nicename());
dr3_preview.addView(detailsView3);
detailsLinearLayout3.setVisibility(View.VISIBLE);
linearGrade3.setVisibility(View.GONE);
}
}
}
}, 2000);*/
} }
/** /**
* 退出单人pk * 退出单人pk
* *
@ -507,7 +405,12 @@ public class LivePlaySwViewHolder extends LiveRoomPlayViewHolder {
public void onSuccess(int code, String msg, String[] info) { public void onSuccess(int code, String msg, String[] info) {
Log.e("ry", code + "热热热"); Log.e("ry", code + "热热热");
if (code == 0) { if (code == 0) {
MicStatusManager.getInstance().setMicData(MicStatusManager.MIC_TYPE_OPEN, LiveActivity.mLiveUid);
AudioManager audioManager = (AudioManager) contexts.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setSpeakerphoneOn(true);
swAuManager.setMicAn(true); swAuManager.setMicAn(true);
userJoinLinkMic = true;
} }
} }
}); });
@ -516,6 +419,8 @@ public class LivePlaySwViewHolder extends LiveRoomPlayViewHolder {
private void endLiveMic() { private void endLiveMic() {
L.eSw("endLiveMic"); L.eSw("endLiveMic");
swAuManager.setMicAn(false); swAuManager.setMicAn(false);
userJoinLinkMic = false;
MicStatusManager.getInstance().clear();
} }
@Override @Override
@ -554,11 +459,11 @@ public class LivePlaySwViewHolder extends LiveRoomPlayViewHolder {
this.videoLandscape = landscape; this.videoLandscape = landscape;
if (landscape == 2) { if (landscape == 2) {
Log.i(TAG, "还原916"); Log.i(TAG, "还原916");
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mVideoView.getLayoutParams(); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) ry_view.getLayoutParams();
params.height = RelativeLayout.LayoutParams.MATCH_PARENT; params.height = RelativeLayout.LayoutParams.MATCH_PARENT;
params.topMargin = 0; params.topMargin = 0;
mVideoView.setLayoutParams(params); ry_view.setLayoutParams(params);
mVideoView.requestLayout(); ry_view.requestLayout();
/* RelativeLayout.LayoutParams params1 = (RelativeLayout.LayoutParams) ry_view.getLayoutParams(); /* RelativeLayout.LayoutParams params1 = (RelativeLayout.LayoutParams) ry_view.getLayoutParams();
params1.height = RelativeLayout.LayoutParams.MATCH_PARENT; params1.height = RelativeLayout.LayoutParams.MATCH_PARENT;
@ -573,12 +478,12 @@ public class LivePlaySwViewHolder extends LiveRoomPlayViewHolder {
} else { } else {
Log.i(TAG, "还原16:9"); Log.i(TAG, "还原16:9");
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mVideoView.getLayoutParams(); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) ry_view.getLayoutParams();
params.height = vHeight; params.height = vHeight;
params.topMargin = mContext.getResources().getDimensionPixelOffset(R.dimen.live_top); params.topMargin = mContext.getResources().getDimensionPixelOffset(R.dimen.live_top);
params.addRule(RelativeLayout.ALIGN_TOP); params.addRule(RelativeLayout.ALIGN_TOP);
mVideoView.setLayoutParams(params); ry_view.setLayoutParams(params);
mVideoView.requestLayout(); ry_view.requestLayout();
/*RelativeLayout.LayoutParams params1 = (RelativeLayout.LayoutParams) ry_view.getLayoutParams(); /*RelativeLayout.LayoutParams params1 = (RelativeLayout.LayoutParams) ry_view.getLayoutParams();
params1.height = vHeight; params1.height = vHeight;
@ -599,7 +504,7 @@ public class LivePlaySwViewHolder extends LiveRoomPlayViewHolder {
super.setLiveEnterRoomNewModel(data); super.setLiveEnterRoomNewModel(data);
isPk = data.getEnterRoomInfo().getIsconnection().equals("1"); isPk = data.getEnterRoomInfo().getIsconnection().equals("1");
if (isPk) { if (isPk) {
setLiveBeanLandscape(1); setLiveBeanLandscape(data.getLiveInfo().getLandscape());
} }
} }
@ -1154,414 +1059,10 @@ public class LivePlaySwViewHolder extends LiveRoomPlayViewHolder {
userinputStreamList.clear(); userinputStreamList.clear();
Log.e("ry", "主播同意了UsertoRY"); Log.e("ry", "主播同意了UsertoRY");
joinLiveMic(); joinLiveMic();
/*RCRTCRoomConfig roomConfig = RCRTCRoomConfig.Builder.create()
// 根据实际场景选择音视频直播LIVE_AUDIO_VIDEO 或音频直播LIVE_AUDIO
.setRoomType(RCRTCRoomType.LIVE_AUDIO_VIDEO).setLiveRole(RCRTCLiveRole.AUDIENCE).build();
RCRTCEngine.getInstance().joinRoom(LiveActivity.mLiveUid, roomConfig, new IRCRTCResultDataCallback<RCRTCRoom>() {
@Override
public void onSuccess(RCRTCRoom data) {
userJoinLinkMic = true;
rcrtcRoom = data;
subscribeMic(data);
}
@Override
public void onFailed(RTCErrorCode errorCode) {
Log.e("ry", LiveActivity.mLiveUid + errorCode + "");
if (errorCode.getValue() == 50007) {//userJoinLinkMic可能失效直接leaveRoom
userJoinLinkMic = false;
RCRTCEngine.getInstance().leaveRoom(new IRCRTCResultCallback() {
@Override
public void onFailed(RTCErrorCode errorCode) {
}
@Override
public void onSuccess() {
UsertoRY();
}
});
} else {
ToastUtil.show("房间失败" + errorCode);
}
}
});*/
}
private void subscribeMic(RCRTCRoom data) {
runOnUiThread(new Runnable() {
@Override
public void run() {
RCRTCEngine.getInstance().enableSpeaker(true);
//遍历远端用户发布的资源列表
Log.i(TAG, "软件资源数量:" + data.getLiveStreams().size());
for (RCRTCInputStream stream : data.getLiveStreams()) {
Log.i(TAG, "资源流 type: " + stream.getMediaType());
if (stream.getMediaType() == RCRTCMediaType.VIDEO) {
//暂停播放
//如果远端用户发布的是视频流创建显示视图RCRTCVideoView并添加到布局中显示
//如果远端用户发布的是视频流创建显示视图RCRTCVideoView并添加到布局中显示
RCRTCVideoView remoteView = new RCRTCVideoView(contexts);
((RCRTCVideoInputStream) stream).setVideoView(remoteView);
//todo 本demo只演示添加1个远端用户的视图
remoteView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
remoteView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT);
ry_view.addView(remoteView);
Log.e("ry", stream.getMediaType() + "rcrtcOtherRoom成功 " + data.getLiveStreams().size());
}
userinputStreamList.add(stream);
}
rcrtcRoom.getLocalUser().subscribeStreams(userinputStreamList, new IRCRTCResultCallback() {
@Override
public void onFailed(RTCErrorCode errorCode) {
Log.e("ry", userinputStreamList.size() + LiveActivity.mLiveUid + "订阅失败" + errorCode.toString());
ToastUtil.show(mContext.getString(R.string.live_pk_link_error));
}
@Override
public void onSuccess() {
Log.e("ry", "订阅资源成功");
// new Handler().postDelayed(new Runnable() {
// @Override
// public void run() {
toMic();
// }
// }, 3000);
}
});
}
});
}
/**
* 主房间事件监听
* 详细说明请参考文档https://www.rongcloud.cn/docs/api/android/rtclib_v4/cn/rongcloud/rtc/api/callback/IRCRTCRoomEventsListener.html
*/
public IRCRTCRoomEventsListener roomEventsListener = new IRCRTCRoomEventsListener() {
@Override
public void onRemoteUserPublishResource(RCRTCRemoteUser rcrtcRemoteUser, List<RCRTCInputStream> list) {
Log.e("ry", "远端来了" + list.size());
//TODO 按需在此订阅远端用户发布的资源
rcrtcRoom.getLocalUser().subscribeStreams(list, new IRCRTCResultCallback() {
@Override
public void onSuccess() {
Log.e("ry", "远端成功" + list.size());
}
@Override
public void onFailed(RTCErrorCode rtcErrorCode) {
Log.e("ry", "远端失败" + list.size());
ToastUtil.show(mContext.getString(R.string.live_pk_link_error));
}
});
}
@Override
public void onRemoteUserMuteAudio(RCRTCRemoteUser remoteUser, RCRTCInputStream stream, boolean mute) {
}
@Override
public void onRemoteUserMuteVideo(RCRTCRemoteUser remoteUser, RCRTCInputStream stream, boolean mute) {
}
@Override
public void onRemoteUserUnpublishResource(RCRTCRemoteUser remoteUser, List<RCRTCInputStream> streams) {
}
@Override
public void onUserJoined(RCRTCRemoteUser remoteUser) {
}
@Override
public void onUserLeft(RCRTCRemoteUser remoteUser) {
}
@Override
public void onUserOffline(RCRTCRemoteUser remoteUser) {
}
@Override
public void onPublishLiveStreams(List<RCRTCInputStream> streams) {
}
@Override
public void onUnpublishLiveStreams(List<RCRTCInputStream> streams) {
}
};
public List<RCRTCInputStream> userinputStreamList1 = new ArrayList<>();
public List<RCRTCInputStream> userinputStreamList2 = new ArrayList<>();
public void toMic() {
RCRTCEngine.getInstance().getDefaultAudioStream().setAudioQuality(RCRTCParamsType.AudioQuality.MUSIC, RCRTCParamsType.AudioScenario.MUSIC_CLASSROOM);
userinputStreamList1.clear();
userinputStreamList2.clear();
RCRTCParamsType.RCRTCVideoResolution rcrtcVideoResolution = RCRTCParamsType.RCRTCVideoResolution.RESOLUTION_480_848;
int minRate = 200;
int maxRate = 900;
switch (IMLoginManager.get(mContext).getSelectClarity()) {
case 0:
rcrtcVideoResolution = landscape == 1 ? RCRTCParamsType.RCRTCVideoResolution.parseVideoResolution(960, 720) : RCRTCParamsType.RCRTCVideoResolution.RESOLUTION_480_848;
minRate = landscape == 1 ? 900 : 200;
maxRate = landscape == 1 ? 700 : 900;
break;
case 1:
rcrtcVideoResolution = landscape == 1 ? RCRTCParamsType.RCRTCVideoResolution.parseVideoResolution(960, 720) : RCRTCParamsType.RCRTCVideoResolution.RESOLUTION_720_1280;
minRate = landscape == 1 ? 900 : 250;
maxRate = landscape == 1 ? 700 : 2200;
break;
case 2:
rcrtcVideoResolution = landscape == 1 ? RCRTCParamsType.RCRTCVideoResolution.parseVideoResolution(960, 720) : RCRTCParamsType.RCRTCVideoResolution.RESOLUTION_1080_1920;
minRate = landscape == 1 ? 900 : 400;
maxRate = landscape == 1 ? 700 : 4000;
break;
}
// 示例代码使用480x640分辨率演示
RCRTCVideoStreamConfig config = RCRTCVideoStreamConfig.Builder.create()
//设置分辨率
.setVideoResolution(rcrtcVideoResolution)
//设置帧率
.setVideoFps(RCRTCParamsType.RCRTCVideoFps.Fps_24)
//设置最小码率480P下推荐200
.setMinRate(minRate)
//设置最大码率480P下推荐900
.setMaxRate(maxRate).build();
RCRTCEngine.getInstance().getDefaultVideoStream().setVideoConfig(config);
// 创建视图渲染视图
// RCRTCVideoView videoView = new RCRTCVideoView(contexts);
// RCRTCEngine.getInstance().getDefaultVideoStream().setVideoView(videoView);
//TODO 示例代码使用获取本地默认视频流音频流演示
ArrayList<RCRTCOutputStream> streams = new ArrayList<>();
// streams.add(RCRTCEngine.getInstance().getDefaultVideoStream());
streams.add(RCRTCEngine.getInstance().getDefaultAudioStream());
if (landscape == 1) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
setLiveBeanLandscape(1);
}
});
}
// 开启摄像头
// RCRTCEngine.getInstance().getDefaultVideoStream().startCamera(null);
// 开始切换为主播身份
RCRTCEngine.getInstance().getRoom().getLocalUser().switchToBroadcaster(streams, new IRCRTCSwitchRoleDataCallback<RCRTCLiveInfo>() {
/**
* 当切换失败且SDK处于无法回退状态时回调该角色已经无法使用当前角色继续进行音视频
* SDK内部会退出房间并清理所有资源该用户只能重新加入房间才能继续音视频
*/
@Override
public void onKicked() {
Log.e("ry", "切换onKicked");
}
@Override
public void onSuccess(RCRTCLiveInfo data) {
rcrtcRoom.registerRoomListener(roomEventsListener);
//该用户切换为主播成功可以以主播身份进行音视频
Log.e("ry", "切换成功");
new Handler(Looper.getMainLooper()).post(new Runnable() {
public void run() {
if (onMicCallback != null) {
onMicCallback.onMikUpdate();
}
//遍历远端用户列表
for (int i = 0; i < rcrtcRoom.getRemoteUsers().size(); i++) {
Log.e("ry", rcrtcRoom.getRemoteUsers().get(i).getUserId() + "收到rcrtcOtherRoom" + rcrtcRoom.getRemoteUsers().size());
//遍历远端用户发布的资源列表
for (RCRTCInputStream stream : rcrtcRoom.getRemoteUsers().get(i).getStreams()) {
Log.e("ry", i + "收到" + stream.getMediaType() + "实打实打算" + rcrtcRoom.getRemoteUsers().get(i).getUserId());
if (stream.getMediaType() == RCRTCMediaType.VIDEO) {
if (userinputStreamList1.size() == 0) {
//如果远端用户发布的是视频流创建显示视图RCRTCVideoView并添加到布局中显示
RCRTCVideoView remoteView = new RCRTCVideoView(contexts);
((RCRTCVideoInputStream) stream).setStreamType(RCRTCStreamType.NORMAL);
((RCRTCVideoInputStream) stream).setVideoView(remoteView);
((RCRTCVideoInputStream) stream).setVideoFrameListener(new IRCRTCVideoInputFrameListener() {
@Override
public void onFrame(RCRTCRemoteVideoFrame videoFrame) {
String debugText = " 2、安卓主播开播 安卓用户申请连麦后 ,安卓用户这边底部画面不全 :" + videoFrame.getFrameType().name() + "\n" + "rotation:" + videoFrame.getRotation() + "\n" + "timestampNs:" + videoFrame.getTimestampNs() + "\n" + "分辨率:" + videoFrame.getBuffer().getHeight() + "x" + videoFrame.getBuffer().getWidth() + "\n" + "当前时间:" + new SimpleDateFormat("HH:mm:ss", Locale.CHINA).format(new Date()) + "\n";
//Log.d("ry", "onFrame: " + debugText);
new Handler(Looper.getMainLooper()).post(() -> {
debugView.setText(debugText);
});
}
});
//todo 本demo只演示添加1个远端用户的视图
ry_view.removeAllViews();
remoteView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
remoteView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL);
ry_view.addView(remoteView);
}
userinputStreamList1.add(stream);
}
userinputStreamList2.add(stream);
}
}
//开始订阅资源
rcrtcRoom.getLocalUser().subscribeStreams(userinputStreamList2, new IRCRTCResultCallback() {
@Override
public void onSuccess() {
Log.e("ry", "订阅资源成功");
MicStatusManager.getInstance().setMicData(MicStatusManager.MIC_TYPE_OPEN, LiveActivity.mLiveUid);
AudioManager audioManager = (AudioManager) contexts.getSystemService(Context.AUDIO_SERVICE);
RCRTCEngine.getInstance().enableSpeaker(true);
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setSpeakerphoneOn(true);
HttpClient.getInstance().get("live.joinDrLm", "live.joinDrLm").params("roomid", LiveActivity.mLiveUid).execute(new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
Log.e("ry", code + "热热热");
}
});
}
@Override
public void onFailed(RTCErrorCode rtcErrorCode) {
Log.e("ry", "订阅资源失败: " + rtcErrorCode.getReason());
ToastUtil.show(mContext.getString(R.string.live_pk_link_error));
}
});
}
});
}
/**
* 当切换失败且不影响当前角色继续音视频时回调
* @param errorCode 失败错误码
*/
@Override
public void onFailed(RTCErrorCode errorCode) {
Log.e("ry", errorCode + "切换失败");
}
});
} }
@Override @Override
public void setLoadViewListener(LoadingListener listener) { public void setLoadViewListener(LoadingListener listener) {
super.setLoadViewListener(listener); super.setLoadViewListener(listener);
} }
private void showLoadingDialog() {
if (PLAY_MODEL == PLAY_MODEL_480) return;
new DialogUitl.Builder(mContext).setTitle("網絡提示").setContent("系統監測到您的網絡不穩定,對此將清晰度變成了流暢,您可以在側邊菜單中的「清晰度」選擇調回。").setView(R.layout.dialog_simple_tip).setClickCallback(new DialogUitl.SimpleCallback() {
@Override
public void onConfirmClick(Dialog dialog, String content) {
dialog.dismiss();
}
}).build().show();
PLAY_MODEL = PLAY_MODEL_480;
String url = srcUrl;
if (videoLandscape == VIDEO_VERTICAL) {
url = url.replace(".flv", videoRatioVertical[PLAY_MODEL_480] + videoFps[0] + ".flv");
} else if (videoLandscape == VIDEO_HORIZONTAL) {
url = url.replace(".flv", videoRatioHorizontal[PLAY_MODEL_480] + videoFps[0] + ".flv");
}
}
private class ExoPlayerListener implements Player.Listener {
String TAG = "播放流";
@Override
public void onPlayerError(PlaybackException error) {
Player.Listener.super.onPlayerError(error);
debugView.setText("播放出错code=" + error.errorCode + " msg=" + error.getErrorCodeName());
}
@Override
public void onVideoSizeChanged(VideoSize videoSize) {
Player.Listener.super.onVideoSizeChanged(videoSize);
Log.i(TAG, "onVideoSizeChanged: width = " + videoSize.width + " height = " + videoSize.height);
//ToastUtil.show("分辨率: 宽 = " + videoSize.width + " 高 = " + videoSize.height);
if (videoSize.height > videoSize.width) {
videoLandscape = VIDEO_VERTICAL;
} else {
videoLandscape = VIDEO_HORIZONTAL;
}
}
@Override
public void onPlaybackStateChanged(int playbackState) {
Player.Listener.super.onPlaybackStateChanged(playbackState);
if (playbackState == Player.STATE_BUFFERING) {
//showLoadingDialog();
mLoading.setVisibility(View.VISIBLE);
OkDownload.getInstance().pauseAll();
Log.i(TAG, "onPlaybackStateChanged: 缓存中");
} else {
mLoading.setVisibility(View.INVISIBLE);
Log.i(TAG, "onPlaybackStateChanged: 播放中");
}
}
@Override
public void onIsPlayingChanged(boolean isPlaying) {
Player.Listener.super.onIsPlayingChanged(isPlaying);
if (isPlaying) {
hideCover();
mLoading.setVisibility(View.INVISIBLE);
Log.i(TAG, "onIsPlayingChanged: 开始播放 | waitNextUrl = " + waitNextUrl);
OkDownload.getInstance().startAll();
if (loadingListener != null) {
loadingListener.onPlayer();
}
if (waitNextUrl != null) {
waitNextUrl = null;
}
}
}
}
private int mPkTimeCount = 0;
public interface PlayViewLayoutInterface {
void playViewLayout(int width, int height);
}
private PlayViewLayoutInterface layoutInterface;
public void setLayoutInterface(PlayViewLayoutInterface layoutInterface) {
mVideoView.post(new Runnable() {
@Override
public void run() {
int width = mVideoView.getMeasuredWidth();
int height = mVideoView.getMeasuredHeight();
if (layoutInterface != null) {
layoutInterface.playViewLayout(width, height);
}
}
});
}
} }

View File

@ -94,6 +94,11 @@ public class LivePlayTxViewHolder extends LiveRoomPlayViewHolder implements ITXL
} }
@Override
public void removeLiveUid(String uid) {
}
@Override @Override
public void removeDetailView() { public void removeDetailView() {

View File

@ -26,6 +26,7 @@ import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.tencent.rtmp.ITXLivePushListener; import com.tencent.rtmp.ITXLivePushListener;
import com.tencent.rtmp.TXLiveConstants; import com.tencent.rtmp.TXLiveConstants;
import com.yunbao.common.CommonAppConfig; import com.yunbao.common.CommonAppConfig;
@ -103,7 +104,7 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
private boolean isPk = false; private boolean isPk = false;
private boolean isNeedOpenCamera = false; private boolean isNeedOpenCamera = false;
private SWManager swManager; private SWManager swManager;
private String pkUid1; private String pkUid1; //单人PK 对方主播 uid
//修改上面主播的头像 //修改上面主播的头像
@Subscribe(threadMode = ThreadMode.MAIN) @Subscribe(threadMode = ThreadMode.MAIN)
@ -252,9 +253,9 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
}); });
} }
public void exitChannelDrPk(List<DrPkbean> drPkbeanList){ public void exitChannelDrPk(List<DrPkbean> drPkbeanList) {
for (int i = 0; i <drPkbeanList.size(); i++) { for (int i = 0; i < drPkbeanList.size(); i++) {
if(!CommonAppConfig.getInstance().getUid().equals(String.valueOf(drPkbeanList.get(i).getId()))){ if (!CommonAppConfig.getInstance().getUid().equals(String.valueOf(drPkbeanList.get(i).getId()))) {
SWManager.get().exitChannelToUid(Integer.parseInt(CommonAppConfig.getInstance().getUid()), String.valueOf(drPkbeanList.get(i).getId())); SWManager.get().exitChannelToUid(Integer.parseInt(CommonAppConfig.getInstance().getUid()), String.valueOf(drPkbeanList.get(i).getId()));
} }
} }
@ -275,8 +276,7 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
swManager.updateMyChannelView((FrameLayout) mLeftContainer); swManager.updateMyChannelView((FrameLayout) mLeftContainer);
//清除 mBigContainer 中的渲染 //清除 mBigContainer 中的渲染
mBigContainer.removeAllViews(); mBigContainer.removeAllViews();
showButtonGone();
btn_close.setVisibility(View.VISIBLE);
//设置对方主播的渲染视图 设置到 rightContainer //设置对方主播的渲染视图 设置到 rightContainer
swManager.setPkContainer(mRightContainer); swManager.setPkContainer(mRightContainer);
swManager.joinChannelEx(CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, u.getId(), SWAuManager.getChannelName(u.getId())); swManager.joinChannelEx(CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, u.getId(), SWAuManager.getChannelName(u.getId()));
@ -288,57 +288,57 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
.params("type", "1") .params("type", "1")
.params("sign", "1") .params("sign", "1")
.execute(new HttpCallback() { .execute(new HttpCallback() {
@Override @Override
public void onSuccess(int code, String msgs, String[] info) { public void onSuccess(int code, String msgs, String[] info) {
if (code == 0) { if (code == 0) {
HttpClient.getInstance().get("Livepk.setPK", "Livepk.setPK") HttpClient.getInstance().get("Livepk.setPK", "Livepk.setPK")
.params("uid", CommonAppConfig.getInstance().getUid()) .params("uid", CommonAppConfig.getInstance().getUid())
.params("pkuid", u.getId()) .params("pkuid", u.getId())
.params("type", "1") .params("type", "1")
.params("sign", "1") .params("sign", "1")
.execute(new HttpCallback() { .execute(new HttpCallback() {
@Override @Override
public void onSuccess(int code, String msgs, String[] info) { public void onSuccess(int code, String msgs, String[] info) {
if (code == 0) { if (code == 0) {
L.eSw("555555555555555555555555555555555555"); L.eSw("555555555555555555555555555555555555");
final SocketSendBean msg1 = new SocketSendBean() final SocketSendBean msg1 = new SocketSendBean()
.param("_method_", Constants.SOCKET_LINK_MIC_PK) .param("_method_", Constants.SOCKET_LINK_MIC_PK)
.param("action", 4) .param("action", 4)
.param("pkname", u.getUserNiceName()) .param("pkname", u.getUserNiceName())
.param("pkuid", u.getId()) .param("pkuid", u.getId())
.param("pkhead", u.getAvatar()) .param("pkhead", u.getAvatar())
.param("uname", u.getUserNiceName()) .param("uname", u.getUserNiceName())
.param("uhead", u.getAvatar()) .param("uhead", u.getAvatar())
.param("uid", CommonAppConfig.getInstance().getUid()); .param("uid", CommonAppConfig.getInstance().getUid());
msg1.create(); msg1.create();
Conversation.ConversationType conversationType = Conversation.ConversationType.CHATROOM; Conversation.ConversationType conversationType = Conversation.ConversationType.CHATROOM;
TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString()); TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString());
Message message1 = Message.obtain("g" + CommonAppConfig.getInstance().getUid(), conversationType, messageContent); Message message1 = Message.obtain("g" + CommonAppConfig.getInstance().getUid(), conversationType, messageContent);
RongIMClient.getInstance().sendMessage(message1, null, null, new IRongCallback.ISendMessageCallback() { RongIMClient.getInstance().sendMessage(message1, null, null, new IRongCallback.ISendMessageCallback() {
@Override @Override
public void onAttached(Message message) { public void onAttached(Message message) {
} }
@Override @Override
public void onSuccess(Message message) { public void onSuccess(Message message) {
Log.i("tx", "发送成功"); Log.i("tx", "发送成功");
} }
@Override @Override
public void onError(Message message, RongIMClient.ErrorCode errorCode) { public void onError(Message message, RongIMClient.ErrorCode errorCode) {
} }
}); });
} }
} }
}); });
} }
} }
}); });
mLiveSwLinkMicPkPresenter.setPkUserInfoView(u); mLiveSwLinkMicPkPresenter.setPkUserInfoView(u);
} }
@ -346,22 +346,23 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
private int currentPosition = 0; private int currentPosition = 0;
private String drpkUid3 = ""; private String drpkUid3 = "";
public int setAnDrPkRtc(String uid, int position) { public int setAnDrPkRtc(String uid, int position) {
L.eSw("setAnDrPkRtc uid"+uid+" position"+position); L.eSw("setAnDrPkRtc uid" + uid + " position" + position);
int temp= -1; int temp = -1;
if (swManager != null && !StringUtil.isEmpty(uid)) { if (swManager != null && !StringUtil.isEmpty(uid)) {
L.eSw("设置对方主播的视图 setAnDrPkRtc" + uid + "position:" + position); L.eSw("设置对方主播的视图 setAnDrPkRtc" + uid + "position:" + position);
if(currentPosition==0){ if (currentPosition == 0) {
position = 2; position = 2;
} }
if(position==-1){ if (position == -1) {
temp = currentPosition+1; temp = currentPosition + 1;
}else{ } else {
temp = position; temp = position;
} }
switch (temp) { switch (temp) {
case 2: case 2:
swManager.joinChannelDrEx(dr2_preview,CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, uid, SWAuManager.getChannelName(uid)); swManager.joinChannelDrEx(dr2_preview, CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, uid, SWAuManager.getChannelName(uid));
swManager.updateMyChannelView(dr1_preview); swManager.updateMyChannelView(dr1_preview);
mBigContainer.removeAllViews(); mBigContainer.removeAllViews();
@ -370,17 +371,17 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
break; break;
case 3: case 3:
drpkUid3 = uid; drpkUid3 = uid;
swManager.joinChannelDrEx(dr4_preview,CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, uid, SWAuManager.getChannelName(uid)); swManager.joinChannelDrEx(dr4_preview, CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, uid, SWAuManager.getChannelName(uid));
dr3_preview.setVisibility(View.GONE); dr3_preview.setVisibility(View.GONE);
dr4_preview.setVisibility(View.VISIBLE); dr4_preview.setVisibility(View.VISIBLE);
break; break;
case 4: case 4:
dr3_preview.setVisibility(View.VISIBLE); dr3_preview.setVisibility(View.VISIBLE);
//先退出这个主播的直播间在进入该直播间视图问题暂时這樣處理 //先退出这个主播的直播间在进入该直播间视图问题暂时這樣處理
swManager.exitChannelToUid(Integer.parseInt(CommonAppConfig.getInstance().getUid()),drpkUid3); swManager.exitChannelToUid(Integer.parseInt(CommonAppConfig.getInstance().getUid()), drpkUid3);
swManager.joinChannelDrEx(dr3_preview,CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, drpkUid3, SWAuManager.getChannelName(drpkUid3)); swManager.joinChannelDrEx(dr3_preview, CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, drpkUid3, SWAuManager.getChannelName(drpkUid3));
swManager.joinChannelDrEx(dr4_preview,CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, uid, SWAuManager.getChannelName(uid)); swManager.joinChannelDrEx(dr4_preview, CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, uid, SWAuManager.getChannelName(uid));
break; break;
} }
dr_pk_view.setVisibility(View.VISIBLE); dr_pk_view.setVisibility(View.VISIBLE);
@ -389,7 +390,7 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
return currentPosition; return currentPosition;
} }
public void anchorClose(){ public void anchorClose() {
swManager.updateMyChannelView((FrameLayout) mBigContainer); //用户主动断开连麦再退出画面 swManager.updateMyChannelView((FrameLayout) mBigContainer); //用户主动断开连麦再退出画面
} }
@ -399,7 +400,6 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
} }
public void onLinkDRMicPkApply(UserBean userBean) { public void onLinkDRMicPkApply(UserBean userBean) {
if (mLiveSwLinkMicPkPresenter != null) { if (mLiveSwLinkMicPkPresenter != null) {
mLiveSwLinkMicPkPresenter.onLinkDRMicPkApply(userBean); mLiveSwLinkMicPkPresenter.onLinkDRMicPkApply(userBean);
@ -439,6 +439,10 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
btn_close.setVisibility(View.GONE); btn_close.setVisibility(View.GONE);
} }
public void showButtonGone() {
btn_close.setVisibility(View.VISIBLE);
}
@Override @Override
public void toggleCamera() { public void toggleCamera() {
if (mCameraFront) { if (mCameraFront) {
@ -471,86 +475,6 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
if (swManager != null) { if (swManager != null) {
swManager.createChannel(CommonAppConfig.SWToken, CommonAppConfig.getChannelName()); swManager.createChannel(CommonAppConfig.SWToken, CommonAppConfig.getChannelName());
} }
if (rcrtcLiveInfo != null) {
rcrtcLiveInfo.addPublishStreamUrl(pushUrl, new IRCRTCResultDataCallback<String[]>() {
@Override
public void onSuccess(String[] data) {
//强制设置开播后cdn的尺寸竖屏因为有时候PK异常退出cdn没有还原竖屏
if (rtcRoom != null) {
RCRTCMixConfig config = new RCRTCMixConfig();
RCRTCMixConfig.MediaConfig mediaConfig = new RCRTCMixConfig.MediaConfig();
config.setMediaConfig(mediaConfig);
//视频输出配置
RCRTCMixConfig.MediaConfig.VideoConfig videoConfig = new RCRTCMixConfig.MediaConfig.VideoConfig();
mediaConfig.setVideoConfig(videoConfig);
//大流视频的输出参数
RCRTCMixConfig.MediaConfig.VideoConfig.VideoLayout normal = new RCRTCMixConfig.MediaConfig.VideoConfig.VideoLayout();
//推荐宽帧率参数值可以通过默认视频流的配置获取也可以根据实际需求来自定义设置
//如不设置宽高值则服务端将使用默认宽高 360 * 640
//:发布的视频分辨率为720 * 1280如果不设置则观众端看到的视频分辨率为 360 * 640,
//所以如果想让观众端看到的视频分辨率和发布视频分辨率一致则应从发布的视频流中获取分辨率配置并设置到 mediaConfig
//設置開播分辨率
//設置開播分辨率
RCRTCParamsType.RCRTCVideoResolution rcrtcVideoResolution = RCRTCParamsType.RCRTCVideoResolution.RESOLUTION_480_848;
int minRate = 200;
int maxRate = 900;
switch (IMLoginManager.get(mContext).getSelectClarity()) {
case 0:
rcrtcVideoResolution = RCRTCParamsType.RCRTCVideoResolution.RESOLUTION_480_848;
break;
case 1:
rcrtcVideoResolution = RCRTCParamsType.RCRTCVideoResolution.RESOLUTION_720_1280;
break;
case 2:
rcrtcVideoResolution = RCRTCParamsType.RCRTCVideoResolution.RESOLUTION_1080_1920;
break;
}
int width = rcrtcVideoResolution.getWidth();
int height = rcrtcVideoResolution.getHeight();
normal.setWidth(width); //视频宽
normal.setHeight(height); //视频高
normal.setFps(15); //视频帧率
videoConfig.setVideoLayout(normal);
//2. 合流画布设置
//(请参照画布和声音配置示例代码)
//3. 假设以画布设置的宽高为 300 * 300为例(应以真实设置的宽高为准)设置每个视频流小窗口的坐标及宽高
ArrayList<RCRTCMixConfig.CustomLayoutList.CustomLayout> list = new ArrayList<>();
config.setCustomLayouts(list);
//user1的视频流
RCRTCMixConfig.CustomLayoutList.CustomLayout videoLayout1 = new RCRTCMixConfig.CustomLayoutList.CustomLayout();
list.add(videoLayout1);
videoLayout1.setVideoStream(RCRTCEngine.getInstance().getDefaultVideoStream()); // RCRTCStream#MediaType 必须是Video
videoLayout1.setX(0); //X 坐标
videoLayout1.setY(0); //Y 坐标
videoLayout1.setWidth(720); // 视频窗口的宽
videoLayout1.setHeight(1280); // 视频窗口的高
//2. 合流画布设置
rcrtcLiveInfo.setMixConfig(config, new IRCRTCResultCallback() {
@Override
public void onSuccess() {
Log.e("ry", "混成功12");
}
@Override
public void onFailed(RTCErrorCode errorCode) {
Log.e("ry", "混失败" + errorCode);
}
});
}
}
@Override
public void onFailed(RTCErrorCode errorCode) {
}
});
startCountDown();
} else {
ToastUtil.show("请稍后,准备中....");
}
} }
public boolean isPking() { public boolean isPking() {
@ -563,7 +487,6 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX
@Override @Override
public void onPause() { public void onPause() {
mPaused = true; mPaused = true;
} }
@Override @Override

View File

@ -122,6 +122,8 @@ public abstract class LiveRoomPlayViewHolder extends AbsViewHolder implements IL
public abstract void initSwEngine(String liveUid); public abstract void initSwEngine(String liveUid);
public abstract void removeLiveUid(String uid);
public abstract void removeDetailView(); public abstract void removeDetailView();
public abstract void setPkView(String liveUid); public abstract void setPkView(String liveUid);

View File

@ -25,6 +25,7 @@ import androidx.core.content.ContextCompat;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.GsonUtils; import com.blankj.utilcode.util.GsonUtils;
import com.google.gson.Gson;
import com.ms.banner.Banner; import com.ms.banner.Banner;
import com.ms.banner.BannerConfig; import com.ms.banner.BannerConfig;
import com.ms.banner.listener.OnBannerClickListener; import com.ms.banner.listener.OnBannerClickListener;
@ -40,6 +41,7 @@ import com.yunbao.common.http.LiveHttpUtil;
import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.Bus; import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.L;
import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil; import com.yunbao.common.utils.WordUtil;
@ -87,6 +89,25 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
private TextView mLiveTimeTextView;//主播的直播时长 private TextView mLiveTimeTextView;//主播的直播时长
private long mAnchorLiveTime;//主播直播时间 private long mAnchorLiveTime;//主播直播时间
private LiveRoomHandler mLiveRoomHandler; private LiveRoomHandler mLiveRoomHandler;
private static LinearLayout btn_end_pk_dr;
private String drpkRoomId; //多人 PK 房主 roomUid
public void setDrpkRoomId(String drpkRoomId) {
this.drpkRoomId = drpkRoomId;
}
public void showEndPkBt(){
if(btn_end_pk_dr!=null){
if(btn_start_dr_pk_view.getVisibility()==View.GONE){
btn_end_pk_dr.setVisibility(View.VISIBLE);
}
}
}
public void closeEndPkBt(){
if(btn_end_pk_dr!=null){
btn_end_pk_dr.setVisibility(View.GONE);
}
}
public LiveRyAnchorViewHolder(Context context, ViewGroup parentView) { public LiveRyAnchorViewHolder(Context context, ViewGroup parentView) {
super(context, parentView); super(context, parentView);
@ -108,6 +129,7 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
Bus.getOn(this); Bus.getOn(this);
mDrawable0 = ContextCompat.getDrawable(mContext, R.mipmap.icon_live_func_0); mDrawable0 = ContextCompat.getDrawable(mContext, R.mipmap.icon_live_func_0);
mDrawable1 = ContextCompat.getDrawable(mContext, R.mipmap.icon_live_func_1); mDrawable1 = ContextCompat.getDrawable(mContext, R.mipmap.icon_live_func_1);
btn_end_pk_dr = (LinearLayout) findViewById(R.id.btn_end_pk_dr);
mBtnFunction = (ImageView) findViewById(R.id.btn_function); mBtnFunction = (ImageView) findViewById(R.id.btn_function);
btn_dr = (TextView) findViewById(R.id.btn_dr); btn_dr = (TextView) findViewById(R.id.btn_dr);
mBanner = (Banner) findViewById(R.id.banner); mBanner = (Banner) findViewById(R.id.banner);
@ -171,6 +193,22 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
yaoqing.clear(); yaoqing.clear();
} }
}); });
btn_end_pk_dr.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
closeEndPkBt();
HttpClient.getInstance().post("live.leaveDRPKroom", "live.leaveDRPKroom")
.params("roomid", drpkRoomId)
.params("uid", CommonAppConfig.getInstance().getUid())
.execute(new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
L.eSw("live.leaveDRPKroom:code:" + code + " info" + new Gson().toJson(info));
}
});
}
});
btn_dr.setOnClickListener(new View.OnClickListener() { btn_dr.setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -204,6 +242,10 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
yaoqing.put(numinda, numinda); yaoqing.put(numinda, numinda);
} }
public void removeYaoqing(String numinda){
yaoqing.remove(numinda);
}
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (!canClick()) { if (!canClick()) {

View File

@ -389,7 +389,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
liveHandler.removeCallbacks(loadTimeoutRunnableGone); liveHandler.removeCallbacks(loadTimeoutRunnableGone);
if (mLivePlayViewHolder == null) { if (mLivePlayViewHolder == null) {
if (isSw) { if (isSw) {
mLivePlayViewHolder = new LivePlaySwViewHolder(mContext, playContainer, 1); mLivePlayViewHolder = new LivePlaySwViewHolder(mContext, playContainer, mLiveBean.getLandscape());
} else { } else {
mLivePlayViewHolder = new LivePlayRyViewHolder(mContext, playContainer, 1); mLivePlayViewHolder = new LivePlayRyViewHolder(mContext, playContainer, 1);
} }
@ -419,7 +419,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
mLiveAudienceViewHolder.subscribeActivityLifeCycle(); mLiveAudienceViewHolder.subscribeActivityLifeCycle();
} else { } else {
mLivePlayViewHolder.initSwEngine(liveID); mLivePlayViewHolder.initSwEngine(liveID);
mLivePlayViewHolder.setLiveBeanLandscape(1); mLivePlayViewHolder.setLiveBeanLandscape(mLiveBean.getLandscape());
mLiveLinkMicPresenter.setLiveSdk(mLiveSDK); mLiveLinkMicPresenter.setLiveSdk(mLiveSDK);
mLiveLinkMicAnchorPresenter.setLiveSdk(mLiveSDK); mLiveLinkMicAnchorPresenter.setLiveSdk(mLiveSDK);
} }
@ -983,6 +983,11 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
mLiveRyLinkMicPkPresenter.release(); mLiveRyLinkMicPkPresenter.release();
mLiveRyLinkMicPkPresenter = null; mLiveRyLinkMicPkPresenter = null;
} }
if(mLiveSwLinkMicPkPresenter!=null){
mLiveSwLinkMicPkPresenter.clearData();
mLiveSwLinkMicPkPresenter.release();
mLiveSwLinkMicPkPresenter = null;
}
if(mLivePlayViewHolder!=null){ if(mLivePlayViewHolder!=null){
mLivePlayViewHolder.stopPlay2(); mLivePlayViewHolder.stopPlay2();
} }
@ -1705,6 +1710,12 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
//mLivePlayViewHolder.setDrMicInfo(u); //mLivePlayViewHolder.setDrMicInfo(u);
} }
@Override
public void onLinkDRMicPkQuit(String uid) {
L.eSw("onLinkDRMicPkQuit:"+uid);
mLivePlayViewHolder.removeLiveUid(uid);
}
/** /**
* 主播与主播PK 所有人收到PK开始的回调 * 主播与主播PK 所有人收到PK开始的回调
*/ */

View File

@ -44,7 +44,7 @@
android:layout_height="270dp" android:layout_height="270dp"
android:layout_marginTop="130dp" android:layout_marginTop="130dp"
android:orientation="horizontal" android:orientation="horizontal"
android:visibility="visible"> android:visibility="gone">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -96,6 +96,29 @@
</LinearLayout> </LinearLayout>
<LinearLayout
android:id="@+id/btn_end_pk_dr"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="right"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:visibility="gone"
android:layout_marginBottom="10dp"
android:background="@mipmap/btn_white"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/end_pk"
android:textColor="#ffb1b1b1"
android:textSize="10sp" />
</LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/btn_link_mic" android:id="@+id/btn_link_mic"