Browse Source

test new design

Melon 2 years ago
parent
commit
d4a6f632cd

+ 11 - 16
example/lib/test_data.dart

@@ -32,7 +32,7 @@ class TestDataStruct {
     room.entered.addListener(onEntered);
     room.entered.addListener(onEntered);
     room.exited.addListener(onExited);
     room.exited.addListener(onExited);
 
 
-    room.initLocalMember(LocalMemberParams(
+    room.loadLocalMember(LocalMemberParams(
       userId: userId,
       userId: userId,
       userSig: userSig,
       userSig: userSig,
       extParams: {},
       extParams: {},
@@ -52,13 +52,13 @@ class TestDataStruct {
       resolution: Resolutions.sd_480p,
       resolution: Resolutions.sd_480p,
       frameRate: 15,
       frameRate: 15,
     ));
     ));
-    await publisher!.startLocal();
     localStarted = true;
     localStarted = true;
     update();
     update();
+    await publisher!.startLocal();
   }
   }
 
 
   Future<void> stopLocal() async {
   Future<void> stopLocal() async {
-    await publisher?.stopLocal();
+    await publisher!.stopLocal();
     localStarted = false;
     localStarted = false;
     update();
     update();
   }
   }
@@ -78,28 +78,23 @@ class TestDataStruct {
 
 
   void initPublisher() {
   void initPublisher() {
     publisher = room.createPublisher();
     publisher = room.createPublisher();
+    localChannel = publisher!.channels.first;
   }
   }
 
 
-  void onChannelAdded(Object s, IChannel channel) async {
-    if (channel is IPublishChannel) {
-      localChannel = channel;
-    } else {
-      remoteChannel = channel as IPlayChannel;
-      await remoteChannel!.play();
-    }
+  void onChannelAdded(Object s, IPlayChannel channel) async {
+    remoteChannel = channel;
+    await remoteChannel!.play();
     update();
     update();
   }
   }
 
 
-  void onChannelRemoved(Object s, IChannel channel) {
-    if (channel is IPublishChannel) {
-      localChannel = null;
-    } else {
-      remoteChannel = null;
-    }
+  void onChannelRemoved(Object s, IPlayChannel channel) {
+    remoteChannel?.stop();
+    remoteChannel = null;
     update();
     update();
   }
   }
 
 
   void onEntered(Object s, void e) {
   void onEntered(Object s, void e) {
+    // 创建播放器和推流器
     initPublisher();
     initPublisher();
     initPlayer();
     initPlayer();
     entered = true;
     entered = true;

+ 3 - 1
lib/base/channel.dart

@@ -9,7 +9,9 @@ abstract class BasePublishChannel extends BaseChannel
     implements IPublishChannel {
     implements IPublishChannel {
   bool _isPreviewing = false;
   bool _isPreviewing = false;
 
 
-  BasePublishChannel({required super.member});
+  BasePublishChannel({required super.member}) {
+    previewStateChanged = FEventHandler<bool>();
+  }
 
 
   @override
   @override
   late final FEventHandler<bool> previewStateChanged;
   late final FEventHandler<bool> previewStateChanged;

+ 6 - 0
lib/base/index.dart

@@ -0,0 +1,6 @@
+export 'capturer.dart';
+export 'channel.dart';
+export 'member.dart';
+export 'player.dart';
+export 'publisher.dart';
+export 'room.dart';

+ 5 - 2
lib/base/member.dart

@@ -9,7 +9,7 @@ import 'channel.dart';
 /// 本地成员
 /// 本地成员
 class LocalMember extends BaseMember {
 class LocalMember extends BaseMember {
   /// 参数
   /// 参数
-  final LocalMemberParams params;
+  final ILocalMemberParams params;
 
 
   LocalMember({required this.params});
   LocalMember({required this.params});
 
 
@@ -18,7 +18,7 @@ class LocalMember extends BaseMember {
 }
 }
 
 
 /// 本地成员参数
 /// 本地成员参数
-class LocalMemberParams {
+class LocalMemberParams implements ILocalMemberParams {
   final Map<String, dynamic> _params = {};
   final Map<String, dynamic> _params = {};
 
 
   /// 本地成员参数
   /// 本地成员参数
@@ -38,12 +38,15 @@ class LocalMemberParams {
   }
   }
 
 
   /// 用户ID
   /// 用户ID
+  @override
   String? get userId => _params['userId'];
   String? get userId => _params['userId'];
 
 
   /// 用户签名
   /// 用户签名
+  @override
   String? get userSig => _params['userSig'];
   String? get userSig => _params['userSig'];
 
 
   /// 获取参数值
   /// 获取参数值
+  @override
   dynamic getParam(String paramKey) {
   dynamic getParam(String paramKey) {
     return _params[paramKey];
     return _params[paramKey];
   }
   }

+ 2 - 1
lib/base/room.dart

@@ -62,7 +62,8 @@ abstract class BaseRoom implements IRoom {
     _remoteMembers.removeWhere((e) => e.id == memberId);
     _remoteMembers.removeWhere((e) => e.id == memberId);
   }
   }
 
 
-  void initLocalMember(LocalMemberParams params) {
+  @override
+  void loadLocalMember(ILocalMemberParams params) {
     _localMember = LocalMember(params: params);
     _localMember = LocalMember(params: params);
   }
   }
 
 

+ 1 - 0
lib/fis_lib_media_rt.dart

@@ -1,5 +1,6 @@
 library fis_lib_media_rt;
 library fis_lib_media_rt;
 
 
+export './base/index.dart';
 export './interface/index.dart';
 export './interface/index.dart';
 export './widgets/index.dart';
 export './widgets/index.dart';
 export 'config.dart';
 export 'config.dart';

+ 5 - 1
lib/implementations/trtc/publisher.dart

@@ -48,6 +48,11 @@ class TrtcPublisher extends BasePublisher with TrtcClientGetterMixin {
   Future<void> startLocal() async {
   Future<void> startLocal() async {
     try {
     try {
       // _buildPreviewChannel();
       // _buildPreviewChannel();
+      _channel!.isPreviewing = true;
+      if (_channel!.viewId > -1) {
+        await client.startLocalPreview(true, _channel!.viewId);
+        print('🎉Camera Preview Started');
+      }
       if (kIsWeb) {
       if (kIsWeb) {
         _trtcRoom.events.once(
         _trtcRoom.events.once(
           TRTCCloudListener.onStreamPublish,
           TRTCCloudListener.onStreamPublish,
@@ -62,7 +67,6 @@ class TrtcPublisher extends BasePublisher with TrtcClientGetterMixin {
       } else {
       } else {
         await client.startLocalAudio(quality);
         await client.startLocalAudio(quality);
       }
       }
-      _channel!.isPreviewing = true;
     } catch (e) {
     } catch (e) {
       logger.e("[TrtcPublisher] start local preview error", e);
       logger.e("[TrtcPublisher] start local preview error", e);
     }
     }

+ 1 - 1
lib/implementations/trtc/widgets/preview_view.dart

@@ -61,7 +61,7 @@ class _TrtcPreviewViewState extends State<TrtcPreviewView>
   }
   }
 
 
   Widget _buildLive(int width, int height) {
   Widget _buildLive(int width, int height) {
-    final member = widget.channel.member as TrtcLocalMember;
+    final member = widget.channel.member as LocalMember;
     final userId = member.params.userId!;
     final userId = member.params.userId!;
     return TRTCCloudVideoView(
     return TRTCCloudVideoView(
       viewType: TRTCCloudDef.TRTC_VideoView_TextureView,
       viewType: TRTCCloudDef.TRTC_VideoView_TextureView,

+ 12 - 0
lib/interface/member.dart

@@ -8,3 +8,15 @@ abstract class IMember {
   /// 成员类型
   /// 成员类型
   MemberRoleType get roleType;
   MemberRoleType get roleType;
 }
 }
+
+/// 本地成员参数
+abstract class ILocalMemberParams {
+  /// 用户ID
+  String? get userId;
+
+  /// 用户签名
+  String? get userSig;
+
+  /// 获取参数值
+  dynamic getParam(String paramKey);
+}

+ 3 - 0
lib/interface/room.dart

@@ -35,6 +35,9 @@ abstract class IRoom {
   /// 错误发送事件
   /// 错误发送事件
   late final FEventHandler<Object> errorOccurred;
   late final FEventHandler<Object> errorOccurred;
 
 
+  /// 装载本地成员
+  void loadLocalMember(ILocalMemberParams params);
+
   /// 进入房间
   /// 进入房间
   Future<void> enter();
   Future<void> enter();