add[声望升级]
This commit is contained in:
parent
5922f4c08b
commit
3f68e2a3aa
@ -76,6 +76,17 @@ public class CommonAppConfig {
|
||||
public static boolean isGetNewWrap = false;//是否获取到新的包裹礼物
|
||||
public static int alert_time = 1;
|
||||
public static int alert_end_time = 1;
|
||||
public static String SWToken = ""; //声网Token
|
||||
public static final String SWChannelPrefix = "g";
|
||||
|
||||
|
||||
/**
|
||||
* 获取通道
|
||||
* @return
|
||||
*/
|
||||
public static String getChannelName() {
|
||||
return SWChannelPrefix+ getInstance().getUid();
|
||||
}
|
||||
|
||||
private CommonAppConfig() {
|
||||
|
||||
|
@ -0,0 +1,23 @@
|
||||
package com.yunbao.common.bean;
|
||||
|
||||
/**
|
||||
* 声网token
|
||||
*/
|
||||
public class SwTokenModel extends BaseModel {
|
||||
private String token;
|
||||
|
||||
public SwTokenModel() {
|
||||
}
|
||||
|
||||
public SwTokenModel(String token) {
|
||||
this.token = token;
|
||||
}
|
||||
|
||||
public String getToken() {
|
||||
return token;
|
||||
}
|
||||
|
||||
public void setToken(String token) {
|
||||
this.token = token;
|
||||
}
|
||||
}
|
@ -70,6 +70,7 @@ import com.yunbao.common.bean.StarChallengeStatusModel;
|
||||
import com.yunbao.common.bean.SudGameUserModel;
|
||||
import com.yunbao.common.bean.SudRoomListModel;
|
||||
import com.yunbao.common.bean.SudgameCodeModel;
|
||||
import com.yunbao.common.bean.SwTokenModel;
|
||||
import com.yunbao.common.bean.UserAreaBean;
|
||||
import com.yunbao.common.bean.UserAvatarSelectBean;
|
||||
import com.yunbao.common.bean.VipModel;
|
||||
@ -1192,4 +1193,6 @@ public interface PDLiveApi {
|
||||
Observable<ResponseModel<CheckUpgradesModel>> checkUpgrades(@Query("liveuid") String liveUid);
|
||||
@GET("/api/public/?service=Guard.getRewards")
|
||||
Observable<ResponseModel<Object>> guardGetRewards(@Query("guard_level") String guardLevel,@Query("liveuid") String liveUid);
|
||||
@GET("/api/public/?service=Tx.getShengwangToken")
|
||||
Observable<ResponseModel<SwTokenModel>> getSwToken();
|
||||
}
|
||||
|
@ -66,6 +66,7 @@ import com.yunbao.common.bean.StarChallengeStatusModel;
|
||||
import com.yunbao.common.bean.SudGameUserModel;
|
||||
import com.yunbao.common.bean.SudRoomListModel;
|
||||
import com.yunbao.common.bean.SudgameCodeModel;
|
||||
import com.yunbao.common.bean.SwTokenModel;
|
||||
import com.yunbao.common.bean.UserAreaBean;
|
||||
import com.yunbao.common.bean.UserAvatarSelectBean;
|
||||
import com.yunbao.common.bean.VipModel;
|
||||
@ -3133,7 +3134,6 @@ public class LiveNetManager {
|
||||
}
|
||||
}
|
||||
}).isDisposed();
|
||||
|
||||
}
|
||||
|
||||
public void guardGetRewards(String guardLevel, String liveUid, HttpCallback<Object> callback) {
|
||||
@ -3160,6 +3160,30 @@ public class LiveNetManager {
|
||||
|
||||
}
|
||||
|
||||
public void getSwToken( HttpCallback<SwTokenModel> callback) {
|
||||
API.get().pdLiveApi(mContext)
|
||||
.getSwToken()
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Consumer<ResponseModel<SwTokenModel>>() {
|
||||
@Override
|
||||
public void accept(ResponseModel<SwTokenModel> listResponseModel) throws Exception {
|
||||
if (callback != null) {
|
||||
callback.onSuccess(listResponseModel.getData().getInfo());
|
||||
}
|
||||
}
|
||||
}, new Consumer<Throwable>() {
|
||||
@Override
|
||||
public void accept(Throwable throwable) throws Exception {
|
||||
throwable.printStackTrace();
|
||||
if (callback != null) {
|
||||
callback.onError(mContext.getString(R.string.net_error));
|
||||
}
|
||||
}
|
||||
}).isDisposed();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 直播间取消网络请求
|
||||
*/
|
||||
|
@ -5,15 +5,18 @@ import android.content.Context;
|
||||
import android.view.SurfaceView;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.yunbao.common.CommonAppConfig;
|
||||
import com.yunbao.common.CommonAppContext;
|
||||
import com.yunbao.common.manager.base.BaseCacheManager;
|
||||
import com.yunbao.common.utils.L;
|
||||
import com.yunbao.common.utils.StringUtil;
|
||||
|
||||
import io.agora.rtc2.ChannelMediaOptions;
|
||||
import io.agora.rtc2.Constants;
|
||||
import io.agora.rtc2.IRtcEngineEventHandler;
|
||||
import io.agora.rtc2.RtcEngine;
|
||||
import io.agora.rtc2.RtcConnection;
|
||||
import io.agora.rtc2.RtcEngineConfig;
|
||||
import io.agora.rtc2.RtcEngineEx;
|
||||
import io.agora.rtc2.video.VideoCanvas;
|
||||
|
||||
/**
|
||||
@ -24,12 +27,9 @@ public class SWAuManager extends BaseCacheManager {
|
||||
// 填写项目的 App ID,可在声网控制台中生成
|
||||
public static final String shengwang_appId = "4cf0376582d742ac8a96778b25b1079e";
|
||||
// 填写频道名
|
||||
public static final String shengwang_channelName = "12";
|
||||
// 填写声网控制台中生成的临时 Token
|
||||
public static final String shengwang_token = "007eJxSYJi477Xju22xV7ov7GfzzOnbtCU0IuK9+YuwWf2uLPGnl8xRYDBJTjMwNjcztTBKMTcxSky2SLQ0Mze3SDIyTTI0MLdMPWQrltYQyMjw/4kCCyMDBIL4TAyGRiwMlpaWloAAAAD//w/TIFY=";
|
||||
private Activity mContext;
|
||||
public static SWAuManager manager;
|
||||
private RtcEngine mRtcEngine;
|
||||
private RtcEngineEx mRtcEngine;
|
||||
private FrameLayout audienceContainer; //主播视图
|
||||
private FrameLayout pkContainer1; //pk主播视图1
|
||||
private FrameLayout pkContainer2; //pk主播视图2
|
||||
@ -64,7 +64,7 @@ public class SWAuManager extends BaseCacheManager {
|
||||
config.mAppId = SWAuManager.shengwang_appId;
|
||||
config.mEventHandler = mRtcEventHandler;
|
||||
// 创建并初始化 RtcEngine
|
||||
mRtcEngine = RtcEngine.create(config);
|
||||
mRtcEngine = (RtcEngineEx) RtcEngineEx.create(config);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Check the error.");
|
||||
}
|
||||
@ -76,7 +76,6 @@ public class SWAuManager extends BaseCacheManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* guanzhong
|
||||
* 加入房间
|
||||
*/
|
||||
public void joinRoom(String strUid, String token, String channelName) {
|
||||
@ -96,11 +95,60 @@ public class SWAuManager extends BaseCacheManager {
|
||||
options.clientRoleType = Constants.CLIENT_ROLE_AUDIENCE;
|
||||
// 直播场景下,设置频道场景为 BROADCASTING (直播场景)
|
||||
options.audienceLatencyLevel = Constants.AUDIENCE_LATENCY_LEVEL_LOW_LATENCY; // 觀眾走極速直播
|
||||
|
||||
// 使用临时 Token 加入频道,自行指定用户 ID 并确保其在频道内的唯一性
|
||||
mRtcEngine.joinChannel(token, channelName, uid, options);
|
||||
}
|
||||
|
||||
|
||||
public void joinExRoomEx(String strUid, String token, String channelName) {
|
||||
int uid;
|
||||
if (StringUtil.isEmpty(strUid)) {
|
||||
uid = 0;
|
||||
} else {
|
||||
uid = Integer.parseInt(strUid);
|
||||
}
|
||||
|
||||
// 创建 ChannelMediaOptions 对象,并进行配置
|
||||
ChannelMediaOptions options = new ChannelMediaOptions();
|
||||
// 根据场景将用户角色设置为 AUDIENCE (观众)
|
||||
options.clientRoleType = Constants.CLIENT_ROLE_AUDIENCE;
|
||||
// 直播场景下,设置频道场景为 BROADCASTING (直播场景)
|
||||
options.audienceLatencyLevel = Constants.AUDIENCE_LATENCY_LEVEL_LOW_LATENCY; // 觀眾走極速直播
|
||||
options.autoSubscribeVideo = true;
|
||||
options.autoSubscribeAudio = true;
|
||||
|
||||
RtcConnection rtcConnection = new RtcConnection();
|
||||
rtcConnection.channelId = "g99411"; //對方主播的頻道
|
||||
rtcConnection.localUid = 99412;//自己的ID
|
||||
|
||||
mRtcEngine.joinChannelEx(token, rtcConnection, options, new IRtcEngineEventHandler() {
|
||||
@Override
|
||||
public void onJoinChannelSuccess(String channel, int uid, int elapsed) {
|
||||
super.onJoinChannelSuccess(channel, uid, elapsed);
|
||||
L.eSw("onJoinChannelSuccess:" + channel + " uid " +uid+ " elapsed: " + elapsed);
|
||||
|
||||
SurfaceView surfaceView = new SurfaceView(mContext);
|
||||
surfaceView.setZOrderMediaOverlay(true);
|
||||
pkContainer1.addView(surfaceView);
|
||||
|
||||
VideoCanvas videoCanvas = new VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_HIDDEN, 99411);
|
||||
|
||||
mRtcEngine.setupRemoteVideoEx(videoCanvas, rtcConnection);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int err) {
|
||||
super.onError(err);
|
||||
L.eSw("onError:" + err);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static String getChannelName(String liveUid) {
|
||||
return CommonAppConfig.SWChannelPrefix + liveUid;
|
||||
}
|
||||
|
||||
//远程监听
|
||||
private final IRtcEngineEventHandler mRtcEventHandler = new IRtcEngineEventHandler() {
|
||||
@Override
|
||||
@ -110,7 +158,7 @@ public class SWAuManager extends BaseCacheManager {
|
||||
@Override
|
||||
public void run() {
|
||||
// 获取 uid 后,设置远端视频视图
|
||||
setupRemoteVideo(uid);
|
||||
//setupRemoteVideo(uid);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -5,17 +5,23 @@ import android.content.Context;
|
||||
import android.view.SurfaceView;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.yunbao.common.CommonAppConfig;
|
||||
import com.yunbao.common.CommonAppContext;
|
||||
import com.yunbao.common.bean.SwTokenModel;
|
||||
import com.yunbao.common.http.base.HttpCallback;
|
||||
import com.yunbao.common.http.live.LiveNetManager;
|
||||
import com.yunbao.common.manager.base.BaseCacheManager;
|
||||
import com.yunbao.common.utils.L;
|
||||
import com.yunbao.common.utils.StringUtil;
|
||||
import com.yunbao.common.utils.ToastUtil;
|
||||
|
||||
import cn.rongcloud.rtc.base.RCRTCParamsType;
|
||||
import io.agora.rtc2.ChannelMediaOptions;
|
||||
import io.agora.rtc2.Constants;
|
||||
import io.agora.rtc2.IRtcEngineEventHandler;
|
||||
import io.agora.rtc2.RtcConnection;
|
||||
import io.agora.rtc2.RtcEngine;
|
||||
import io.agora.rtc2.RtcEngineConfig;
|
||||
import io.agora.rtc2.RtcEngineEx;
|
||||
import io.agora.rtc2.video.VideoCanvas;
|
||||
import io.agora.rtc2.video.VideoEncoderConfiguration;
|
||||
|
||||
@ -27,12 +33,9 @@ public class SWManager extends BaseCacheManager {
|
||||
// 填写项目的 App ID,可在声网控制台中生成
|
||||
public static final String shengwang_appId = "4cf0376582d742ac8a96778b25b1079e";
|
||||
// 填写频道名
|
||||
public static final String shengwang_channelName = "12";
|
||||
// 填写声网控制台中生成的临时 Token
|
||||
public static final String shengwang_token = "007eJxTYOD6Iv3buTHm6666BKY1Cr7mUZU3tY0eHH5qbF4jv5nNukqBwSQ5zcDY3MzUwijF3MQoMdki0dLM3Nwiycg0ydDA3DL1xX/RtIZARgb+3ExWRgYIBPGZGAyNGBgAhDMb8Q==";
|
||||
private Activity mContext;
|
||||
public static SWManager manager;
|
||||
private RtcEngine mRtcEngine;
|
||||
private RtcEngineEx mRtcEngine;
|
||||
private int uid;
|
||||
VideoEncoderConfiguration cfg;
|
||||
private FrameLayout anchorContainer; //主播视图
|
||||
@ -79,7 +82,7 @@ public class SWManager extends BaseCacheManager {
|
||||
config.mAppId = SWManager.shengwang_appId;
|
||||
config.mEventHandler = mRtcEventHandler;
|
||||
// 创建并初始化 RtcEngine
|
||||
mRtcEngine = RtcEngine.create(config);
|
||||
mRtcEngine = (RtcEngineEx) RtcEngineEx.create(config);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Check the error.");
|
||||
}
|
||||
@ -131,7 +134,6 @@ public class SWManager extends BaseCacheManager {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 创建房间
|
||||
*/
|
||||
@ -143,6 +145,68 @@ public class SWManager extends BaseCacheManager {
|
||||
mRtcEngine.joinChannel(token, channelName, uid, options);
|
||||
}
|
||||
|
||||
public void updateMyVideoView(FrameLayout frameLayout, String channelName) {
|
||||
mRtcEngine.setupRemoteVideoEx(null, null);
|
||||
|
||||
RtcConnection rtcConnection = new RtcConnection();
|
||||
rtcConnection.channelId = channelName; //自己频道名称
|
||||
rtcConnection.localUid = uid;//自己的ID
|
||||
|
||||
SurfaceView surfaceView = new SurfaceView(mContext);
|
||||
surfaceView.setZOrderMediaOverlay(true);
|
||||
frameLayout.addView(surfaceView);
|
||||
|
||||
VideoCanvas videoCanvas = new VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_HIDDEN, uid);
|
||||
mRtcEngine.setupRemoteVideoEx(videoCanvas, rtcConnection);
|
||||
}
|
||||
|
||||
|
||||
public void joinExRoomEx(String strUid, String token,String toUid, String channelName) {
|
||||
int tempUid;
|
||||
if (StringUtil.isEmpty(strUid)) {
|
||||
tempUid = 0;
|
||||
} else {
|
||||
tempUid = Integer.parseInt(strUid);
|
||||
}
|
||||
|
||||
// 创建 ChannelMediaOptions 对象,并进行配置
|
||||
ChannelMediaOptions options = new ChannelMediaOptions();
|
||||
// 根据场景将用户角色设置为 AUDIENCE (观众)
|
||||
options.clientRoleType = Constants.CLIENT_ROLE_BROADCASTER;
|
||||
options.autoSubscribeVideo = true;
|
||||
options.autoSubscribeAudio = true;
|
||||
options.publishMicrophoneTrack = false;
|
||||
options.publishCameraTrack = false;
|
||||
|
||||
RtcConnection rtcConnection = new RtcConnection();
|
||||
rtcConnection.channelId = channelName; //對方主播的頻道
|
||||
rtcConnection.localUid = tempUid;//自己的ID
|
||||
L.eSw("strUid:" + tempUid + "_token:" + token + "_channelName:" + channelName);
|
||||
mRtcEngine.joinChannelEx(token, rtcConnection, options, new IRtcEngineEventHandler() {
|
||||
@Override
|
||||
public void onJoinChannelSuccess(String channel, int scUid, int elapsed) {
|
||||
super.onJoinChannelSuccess(channel, scUid, elapsed);
|
||||
L.eSw("onJoinChannelSuccess:" + channel + " uid " + scUid + " elapsed: " + elapsed);
|
||||
mContext.runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
SurfaceView surfaceView = new SurfaceView(mContext);
|
||||
surfaceView.setZOrderMediaOverlay(true);
|
||||
pkContainer1.addView(surfaceView);
|
||||
VideoCanvas videoCanvas = new VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_FIT,Integer.parseInt(toUid));
|
||||
mRtcEngine.setupRemoteVideoEx(videoCanvas, rtcConnection);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int err) {
|
||||
super.onError(err);
|
||||
L.eSw("onError:" + err);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//远程监听
|
||||
private final IRtcEngineEventHandler mRtcEventHandler = new IRtcEngineEventHandler() {
|
||||
@Override
|
||||
@ -152,7 +216,7 @@ public class SWManager extends BaseCacheManager {
|
||||
@Override
|
||||
public void run() {
|
||||
// 获取 uid 后,设置远端视频视图
|
||||
setupRemoteVideo(uid);
|
||||
//setupRemoteVideo(uid);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -170,8 +234,36 @@ public class SWManager extends BaseCacheManager {
|
||||
super.onError(err);
|
||||
ToastUtil.show("onError:" + err);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTokenPrivilegeWillExpire(String token) {
|
||||
super.onTokenPrivilegeWillExpire(token);
|
||||
refreshToken();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestToken() {
|
||||
super.onRequestToken();
|
||||
refreshToken();
|
||||
}
|
||||
};
|
||||
|
||||
private void refreshToken() {
|
||||
LiveNetManager.get(mContext).getSwToken(new HttpCallback<SwTokenModel>() {
|
||||
@Override
|
||||
public void onSuccess(SwTokenModel data) {
|
||||
if (mRtcEngine != null) {
|
||||
mRtcEngine.renewToken(data.getToken());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String error) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//设置对方主播视图
|
||||
private void setupRemoteVideo(int uid) {
|
||||
SurfaceView surfaceView = new SurfaceView(mContext);
|
||||
|
@ -12,10 +12,18 @@ public class L {
|
||||
|
||||
private final static String TAG = "log--->";
|
||||
|
||||
private final static String TAG_SW = "log--->TAG_SW";
|
||||
|
||||
public static void e(String s) {
|
||||
e(TAG, s);
|
||||
}
|
||||
|
||||
public static void eSw(String s) {
|
||||
if (sDeBug) {
|
||||
Log.e(TAG_SW, s);
|
||||
}
|
||||
}
|
||||
|
||||
public static void e(String tag, String s) {
|
||||
if (sDeBug) {
|
||||
Log.e(tag, s);
|
||||
|
@ -124,10 +124,6 @@
|
||||
<activity
|
||||
android:name=".activity.CompensateActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
|
||||
<activity
|
||||
android:name=".activity.NewLiveActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
</application>
|
||||
|
||||
</manifest>
|
@ -3,6 +3,7 @@ package com.yunbao.live.activity;
|
||||
import static com.blankj.utilcode.util.SnackbarUtils.dismiss;
|
||||
import static com.tencent.trtc.TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_DISABLE;
|
||||
import static com.tencent.trtc.TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_ENABLE;
|
||||
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_RANDOM;
|
||||
import static com.yunbao.live.views.LiveRyAnchorViewHolder.btn_dr_pk_nub;
|
||||
@ -101,6 +102,7 @@ import com.yunbao.live.interfaces.LiveFunctionClickListener;
|
||||
import com.yunbao.live.interfaces.LivePushListener;
|
||||
import com.yunbao.live.music.LiveMusicDialogFragment;
|
||||
import com.yunbao.live.presenter.LiveLinkMicAnchorPresenter;
|
||||
import com.yunbao.live.presenter.LiveLinkMicPkPresenter;
|
||||
import com.yunbao.live.presenter.LiveLinkMicPresenter;
|
||||
import com.yunbao.live.presenter.LiveRyLinkMicPkPresenter;
|
||||
import com.yunbao.live.socket.SocketRyChatUtil;
|
||||
@ -1235,8 +1237,40 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl
|
||||
if (obj != null) {
|
||||
if (obj.getString("ispk").equals("0")) {
|
||||
|
||||
// TODO: 2024/4/11 发送IM消息
|
||||
final SocketSendBean msg1 = new SocketSendBean()
|
||||
.param("_method_", SOCKET_LINK_MIC_PK)
|
||||
.param("action", 1)
|
||||
.param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName())
|
||||
.param("pkuid", pkUid)
|
||||
.param("uid", CommonAppConfig.getInstance().getUid())
|
||||
.param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar())
|
||||
.param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName());
|
||||
msg1.create();
|
||||
|
||||
IMRTCManager.getInstance().requestJoinOtherRoom(pkUid, true, extra, new IRCRTCResultCallback() {
|
||||
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("g" + pkUid, conversationType, messageContent);
|
||||
|
||||
RongIMClient.getInstance().sendMessage(message, null, null, new IRongCallback.ISendMessageCallback() {
|
||||
@Override
|
||||
public void onAttached(io.rong.imlib.model.Message message) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(io.rong.imlib.model.Message message) {
|
||||
Log.e("tx", "发送成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(io.rong.imlib.model.Message message, RongIMClient.ErrorCode errorCode) {
|
||||
Log.e("tx", "发送失败" + errorCode.getMessage());
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
/*IMRTCManager.getInstance().requestJoinOtherRoom(pkUid, true, extra, new IRCRTCResultCallback() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
// ToastUtil.show("邀请 " + pkUid + " 发送成功");
|
||||
@ -1264,7 +1298,8 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl
|
||||
ToastUtil.show("invite " + pkUid + " failed:" + rtcErrorCode);
|
||||
}
|
||||
}
|
||||
});
|
||||
});*/
|
||||
|
||||
|
||||
} else {
|
||||
ToastUtil.show("主播正在PK,稍後再試");
|
||||
|
@ -1,139 +0,0 @@
|
||||
package com.yunbao.live.activity;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.view.SurfaceView;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.yunbao.common.manager.SWManager;
|
||||
import com.yunbao.live.R;
|
||||
|
||||
import io.agora.rtc2.ChannelMediaOptions;
|
||||
import io.agora.rtc2.Constants;
|
||||
import io.agora.rtc2.IRtcEngineEventHandler;
|
||||
import io.agora.rtc2.RtcEngine;
|
||||
import io.agora.rtc2.RtcEngineConfig;
|
||||
import io.agora.rtc2.video.VideoCanvas;
|
||||
|
||||
|
||||
public class NewLiveActivity extends AppCompatActivity {
|
||||
private RtcEngine mRtcEngine;
|
||||
|
||||
private final IRtcEngineEventHandler mRtcEventHandler = new IRtcEngineEventHandler() {
|
||||
@Override
|
||||
// 监听频道内的远端用户,获取用户的 uid 信息
|
||||
public void onUserJoined(int uid, int elapsed) {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// 获取 uid 后,设置远端视频视图
|
||||
setupRemoteVideo(uid);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
private void initializeAndJoinChannel() {
|
||||
try {
|
||||
// 创建 RtcEngineConfig 对象,并进行配置
|
||||
RtcEngineConfig config = new RtcEngineConfig();
|
||||
config.mContext = getBaseContext();
|
||||
config.mAppId = SWManager.shengwang_appId;
|
||||
config.mEventHandler = mRtcEventHandler;
|
||||
// 创建并初始化 RtcEngine
|
||||
mRtcEngine = RtcEngine.create(config);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Check the error.");
|
||||
}
|
||||
// 启用视频模块
|
||||
mRtcEngine.enableVideo();
|
||||
// 开启本地预览
|
||||
mRtcEngine.startPreview();
|
||||
|
||||
// 创建一个 SurfaceView 对象,并将其作为 FrameLayout 的子对象
|
||||
FrameLayout container = findViewById(R.id.local_video_view_container);
|
||||
SurfaceView surfaceView = new SurfaceView(getBaseContext());
|
||||
container.addView(surfaceView);
|
||||
// 将 SurfaceView 对象传入声网实时互动 SDK,设置本地视图
|
||||
mRtcEngine.setupLocalVideo(new VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_FIT, 0));
|
||||
|
||||
// 创建 ChannelMediaOptions 对象,并进行配置
|
||||
ChannelMediaOptions options = new ChannelMediaOptions();
|
||||
// 根据场景将用户角色设置为 BROADCASTER (主播) 或 AUDIENCE (观众)
|
||||
options.clientRoleType = Constants.CLIENT_ROLE_BROADCASTER;
|
||||
// 直播场景下,设置频道场景为 BROADCASTING (直播场景)
|
||||
options.channelProfile = Constants.CHANNEL_PROFILE_LIVE_BROADCASTING;
|
||||
|
||||
// 使用临时 Token 加入频道,自行指定用户 ID 并确保其在频道内的唯一性
|
||||
mRtcEngine.joinChannel(SWManager.shengwang_token, SWManager.shengwang_channelName, 0, options);
|
||||
}
|
||||
|
||||
private void setupRemoteVideo(int uid) {
|
||||
FrameLayout container = findViewById(R.id.remote_video_view_container);
|
||||
SurfaceView surfaceView = new SurfaceView(getBaseContext());
|
||||
surfaceView.setZOrderMediaOverlay(true);
|
||||
container.addView(surfaceView);
|
||||
// 将 SurfaceView 对象传入声网实时互动 SDK,设置远端视图
|
||||
mRtcEngine.setupRemoteVideo(new VideoCanvas(surfaceView, VideoCanvas.RENDER_MODE_FIT, uid));
|
||||
}
|
||||
|
||||
private static final int PERMISSION_REQ_ID = 22;
|
||||
|
||||
// 获取体验实时音视频互动所需的录音、摄像头等权限
|
||||
private String[] getRequiredPermissions() {
|
||||
// 判断 targetSDKVersion 31 及以上时所需的权限
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
|
||||
return new String[]{
|
||||
Manifest.permission.RECORD_AUDIO, // 录音权限
|
||||
Manifest.permission.CAMERA, // 摄像头权限
|
||||
Manifest.permission.READ_PHONE_STATE, // 读取电话状态权限
|
||||
Manifest.permission.BLUETOOTH_CONNECT // 蓝牙连接权限
|
||||
};
|
||||
} else {
|
||||
return new String[]{
|
||||
Manifest.permission.RECORD_AUDIO,
|
||||
Manifest.permission.CAMERA
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkPermissions() {
|
||||
for (String permission : getRequiredPermissions()) {
|
||||
int permissionCheck = ContextCompat.checkSelfPermission(this, permission);
|
||||
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.acticity_new_live);
|
||||
// 如果已经授权,则初始化 RtcEngine 并加入频道
|
||||
initializeAndJoinChannel();
|
||||
if (checkPermissions()) {
|
||||
initializeAndJoinChannel();
|
||||
} else {
|
||||
ActivityCompat.requestPermissions(this, getRequiredPermissions(), PERMISSION_REQ_ID);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
|
||||
// 停止本地视频预览
|
||||
mRtcEngine.stopPreview();
|
||||
|
||||
// 离开频道
|
||||
mRtcEngine.leaveChannel();
|
||||
}
|
||||
}
|
@ -52,6 +52,7 @@ import com.yunbao.common.manager.RandomPkManager;
|
||||
import com.yunbao.common.utils.Bus;
|
||||
import com.yunbao.common.utils.DialogUitl;
|
||||
import com.yunbao.common.utils.DpUtil;
|
||||
import com.yunbao.common.utils.L;
|
||||
import com.yunbao.common.utils.ScreenDimenUtil;
|
||||
import com.yunbao.common.utils.StringUtil;
|
||||
import com.yunbao.common.utils.ToastUtil;
|
||||
@ -683,9 +684,9 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener {
|
||||
public void onLinkMicToPk(UserBean u) {
|
||||
EventBus.getDefault().post(new AnchorInfoEvent(false, u.getId(), u.getUserNiceName(), u.getAvatar()));
|
||||
Log.e("eve", u.getId() + "");
|
||||
L.eSw("主播接受了主播的PK邀請");
|
||||
/**
|
||||
* 加入副房间
|
||||
*
|
||||
* 前提必须已经 通过 {@link RCRTCEngine#joinRoom(String, RCRTCRoomType, IRCRTCResultDataCallback)} 或 {@link RCRTCEngine#joinRoom(String, IRCRTCResultDataCallback)} 加入了主房间
|
||||
*
|
||||
* @param roomId 房间 ID ,长度 64 个字符,可包含:`A-Z`、`a-z`、`0-9`、`+`、`=`、`-`、`_`
|
||||
@ -693,7 +694,7 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener {
|
||||
* @group 房间管理
|
||||
*/
|
||||
RandomPkManager.getInstance().setPkStatus(RandomPkManager.PK_STATUS_START);
|
||||
RCRTCEngine.getInstance().joinOtherRoom(u.getId(), new IRCRTCResultDataCallback<RCRTCOtherRoom>() {
|
||||
/*RCRTCEngine.getInstance().joinOtherRoom(u.getId(), new IRCRTCResultDataCallback<RCRTCOtherRoom>() {
|
||||
@Override
|
||||
public void onSuccess(RCRTCOtherRoom rcrtcOtherRoom) {
|
||||
rcrtcOtherRoom.registerOtherRoomEventsListener(otherRoomEventsListener);
|
||||
@ -779,17 +780,18 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener {
|
||||
public void onFailed(RTCErrorCode rtcErrorCode) {
|
||||
Log.i("ry", "11111加入其他房间失败 :" + rtcErrorCode.getReason());
|
||||
}
|
||||
});
|
||||
});*/
|
||||
LivePushRyViewHolder.btn_close.setVisibility(View.VISIBLE);
|
||||
LiveRyAnchorActivity.isDRPK = 1;
|
||||
ScreenDimenUtil util = ScreenDimenUtil.getInstance();
|
||||
int mScreenWdith = util.getScreenWdith();
|
||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, mScreenWdith * 720 / 960);
|
||||
/*LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, mScreenWdith * 720 / 960);
|
||||
params.weight = 1;
|
||||
params.topMargin = mContext.getResources().getDimensionPixelOffset(R.dimen.live_top);
|
||||
livePushRyViewHolder.camera.setLayoutParams(params);
|
||||
livePushRyViewHolder.mPreView1.setLayoutParams(params);
|
||||
livePushRyViewHolder.mPreView1.setVisibility(View.VISIBLE);
|
||||
livePushRyViewHolder.mPreView1.setVisibility(View.VISIBLE);*/
|
||||
livePushRyViewHolder.setAnPkRtc(u);//设置对方主播视图
|
||||
|
||||
final SocketSendBean msg1 = new SocketSendBean()
|
||||
.param("_method_", SOCKET_LINK_MIC_PK)
|
||||
@ -801,7 +803,7 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener {
|
||||
.param("pkname", u.getUserNiceName());
|
||||
msg1.create();
|
||||
|
||||
Conversation.ConversationType conversationType = Conversation.ConversationType.CHATROOM;
|
||||
/*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("g" + CommonAppConfig.getInstance().getUid(), conversationType, messageContent);
|
||||
|
||||
@ -821,7 +823,7 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener {
|
||||
Log.e("tx", "发送失败" + errorCode.getMessage());
|
||||
|
||||
}
|
||||
});
|
||||
});*/
|
||||
|
||||
}
|
||||
|
||||
@ -837,7 +839,7 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener {
|
||||
LivePushRyViewHolder.btn_close.setVisibility(View.VISIBLE);
|
||||
LiveRyAnchorActivity.isDRPK = 1;
|
||||
|
||||
JSONObject msg1 = new JSONObject();
|
||||
/*JSONObject msg1 = new JSONObject();
|
||||
msg1.put("uid", CommonAppConfig.getInstance().getUid());
|
||||
msg1.put("pkuid", CommonAppConfig.getInstance().getUid());
|
||||
msg1.put("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatarThumb());
|
||||
@ -847,9 +849,47 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener {
|
||||
if (bean != null && bean.isRandomPk()) {
|
||||
msg1.put("random_pk", bean.isRandomPk() ? 1 : 0);
|
||||
msg1.put("is_ladders", bean.getRankPkImgUrl());
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
/*---------------------------------------------------------------- */
|
||||
final SocketSendBean msg1 = new SocketSendBean()
|
||||
.param("_method_", SOCKET_LINK_MIC_PK)
|
||||
.param("action", 2) //回复PK申请 2
|
||||
.param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName())
|
||||
.param("pkuid", CommonAppConfig.getInstance().getUid())
|
||||
.param("uid", CommonAppConfig.getInstance().getUid())
|
||||
.param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar())
|
||||
.param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName());
|
||||
msg1.create();
|
||||
System.out.println("PK回执 = " + msg1.toString());
|
||||
IMRTCManager.getInstance().responseJoinOtherRoom(mApplyUid, true, msg1.toString(), new IRCRTCResultCallback() {
|
||||
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("g" + bean.getId(), conversationType, messageContent);
|
||||
|
||||
RongIMClient.getInstance().sendMessage(message, null, null, new IRongCallback.ISendMessageCallback() {
|
||||
@Override
|
||||
public void onAttached(io.rong.imlib.model.Message message) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(io.rong.imlib.model.Message message) {
|
||||
Log.e("tx", "发送成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(io.rong.imlib.model.Message message, RongIMClient.ErrorCode errorCode) {
|
||||
Log.e("tx", "发送失败" + errorCode.getMessage());
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
// TODO: 2024/4/12 视图渲染
|
||||
livePushRyViewHolder.setAnPkRtc(bean);
|
||||
|
||||
|
||||
/*IMRTCManager.getInstance().responseJoinOtherRoom(mApplyUid, true, msg1.toString(), new IRCRTCResultCallback() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
RCRTCEngine.getInstance().joinOtherRoom(mApplyUid, new IRCRTCResultDataCallback<RCRTCOtherRoom>() {
|
||||
@ -956,7 +996,7 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener {
|
||||
public void onFailed(RTCErrorCode errorCode) {
|
||||
ToastUtil.show("接受失败");
|
||||
}
|
||||
});
|
||||
});*/
|
||||
|
||||
}
|
||||
|
||||
|
@ -1374,7 +1374,7 @@ public class SocketRyClient {
|
||||
private void processAnchorLinkMicPk(JSONObject map) {
|
||||
int action = map.getIntValue("action");
|
||||
Log.i("Socket", "action = " + action + " json = " + map.toString());
|
||||
|
||||
L.eSw("处理主播与主播PK逻辑action = " + action + " json = " + map.toString());
|
||||
switch (action) {
|
||||
case 1://收到对方主播PK回调
|
||||
UserBean u = new UserBean();
|
||||
|
@ -11,6 +11,8 @@ import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.yunbao.common.CommonAppConfig;
|
||||
import com.yunbao.common.utils.L;
|
||||
import com.yunbao.common.views.AbsViewHolder;
|
||||
@ -30,7 +32,7 @@ public class AbsRyLivePushViewHolder extends AbsViewHolder implements ILivePushV
|
||||
protected ViewGroup mBigContainer;
|
||||
protected ViewGroup mSmallContainer;
|
||||
protected ViewGroup mLeftContainer;
|
||||
protected ViewGroup mRightContainer;
|
||||
protected FrameLayout mRightContainer;
|
||||
protected ViewGroup mPkContainer;
|
||||
public FrameLayout mPreView, mPreView1, cameraPreview3, dr1_preview, dr2_preview, dr3_preview, dr4_preview;
|
||||
public ImageView leave;
|
||||
@ -59,7 +61,7 @@ public class AbsRyLivePushViewHolder extends AbsViewHolder implements ILivePushV
|
||||
mBigContainer = (ViewGroup) findViewById(R.id.big_container);
|
||||
mSmallContainer = (ViewGroup) findViewById(R.id.small_container);
|
||||
mLeftContainer = (ViewGroup) findViewById(R.id.left_container);
|
||||
mRightContainer = (ViewGroup) findViewById(R.id.right_container);
|
||||
mRightContainer = (FrameLayout) findViewById(R.id.right_container);
|
||||
mPkContainer = (ViewGroup) findViewById(R.id.pk_container);
|
||||
mCameraFront = true;
|
||||
String mBeautySdkType = CommonAppConfig.getInstance().getBeautySdkType();
|
||||
|
@ -308,7 +308,6 @@ public class LiveNewReadyRyViewHolder extends AbsViewHolder implements View.OnCl
|
||||
}
|
||||
|
||||
private void setSelectClarity(int selectClarity) {
|
||||
|
||||
this.selectClarity = selectClarity;
|
||||
IMLoginManager.get(mContext).setSelectClarity(selectClarity);
|
||||
switch (selectClarity) {
|
||||
@ -330,7 +329,6 @@ public class LiveNewReadyRyViewHolder extends AbsViewHolder implements View.OnCl
|
||||
}
|
||||
SWManager.get().setDimensions(selectClarity);
|
||||
|
||||
|
||||
/*//設置開播分辨率
|
||||
RCRTCParamsType.RCRTCVideoResolution rcrtcVideoResolution = RCRTCParamsType.RCRTCVideoResolution.RESOLUTION_480_848;
|
||||
int minRate = 200;
|
||||
|
@ -31,6 +31,7 @@ import com.lxj.xpopup.core.BasePopupView;
|
||||
import com.lxj.xpopup.interfaces.XPopupCallback;
|
||||
import com.lzf.easyfloat.EasyFloat;
|
||||
import com.lzy.okserver.OkDownload;
|
||||
import com.yunbao.common.CommonAppConfig;
|
||||
import com.yunbao.common.bean.EnterRoomNewModel;
|
||||
import com.yunbao.common.dialog.LiveFontSizeSettingDialog;
|
||||
import com.yunbao.common.http.HttpCallback;
|
||||
@ -100,6 +101,7 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder {
|
||||
public StyledPlayerView mVideoView;
|
||||
|
||||
private FrameLayout playFrameLayout;
|
||||
private FrameLayout playFrameLayout1;
|
||||
|
||||
private View mLoading, mLoading2;
|
||||
private ImageView mCover;
|
||||
@ -127,6 +129,7 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder {
|
||||
RCRTCRoom rcrtcRoom;
|
||||
String purl, srcUrl;
|
||||
SWAuManager swAuManager;
|
||||
String liveUid;
|
||||
|
||||
public int getLandscape() {
|
||||
return landscape;
|
||||
@ -137,9 +140,9 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder {
|
||||
contexts = context;
|
||||
landscape = landscapes;
|
||||
Log.i("收收收", landscape + "");
|
||||
L.eSw("liveUid:" + liveUid);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected int getLayoutId() {
|
||||
return R.layout.view_live_play_ksy;
|
||||
@ -152,6 +155,7 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder {
|
||||
Bus.getOn(this);
|
||||
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);
|
||||
mLeftContainer = (ViewGroup) findViewById(R.id.left_container);
|
||||
mRightContainer = (ViewGroup) findViewById(R.id.right_container);
|
||||
@ -174,15 +178,21 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder {
|
||||
mPlayer.setMainView(mVideoView);
|
||||
mPlayer.setListener(new ExoPlayerListener());
|
||||
|
||||
debugView = new TextView(mContext);
|
||||
debugView.setBackgroundColor(Color.WHITE);
|
||||
}
|
||||
|
||||
public void initSwEngine(String liveUid) {
|
||||
this.liveUid = liveUid;
|
||||
swAuManager = SWAuManager.get();
|
||||
swAuManager.setAudienceContainer(playFrameLayout);
|
||||
swAuManager.initRtcEngine((Activity) mContext);
|
||||
swAuManager.setupRemoteVideo(11);
|
||||
swAuManager.joinRoom("9999", SWAuManager.shengwang_token, SWAuManager.shengwang_channelName);
|
||||
|
||||
debugView = new TextView(mContext);
|
||||
debugView.setBackgroundColor(Color.WHITE);
|
||||
swAuManager.setupRemoteVideo(Integer.parseInt(liveUid));
|
||||
swAuManager.joinRoom(CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, SWAuManager.getChannelName(liveUid));
|
||||
|
||||
//测试-模拟PK场景,加入第二个主播视图
|
||||
swAuManager.setPkContainer1(playFrameLayout1);
|
||||
swAuManager.joinExRoomEx(CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, SWAuManager.getChannelName(liveUid));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -46,6 +46,7 @@ import com.yunbao.common.http.live.LiveNetManager;
|
||||
import com.yunbao.common.manager.IMLoginManager;
|
||||
import com.yunbao.common.manager.IMRTCManager;
|
||||
import com.yunbao.common.manager.RandomPkManager;
|
||||
import com.yunbao.common.manager.SWAuManager;
|
||||
import com.yunbao.common.manager.SWManager;
|
||||
import com.yunbao.common.utils.Bus;
|
||||
import com.yunbao.common.utils.DialogUitl;
|
||||
@ -503,7 +504,6 @@ public class LivePushRyViewHolder extends AbsRyLivePushViewHolder implements ITX
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
HttpClient.getInstance().get("Livepk.endPK", "Livepk.endPK")
|
||||
.params("uid", CommonAppConfig.getInstance().getUid())
|
||||
.params("addtime", "1")
|
||||
@ -772,23 +772,36 @@ public class LivePushRyViewHolder extends AbsRyLivePushViewHolder implements ITX
|
||||
*/
|
||||
private void initRtcEngine() {
|
||||
swManager = SWManager.get();
|
||||
swManager.setAnchorContainer(mPreView);
|
||||
swManager.initRtcEngine((Activity) mContext, "11");
|
||||
swManager.setAnchorContainer((FrameLayout) mLeftContainer);
|
||||
swManager.initRtcEngine((Activity) mContext, CommonAppConfig.getInstance().getUid());
|
||||
swManager.setOnRtcEngineListener(new SWManager.onRtcEngineListener() {
|
||||
@Override
|
||||
public void onOpenSuccess(String channel, int uid) {
|
||||
//开播成功
|
||||
|
||||
L.eSw("开播成功");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setAnPkRtc(UserBean u) {
|
||||
if (swManager != null && u != null) {
|
||||
L.eSw("设置对方主播的视图setAnPkRtc" + u);
|
||||
|
||||
//将自己的渲染视图设置到 leftContainer
|
||||
//swManager.updateMyVideoView((FrameLayout) mLeftContainer,SWAuManager.getChannelName(CommonAppConfig.getInstance().getUid()));
|
||||
|
||||
//设置对方主播的渲染视图 设置到 rightContainer
|
||||
swManager.setPkContainer1(mRightContainer);
|
||||
swManager.joinExRoomEx(CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken,u.getId(), SWAuManager.getChannelName(u.getId()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void changeToLeft() {
|
||||
if (mPreView != null) {
|
||||
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mPreView.getLayoutParams();
|
||||
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mPreView.getLayoutParams();
|
||||
params.width = mPreView.getWidth() / 2;
|
||||
params.height = DpUtil.dp2px(250);
|
||||
params.height = DpUtil.dp2px(mPreView.getHeight());
|
||||
params.topMargin = DpUtil.dp2px(130);
|
||||
camera.setLayoutParams(params);
|
||||
}
|
||||
@ -844,7 +857,6 @@ public class LivePushRyViewHolder extends AbsRyLivePushViewHolder implements ITX
|
||||
ToastUtil.show(mContext.getString(R.string.live_open_flash));
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -856,7 +868,7 @@ public class LivePushRyViewHolder extends AbsRyLivePushViewHolder implements ITX
|
||||
public void startPush(String pushUrl) {
|
||||
//开播成功,创建频道
|
||||
if (swManager != null) {
|
||||
swManager.createRoom(SWManager.shengwang_token, SWManager.shengwang_channelName);
|
||||
swManager.createRoom(CommonAppConfig.SWToken, CommonAppConfig.getChannelName());
|
||||
}
|
||||
if (rcrtcLiveInfo != null) {
|
||||
rcrtcLiveInfo.addPublishStreamUrl(pushUrl, new IRCRTCResultDataCallback<String[]>() {
|
||||
|
@ -365,6 +365,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
|
||||
liveHandler.removeCallbacks(loadTimeoutRunnableGone);
|
||||
if (mLivePlayViewHolder == null) {
|
||||
mLivePlayViewHolder = new LivePlayRyViewHolder(mContext, playContainer, 1);
|
||||
mLivePlayViewHolder.initSwEngine(mLiveBean.getUid());
|
||||
mLiveRoomViewHolder = new LiveRoomViewHolder(false, 1, mContext, mContainer, mSecondPage.findViewById(R.id.gift_gif), mSecondPage.findViewById(R.id.gift_svga), mContainerWrap, mContext.getWindowManager());
|
||||
mLiveAudienceViewHolder = new LiveAudienceViewHolder(mContext, mContainer);
|
||||
mLiveLinkMicPresenter = new LiveLinkMicPresenter(mContext, mLivePlayViewHolder, false, mLiveSDK, mLiveAudienceViewHolder.getContentView());
|
||||
|
@ -1,37 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".activity.NewLiveActivity">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Start Video Call!"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/local_video_view_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@android:color/white" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/remote_video_view_container"
|
||||
android:layout_width="160dp"
|
||||
android:layout_height="160dp"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:background="@android:color/darker_gray"
|
||||
tools:ignore="MissingConstraints" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -2,23 +2,39 @@
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/root"
|
||||
android:animateLayoutChanges="true"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="match_parent"
|
||||
android:animateLayoutChanges="true">
|
||||
|
||||
|
||||
<com.google.android.exoplayer2.ui.StyledPlayerView
|
||||
android:id="@+id/video_view"
|
||||
android:layout_width="match_parent"
|
||||
app:surface_type="texture_view"
|
||||
app:use_controller="false"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone"
|
||||
android:layout_height="match_parent" />
|
||||
app:surface_type="texture_view"
|
||||
app:use_controller="false" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/playView"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
android:layout_height="300dp"
|
||||
android:layout_centerVertical="true"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/playView"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/playView1"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/leave"
|
||||
@ -78,18 +94,19 @@
|
||||
android:id="@+id/loading"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_marginTop="240dp"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginTop="240dp"
|
||||
android:indeterminateBehavior="repeat"
|
||||
android:indeterminateDrawable="@drawable/anim_loading"
|
||||
android:indeterminateOnly="true"
|
||||
android:visibility="invisible" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/loading2"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_marginTop="240dp"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginTop="240dp"
|
||||
android:indeterminateBehavior="repeat"
|
||||
android:indeterminateDrawable="@drawable/anim_loading"
|
||||
android:indeterminateOnly="true"
|
||||
|
@ -4,7 +4,6 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
@ -30,7 +29,6 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/camera_preview1"
|
||||
android:layout_width="wrap_content"
|
||||
@ -91,7 +89,6 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<FrameLayout
|
||||
@ -161,17 +158,20 @@
|
||||
android:id="@+id/pk_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="270dp"
|
||||
android:background="@color/red"
|
||||
android:layout_marginTop="130dp">
|
||||
|
||||
<com.yunbao.live.custom.MyFrameLayout4
|
||||
android:id="@+id/left_container"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/green"
|
||||
android:layout_marginBottom="20dp" />
|
||||
|
||||
<com.yunbao.live.custom.MyFrameLayout4
|
||||
android:id="@+id/right_container"
|
||||
android:layout_width="0dp"
|
||||
android:background="@color/gray1"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="right"
|
||||
android:layout_marginBottom="20dp" />
|
||||
@ -195,7 +195,6 @@
|
||||
android:textSize="13sp"
|
||||
android:visibility="gone" />
|
||||
|
||||
|
||||
<com.yunbao.live.custom.MyFrameLayout3
|
||||
android:id="@+id/small_container"
|
||||
android:layout_width="0dp"
|
||||
@ -205,7 +204,6 @@
|
||||
android:layout_marginBottom="120dp"
|
||||
app:mfl3_ratio="0.25" />
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/leave"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -54,7 +54,6 @@ import com.yunbao.common.utils.WordUtil;
|
||||
import com.yunbao.common.views.weight.ViewClicksAntiShake;
|
||||
import com.yunbao.common.http.LiveHttpUtil;
|
||||
import com.yunbao.common.utils.LiveRoomCheckLivePresenter;
|
||||
import com.yunbao.live.activity.NewLiveActivity;
|
||||
import com.yunbao.main.R;
|
||||
import com.yunbao.main.event.RegSuccessEvent;
|
||||
import com.yunbao.main.http.MainHttpConsts;
|
||||
|
@ -65,6 +65,7 @@ import com.yunbao.common.bean.ConfigBean;
|
||||
import com.yunbao.common.bean.IMLoginModel;
|
||||
import com.yunbao.common.bean.LiveBean;
|
||||
import com.yunbao.common.bean.LiveSvgGiftBean;
|
||||
import com.yunbao.common.bean.SwTokenModel;
|
||||
import com.yunbao.common.bean.UpdataListBean;
|
||||
import com.yunbao.common.bean.UserBean;
|
||||
import com.yunbao.common.custom.TabButtonGroup;
|
||||
@ -85,6 +86,7 @@ import com.yunbao.common.http.CommonHttpUtil;
|
||||
import com.yunbao.common.http.HttpCallback;
|
||||
import com.yunbao.common.http.LiveHttpConsts;
|
||||
import com.yunbao.common.http.LiveHttpUtil;
|
||||
import com.yunbao.common.http.live.LiveNetManager;
|
||||
import com.yunbao.common.http.main.MainNetManager;
|
||||
import com.yunbao.common.interfaces.CommonCallback;
|
||||
import com.yunbao.common.manager.APKManager;
|
||||
@ -96,6 +98,7 @@ import com.yunbao.common.utils.DialogUitl;
|
||||
import com.yunbao.common.utils.DpUtil;
|
||||
import com.yunbao.common.utils.GiftCacheUtil;
|
||||
import com.yunbao.common.utils.GoogleUtils;
|
||||
import com.yunbao.common.utils.L;
|
||||
import com.yunbao.common.utils.LiveRoomCheckLivePresenter;
|
||||
import com.yunbao.common.utils.LocationUtil;
|
||||
import com.yunbao.common.utils.ProcessResultUtil;
|
||||
@ -537,6 +540,22 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
|
||||
//获取指导员账号
|
||||
ConversationIMListManager.get(this).getUserInstructor(this);
|
||||
checkVersion();
|
||||
//获取声网Token
|
||||
getSwToken();
|
||||
}
|
||||
|
||||
private void getSwToken() {
|
||||
LiveNetManager.get(mContext).getSwToken(new com.yunbao.common.http.base.HttpCallback<SwTokenModel>() {
|
||||
@Override
|
||||
public void onSuccess(SwTokenModel data) {
|
||||
CommonAppConfig.SWToken = data.getToken();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String error) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@ -798,18 +817,17 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene
|
||||
|
||||
private void showStartDialog() {
|
||||
|
||||
if (isReady == true) {
|
||||
MainStartDialogFragment dialogFragment = new MainStartDialogFragment();
|
||||
dialogFragment.setMainStartChooseCallback(true, this);
|
||||
dialogFragment.show(getSupportFragmentManager(), "MainStartDialogFragment");
|
||||
} else {
|
||||
ToastUtil.show("正在初始化,請稍等....");
|
||||
}
|
||||
if (isReady == true) {
|
||||
MainStartDialogFragment dialogFragment = new MainStartDialogFragment();
|
||||
dialogFragment.setMainStartChooseCallback(true, this);
|
||||
dialogFragment.show(getSupportFragmentManager(), "MainStartDialogFragment");
|
||||
} else {
|
||||
ToastUtil.show("正在初始化,請稍等....");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 检查版本更新
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user