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{
changePageState(0);
} }
///
void hangUpVideo(){
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();
}else{
//
await state.rctEngine.value?.disableVideo();
//
await state.rctEngine.value?.stopPreview();
} }
///
Future<void> setDisableVideo() async {
await state.rctEngine.value?.disableVideo();
}
///
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

@ -14,12 +14,14 @@ class MeetingMainVideoComponent extends StatelessWidget {
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,11 +60,16 @@ class MeetingMainVideoComponent extends StatelessWidget {
: const CircularProgressIndicator(), : const CircularProgressIndicator(),
Positioned( Positioned(
bottom: 110, bottom: 110,
child: GestureDetector(
child: Image.asset( child: Image.asset(
'assets/images/meeting_main_hang_up.png', 'assets/images/meeting_main_hang_up.png',
width: 50.w, width: 50.w,
height: 50.h, height: 50.h,
), ),
onTap: (){
onHangUpTap();
},
),
), ),
Positioned( Positioned(
top: 16, top: 16,