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: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();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 切换前置/后置摄像头
|
/// 切换前置/后置摄像头
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue