소스 검색

add(desc): 尝试修正会诊失败

gavin.chen 8 달 전
부모
커밋
9c4fc98f3a
4개의 변경된 파일49개의 추가작업 그리고 1개의 파일을 삭제
  1. 2 0
      lib/base/room.dart
  2. 1 0
      lib/implementations/trtc/events.dart
  3. 24 1
      lib/implementations/trtc/player.dart
  4. 22 0
      lib/implementations/trtc/room.dart

+ 2 - 0
lib/base/room.dart

@@ -73,12 +73,14 @@ abstract class BaseRoom implements IRoom {
 
   @protected
   bool addMember(RemoteMember member) {
+    // print("DEBUG:TRTC 触发 addMember ${member.userId}");
     if (member.userId != null &&
         _remoteMembers.any((e) => e.userId == member.userId)) {
       // 存在相同UserId成员
       return false;
     }
     _remoteMembers.add(member);
+    // print("DEBUG:TRTC 触发 _remoteMembers.add 成功 ${member.userId}");
     return true;
   }
 

+ 1 - 0
lib/implementations/trtc/events.dart

@@ -30,6 +30,7 @@ class TrtcEvents {
 
   void dispose() {
     room.trtcClient.unRegisterListener(_onEvents);
+    // print("DEBUG:TRTC room.trtcClient.unRegisterListener 事件销毁");
   }
 
   void _onEvents(TRTCCloudListener type, dynamic param) {

+ 24 - 1
lib/implementations/trtc/player.dart

@@ -31,11 +31,25 @@ class TrtcPlayer extends BasePlayer with TrtcClientGetterMixin {
   void _onUserVideoAvailable(dynamic param) {
     final String userId = param['userId'];
     final bool available = param['available'];
-
+    // print(
+    //     "DEBUG:TRTC 获取到 TRTC 用户视频可用性变化:$userId, $available events: ${(room as TrtcRoom).events.hashCode}");
     final member = _findMemberByUserId(userId);
     member?.handleVideoAvailableChange(available);
   }
 
+  void checkExistedMembers() {
+    // print("DEBUG:TRTC 开始检查已存在的成员");
+    for (var member in room.remoteMembers) {
+      // print(
+      //     "DEBUG:TRTC 检查已存在的成员:${member.userId} ${member.channels} events: ${(room as TrtcRoom).events.hashCode}");
+      if (member.userId != null && member.userId!.isNotEmpty) {
+        // print("DEBUG:TRTC 强行设置为可用 ${member.userId}");
+        final newMember = _findMemberByUserId(member.userId!);
+        newMember?.handleVideoAvailableChange(true);
+      }
+    }
+  }
+
   void _onUserAudioAvailable(dynamic param) {
     final String userId = param['userId'];
     final bool available = param['available'];
@@ -52,4 +66,13 @@ class TrtcPlayer extends BasePlayer with TrtcClientGetterMixin {
     }
     return null;
   }
+
+  void dispose() {
+    (room as TrtcRoom)
+        .events
+        .off(TRTCCloudListener.onUserVideoAvailable, _onUserVideoAvailable);
+    (room as TrtcRoom)
+        .events
+        .off(TRTCCloudListener.onUserAudioAvailable, _onUserAudioAvailable);
+  }
 }

+ 22 - 0
lib/implementations/trtc/room.dart

@@ -52,6 +52,11 @@ class TrtcRoom extends BaseRoom {
   @override
   Future<void> exit() async {
     try {
+      while (remoteMembers.isNotEmpty) {
+        removeMemberAt(0);
+      }
+      _player?.dispose();
+      _removeEvents();
       events.dispose();
       // await _client!.exitRoom();
       _client = null;
@@ -61,6 +66,12 @@ class TrtcRoom extends BaseRoom {
       });
     } catch (e) {
       // TODO: log
+      print("DEBUG:TRTC exit error $e");
+      try {
+        await TRTCCloud.destroySharedInstance();
+      } catch (e) {
+        print("DEBUG:TRTC destroySharedInstance error $e");
+      }
     }
   }
 
@@ -107,6 +118,15 @@ class TrtcRoom extends BaseRoom {
     events.on(TRTCCloudListener.onUserSubStreamAvailable, _subStreamAvailable);
   }
 
+  void _removeEvents() {
+    events.off(TRTCCloudListener.onError, _onError);
+    events.off(TRTCCloudListener.onWarning, _onWarning);
+    events.off(TRTCCloudListener.onRemoteUserEnterRoom, _onRemoteUserEnter);
+    events.off(TRTCCloudListener.onRemoteUserLeaveRoom, _onRemoteUserLeave);
+    events.off(TRTCCloudListener.onFirstVideoFrame, _onFirstVideoFrame);
+    events.off(TRTCCloudListener.onUserSubStreamAvailable, _subStreamAvailable);
+  }
+
   void _onError(dynamic param) {
     print(param); // TODO:
   }
@@ -120,6 +140,8 @@ class TrtcRoom extends BaseRoom {
     //TODO: remove print
     print(
         "!!!!!!!_onRemoteUserEnter local-${localMember.params.userId} remote-$param");
+    print(
+        "DEBUG:TRTC 获取到 TRTC 远程用户加入 local-${localMember.params.userId} remote-$param  events: ${events.hashCode}");
     final member = TrtcRemoteMember(userId: param);
     addMember(member);
     memberJoined.emit(this, member);