public static GenerateTestUserSig GetInstance() { if (mInstance == null) { mInstance = new GenerateTestUserSig(); } return(mInstance); }
private void JoinBtn_Click(object sender, RoutedEventArgs e) { if (GenerateTestUserSig.SDKAPPID == 0) { ShowMessage("Error: 请先在 GenerateTestUserSig 填写 sdkappid 信息"); return; } string userId = this.userTextBox.Text; string roomId = this.roomTextBox.Text; if (string.IsNullOrEmpty(userId) || string.IsNullOrEmpty(roomId)) { ShowMessage("房间号或用户号不能为空!"); return; } DataManager.GetInstance().userId = userId; DataManager.GetInstance().roomId = uint.Parse(roomId); // 从本地计算获取 userId 对应的 userSig // 注意!本地计算是适合在本地环境下调试使用,正确的做法是将 UserSig 的计算代码和加密密钥放在您的业务服务器上, // 然后由 App 按需向您的服务器获取实时算出的 UserSig。 // 由于破解服务器的成本要高于破解客户端 App,所以服务器计算的方案能够更好地保护您的加密密钥。 string userSig = GenerateTestUserSig.GetInstance().GenTestUserSig(userId); if (string.IsNullOrEmpty(userSig)) { ShowMessage("userSig 获取失败,请检查是否填写账号信息!"); return; } MainWindow mainWindow = new MainWindow(); mainWindow.Show(); mainWindow.EnterRoom(); this.Close(); }
public void EnterRoom() { // 设置进房所需的相关参数 TRTCParams trtcParams = new TRTCParams(); trtcParams.sdkAppId = GenerateTestUserSig.SDKAPPID; trtcParams.roomId = DataManager.GetInstance().roomId; trtcParams.userId = DataManager.GetInstance().userId; trtcParams.userSig = GenerateTestUserSig.GetInstance().GenTestUserSig(DataManager.GetInstance().userId); // 如果您有进房权限保护的需求,则参考文档{https://cloud.tencent.com/document/product/647/32240}完成该功能。 // 在有权限进房的用户中的下面字段中添加在服务器获取到的privateMapKey。 trtcParams.privateMapKey = ""; trtcParams.businessInfo = ""; trtcParams.role = DataManager.GetInstance().roleType; // 若您的项目有纯音频的旁路直播需求,请配置参数。 // 配置该参数后,音频达到服务器,即开始自动旁路; // 否则无此参数,旁路在收到第一个视频帧之前,会将收到的音频包丢弃。 if (DataManager.GetInstance().pureAudioStyle) { trtcParams.businessInfo = "{\"Str_uc_params\":{\"pure_audio_push_mod\": 1}}"; } else { trtcParams.businessInfo = ""; } // 用户进房 mTRTCCloud.enterRoom(ref trtcParams, DataManager.GetInstance().appScene); // 设置默认参数配置 TRTCVideoEncParam encParams = DataManager.GetInstance().videoEncParams; // 视频编码参数设置 TRTCNetworkQosParam qosParams = DataManager.GetInstance().qosParams; // 网络流控相关参数设置 mTRTCCloud.setVideoEncoderParam(ref encParams); mTRTCCloud.setNetworkQosParam(ref qosParams); mTRTCCloud.setLocalViewFillMode(DataManager.GetInstance().videoFillMode); mTRTCCloud.setLocalViewMirror(DataManager.GetInstance().isLocalVideoMirror); mTRTCCloud.setLocalViewRotation(DataManager.GetInstance().videoRotation); mTRTCCloud.setVideoEncoderMirror(DataManager.GetInstance().isRemoteVideoMirror); // 设置美颜 if (DataManager.GetInstance().isOpenBeauty) { mTRTCCloud.setBeautyStyle(DataManager.GetInstance().beautyStyle, DataManager.GetInstance().beauty, DataManager.GetInstance().white, DataManager.GetInstance().ruddiness); } // 设置大小流 if (DataManager.GetInstance().pushSmallVideo) { TRTCVideoEncParam param = new TRTCVideoEncParam { videoFps = 15, videoBitrate = 100, videoResolution = TRTCVideoResolution.TRTCVideoResolution_320_240 }; mTRTCCloud.enableSmallVideoStream(true, ref param); } if (DataManager.GetInstance().playSmallVideo) { mTRTCCloud.setPriorRemoteVideoStreamType(TRTCVideoStreamType.TRTCVideoStreamTypeSmall); } // 房间信息 mUserId = trtcParams.userId; mRoomId = trtcParams.roomId; this.infoLabel.Content = "房间号:" + mRoomId; // 本地主流自定义渲染 View 动态绑定和监听 SDK 渲染回调 mTRTCCloud.startLocalPreview(IntPtr.Zero); AddCustomVideoView(this.videoContainer, mUserId, TRTCVideoStreamType.TRTCVideoStreamTypeBig, true); mTRTCCloud.startLocalAudio(); }