1.视频基础逻辑

This commit is contained in:
fuenmao 2024-12-03 10:50:34 +08:00
parent 86724ced8f
commit 3cd40b9f9f
3 changed files with 101 additions and 36 deletions

View File

@ -6,7 +6,6 @@ import 'package:get/get.dart';
import 'package:signalr_core/signalr_core.dart'; import 'package:signalr_core/signalr_core.dart';
import 'package:wgshare/common/store/user_store.dart'; import 'package:wgshare/common/store/user_store.dart';
import 'package:wgshare/utils/count_microphone_volume.dart'; import 'package:wgshare/utils/count_microphone_volume.dart';
import 'package:wgshare/utils/storage.dart';
import '../../common/config/request_config.dart'; import '../../common/config/request_config.dart';
import '../../common/mixins/request_tool_mixin.dart'; import '../../common/mixins/request_tool_mixin.dart';
import '../../common/models/common/base_structure_result.dart'; import '../../common/models/common/base_structure_result.dart';
@ -94,6 +93,7 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
void getMeetingRoomAllUser(List<MeetingRoomUser> meetingRoomUsers) async { void getMeetingRoomAllUser(List<MeetingRoomUser> meetingRoomUsers) async {
state.users.value = meetingRoomUsers; state.users.value = meetingRoomUsers;
state.cacheUsers.value = meetingRoomUsers; state.cacheUsers.value = meetingRoomUsers;
doHttpGetTvAnchor();
} }
/// ///
@ -172,28 +172,47 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
/// ///
void setCameraOpen(bool isOpen){ void setCameraOpen(bool isOpen){
state.isOpenCamera.value = isOpen; if(isOpen == true){
setEnableLocalVideo(isOpen); state.isOpenCamera.value = true;
setEnableVideo();
setStartPreview();
setClientRole("主播");
changePageState(1);
}else{
state.isOpenCamera.value = false;
setDisablePreview();
}
if(state.isOpenMicrophone.value == false){ if(state.isOpenMicrophone.value == false){
setMicrophoneOpen(isOpen); setMicrophoneOpen(isOpen);
} }
if(isOpen == true){ doHttpSetCamer();
setClientRole("主播"); }
changePageState(1);
doHttpGetTvAnchor(); ///
}else{ void hangUpVideo(){
changePageState(0); setDisableVideo();
} setDisablePreview();
state.isOpenCamera.value = false;
changePageState(0);
doHttpSetCamer(); doHttpSetCamer();
} }
/// ///
Future<void> doHttpGetTvAnchor() async { Future<void> doHttpGetTvAnchor() async {
BaseStructureResult res = await getClient().getTvAnchor(state.roomNumber.value); BaseStructureResult res = await getClient().getTvAnchor(state.roomNumber.value);
if(res.data!.toString().length != 9){ /*var s = 2;
state.remoteUid.value = res.data!; // if(res.data!.toString().length != 9){
if(s == 2){
state.remoteUid.value = "18";
setEnableVideo();
changePageState(1); changePageState(1);
/*var isSaveLive = false;
state.isOpenCamera.value = true;
setEnableVideo();
setClientRole("主播");
changePageState(1);
*//*var isSaveLive = false;
for(MeetingRoomUser mru in state.cacheUsers.value){ for(MeetingRoomUser mru in state.cacheUsers.value){
if(mru.uid == state.remoteUid.value){ if(mru.uid == state.remoteUid.value){
isSaveLive = true; isSaveLive = true;
@ -201,8 +220,14 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
} }
if(isSaveLive == true){ if(isSaveLive == true){
changePageState(1); changePageState(1);
}*/ }*//*
} }*/
Future.delayed(const Duration(milliseconds: 500), () {
state.remoteUid.value = "18";
setEnableVideo();
changePageState(1);
});
} }
/// --------------------------signalR Socket相关 /// --------------------------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){ state.hubConnection.value?.on("ShowUser", (e){
// var jsonStr = const Utf8Decoder().convert(json.encode(e).runes.toList()); // var jsonStr = const Utf8Decoder().convert(json.encode(e).runes.toList());
@ -571,19 +621,24 @@ class MeetingMainLogic extends GetxController with RequestToolMixin{
} }
} }
/// ///
Future<void> setEnableLocalVideo(bool enabled) async { Future<void> setEnableVideo() async {
if(enabled == true){ await state.rctEngine.value?.enableVideo();
// }
await state.rctEngine.value?.enableVideo();
// ///
await state.rctEngine.value?.startPreview(); Future<void> setDisableVideo() async {
}else{ await state.rctEngine.value?.disableVideo();
// }
await state.rctEngine.value?.disableVideo();
// ///
await state.rctEngine.value?.stopPreview(); Future<void> setStartPreview() async {
} await state.rctEngine.value?.startPreview();
}
///
Future<void> setDisablePreview() async {
await state.rctEngine.value?.stopPreview();
} }
/// / /// /

View File

@ -190,6 +190,9 @@ class MeetingMainPage extends StatelessWidget {
channelId: state.roomNumber.value, channelId: state.roomNumber.value,
isOpenCamera: state.isOpenCamera.value, isOpenCamera: state.isOpenCamera.value,
remoteUid: state.remoteUid.value, remoteUid: state.remoteUid.value,
onHangUpTap: (){
logic.hangUpVideo();
},
) )
: Container() : Container()
), ),

View File

@ -11,15 +11,17 @@ import 'meeting_main_video_state.dart';
class MeetingMainVideoComponent extends StatelessWidget { class MeetingMainVideoComponent extends StatelessWidget {
MeetingMainVideoComponent( MeetingMainVideoComponent(
{super.key, {super.key,
required this.rtcEngine, required this.rtcEngine,
required this.channelId, required this.channelId,
required this.isOpenCamera, required this.isOpenCamera,
required this.remoteUid}); required this.remoteUid,
required this.onHangUpTap});
final RtcEngine rtcEngine; final RtcEngine rtcEngine;
final String channelId; final String channelId;
final String remoteUid; final String remoteUid;
final bool isOpenCamera; final bool isOpenCamera;
final Function onHangUpTap;
final MeetingMainVideoLogic logic = Get.put(MeetingMainVideoLogic()); final MeetingMainVideoLogic logic = Get.put(MeetingMainVideoLogic());
final MeetingMainVideoState state = Get.find<MeetingMainVideoLogic>().state; final MeetingMainVideoState state = Get.find<MeetingMainVideoLogic>().state;
@ -58,10 +60,15 @@ class MeetingMainVideoComponent extends StatelessWidget {
: const CircularProgressIndicator(), : const CircularProgressIndicator(),
Positioned( Positioned(
bottom: 110, bottom: 110,
child: Image.asset( child: GestureDetector(
'assets/images/meeting_main_hang_up.png', child: Image.asset(
width: 50.w, 'assets/images/meeting_main_hang_up.png',
height: 50.h, width: 50.w,
height: 50.h,
),
onTap: (){
onHangUpTap();
},
), ),
), ),
Positioned( Positioned(