From 3cd40b9f9f5d1be65e59566603cfb40a2264fbf1 Mon Sep 17 00:00:00 2001 From: fuenmao <980740792@qq.com> Date: Tue, 3 Dec 2024 10:50:34 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=A7=86=E9=A2=91=E5=9F=BA=E7=A1=80=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/pages/metting/meeting_main_logic.dart | 111 +++++++++++++----- .../lib/pages/metting/meeting_main_view.dart | 3 + .../video/meeting_main_video_view.dart | 23 ++-- 3 files changed, 101 insertions(+), 36 deletions(-) diff --git a/wgshare/lib/pages/metting/meeting_main_logic.dart b/wgshare/lib/pages/metting/meeting_main_logic.dart index 46dc7d0..7f5a68a 100644 --- a/wgshare/lib/pages/metting/meeting_main_logic.dart +++ b/wgshare/lib/pages/metting/meeting_main_logic.dart @@ -6,7 +6,6 @@ import 'package:get/get.dart'; import 'package:signalr_core/signalr_core.dart'; import 'package:wgshare/common/store/user_store.dart'; import 'package:wgshare/utils/count_microphone_volume.dart'; -import 'package:wgshare/utils/storage.dart'; import '../../common/config/request_config.dart'; import '../../common/mixins/request_tool_mixin.dart'; import '../../common/models/common/base_structure_result.dart'; @@ -94,6 +93,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ void getMeetingRoomAllUser(List meetingRoomUsers) async { state.users.value = meetingRoomUsers; state.cacheUsers.value = meetingRoomUsers; + doHttpGetTvAnchor(); } /// 启动计时 @@ -172,28 +172,47 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ /// 设置视频是否打开 void setCameraOpen(bool isOpen){ - state.isOpenCamera.value = isOpen; - setEnableLocalVideo(isOpen); + if(isOpen == true){ + state.isOpenCamera.value = true; + setEnableVideo(); + setStartPreview(); + setClientRole("主播"); + changePageState(1); + }else{ + state.isOpenCamera.value = false; + setDisablePreview(); + } if(state.isOpenMicrophone.value == false){ setMicrophoneOpen(isOpen); } - if(isOpen == true){ - setClientRole("主播"); - changePageState(1); - doHttpGetTvAnchor(); - }else{ - changePageState(0); - } + doHttpSetCamer(); + } + + /// 挂断视频 + void hangUpVideo(){ + setDisableVideo(); + setDisablePreview(); + state.isOpenCamera.value = false; + changePageState(0); doHttpSetCamer(); } /// 获取当前全员观看视频主播 Future doHttpGetTvAnchor() async { BaseStructureResult res = await getClient().getTvAnchor(state.roomNumber.value); - if(res.data!.toString().length != 9){ - state.remoteUid.value = res.data!; + /*var s = 2; + // if(res.data!.toString().length != 9){ + if(s == 2){ + state.remoteUid.value = "18"; + setEnableVideo(); changePageState(1); - /*var isSaveLive = false; + + state.isOpenCamera.value = true; + setEnableVideo(); + setClientRole("主播"); + changePageState(1); + + *//*var isSaveLive = false; for(MeetingRoomUser mru in state.cacheUsers.value){ if(mru.uid == state.remoteUid.value){ isSaveLive = true; @@ -201,8 +220,14 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ } if(isSaveLive == true){ changePageState(1); - }*/ - } + }*//* + }*/ + Future.delayed(const Duration(milliseconds: 500), () { + state.remoteUid.value = "18"; + setEnableVideo(); + changePageState(1); + }); + } /// --------------------------signalR Socket相关 @@ -359,6 +384,31 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ } }); + /// 单独用户开闭摄像头回调 + state.hubConnection.value?.on("OperCamera", (e){ + // var jsonStr = const Utf8Decoder().convert(json.encode(e?[0]).runes.toList()); + var jsonStr = json.encode(e?[0]); + var listDynamic = jsonDecode(jsonStr); + MeetingRoomUser meetingRoomUser = MeetingRoomUser.fromJson(listDynamic); + if(meetingRoomUser.enableCamera == true){ + debugPrint("wgs输出===:Socket-单独用户开摄像头"); + for(MeetingRoomUser mru in state.cacheUsers.value){ + if(mru.uid == meetingRoomUser.uid){ + mru.enableCamera = true; + } + } + state.isOpenCamera.value = true; + }else{ + debugPrint("wgs输出===:Socket-单独用户闭摄像头"); + for(MeetingRoomUser mru in state.cacheUsers.value){ + if(mru.uid == meetingRoomUser.uid){ + mru.enableCamera = false; + } + } + state.isOpenCamera.value = false; + } + }); + /// 设置新的全员观看视频主播回调 state.hubConnection.value?.on("ShowUser", (e){ // var jsonStr = const Utf8Decoder().convert(json.encode(e).runes.toList()); @@ -571,19 +621,24 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{ } } - /// 设置是否启用视频模块 - Future setEnableLocalVideo(bool enabled) async { - if(enabled == true){ - // 启用视频模块 - await state.rctEngine.value?.enableVideo(); - // 启用本地预览 - await state.rctEngine.value?.startPreview(); - }else{ - // 关闭视频模块 - await state.rctEngine.value?.disableVideo(); - // 关闭本地预览 - await state.rctEngine.value?.stopPreview(); - } + /// 设置启用视频模块 + Future setEnableVideo() async { + await state.rctEngine.value?.enableVideo(); + } + + /// 设置关闭视频模块 + Future setDisableVideo() async { + await state.rctEngine.value?.disableVideo(); + } + + /// 设置启用本地预览 + Future setStartPreview() async { + await state.rctEngine.value?.startPreview(); + } + + /// 设置关闭本地预览 + Future setDisablePreview() async { + await state.rctEngine.value?.stopPreview(); } /// 切换前置/后置摄像头 diff --git a/wgshare/lib/pages/metting/meeting_main_view.dart b/wgshare/lib/pages/metting/meeting_main_view.dart index 867e37d..8626248 100644 --- a/wgshare/lib/pages/metting/meeting_main_view.dart +++ b/wgshare/lib/pages/metting/meeting_main_view.dart @@ -190,6 +190,9 @@ class MeetingMainPage extends StatelessWidget { channelId: state.roomNumber.value, isOpenCamera: state.isOpenCamera.value, remoteUid: state.remoteUid.value, + onHangUpTap: (){ + logic.hangUpVideo(); + }, ) : Container() ), diff --git a/wgshare/lib/pages/metting/video/meeting_main_video_view.dart b/wgshare/lib/pages/metting/video/meeting_main_video_view.dart index 2f1b8d6..5cdb25f 100644 --- a/wgshare/lib/pages/metting/video/meeting_main_video_view.dart +++ b/wgshare/lib/pages/metting/video/meeting_main_video_view.dart @@ -11,15 +11,17 @@ import 'meeting_main_video_state.dart'; class MeetingMainVideoComponent extends StatelessWidget { MeetingMainVideoComponent( {super.key, - required this.rtcEngine, - required this.channelId, - required this.isOpenCamera, - required this.remoteUid}); + required this.rtcEngine, + required this.channelId, + required this.isOpenCamera, + required this.remoteUid, + required this.onHangUpTap}); final RtcEngine rtcEngine; final String channelId; final String remoteUid; final bool isOpenCamera; + final Function onHangUpTap; final MeetingMainVideoLogic logic = Get.put(MeetingMainVideoLogic()); final MeetingMainVideoState state = Get.find().state; @@ -58,10 +60,15 @@ class MeetingMainVideoComponent extends StatelessWidget { : const CircularProgressIndicator(), Positioned( bottom: 110, - child: Image.asset( - 'assets/images/meeting_main_hang_up.png', - width: 50.w, - height: 50.h, + child: GestureDetector( + child: Image.asset( + 'assets/images/meeting_main_hang_up.png', + width: 50.w, + height: 50.h, + ), + onTap: (){ + onHangUpTap(); + }, ), ), Positioned(