1.视频基础逻辑
This commit is contained in:
parent
86724ced8f
commit
3cd40b9f9f
|
|
@ -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<MeetingRoomUser> 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<void> 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<void> 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<void> setEnableVideo() async {
|
||||
await state.rctEngine.value?.enableVideo();
|
||||
}
|
||||
|
||||
/// 设置关闭视频模块
|
||||
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();
|
||||
}
|
||||
|
||||
/// 切换前置/后置摄像头
|
||||
|
|
|
|||
|
|
@ -190,6 +190,9 @@ class MeetingMainPage extends StatelessWidget {
|
|||
channelId: state.roomNumber.value,
|
||||
isOpenCamera: state.isOpenCamera.value,
|
||||
remoteUid: state.remoteUid.value,
|
||||
onHangUpTap: (){
|
||||
logic.hangUpVideo();
|
||||
},
|
||||
)
|
||||
: Container()
|
||||
),
|
||||
|
|
|
|||
|
|
@ -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<MeetingMainVideoLogic>().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(
|
||||
|
|
|
|||
Loading…
Reference in New Issue