mmoo_live_room 1.0.0+2 copy "mmoo_live_room: ^1.0.0+2" to clipboard
mmoo_live_room: ^1.0.0+2 copied to clipboard

outdated

A new flutter plugin project.

mmoo_live_room #

接入 #

flutter main.dart

  1. init emclient
  2. prociders add ProviderLiveConfig.prividers
  3. localizationsDelegates add Lives.S.delegate
  4. route add PageLiveRoot

安卓添加相册 相机 麦克风权限

安卓工程 #

andorid-> add video-capture settings.gradle add

include ':app','video-capture'

ios podfile工程添加 #


 post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      # Here are some configurations automatically generated by flutter

      # You can enable the permissions needed here. For example to enable camera
      # permission, just remove the `#` character in front so it looks like this:

      # ## dart: PermissionGroup.camera
      # 'PERMISSION_CAMERA=1'
      #  Preprocessor definitions can be found in: https://github.com/Baseflow/flutter-permission-handler/blob/master/permission_handler/ios/Classes/PermissionHandlerEnums.h
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
        '$(inherited)',

        ## dart: PermissionGroup.calendar
        # 'PERMISSION_EVENTS=1',

        ## dart: PermissionGroup.reminders
        # 'PERMISSION_REMINDERS=1',

        ## dart: PermissionGroup.contacts
        # 'PERMISSION_CONTACTS=1',

        # dart: PermissionGroup.camera
        'PERMISSION_CAMERA=1',

        # dart: PermissionGroup.microphone
        'PERMISSION_MICROPHONE=1',

        ## dart: PermissionGroup.speech
        # 'PERMISSION_SPEECH_RECOGNIZER=1',

        # dart: PermissionGroup.photos
        'PERMISSION_PHOTOS=1',

        ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
        # 'PERMISSION_LOCATION=1',

        # dart: PermissionGroup.notification
        'PERMISSION_NOTIFICATIONS=1',

        ## dart: PermissionGroup.mediaLibrary
        # 'PERMISSION_MEDIA_LIBRARY=1',

        ## dart: PermissionGroup.sensors
        # 'PERMISSION_SENSORS=1',   

        ## dart: PermissionGroup.bluetooth
        # 'PERMISSION_BLUETOOTH=1',

        ## dart: PermissionGroup.appTrackingTransparency
        # 'PERMISSION_APP_TRACKING_TRANSPARENCY=1',

        ## dart: PermissionGroup.criticalAlerts
        # 'PERMISSION_CRITICAL_ALERTS=1'
      ]

    end
  end
end

关于启动后台配置 #

wiki管理后台 配置说明 需要配置 LiveOpenType

关于接听通话,未读消息更新及更新money #

1.接听通话

需要先退出直播间 之后再进入接听电话逻辑

await ConfigLiveGlobalkey.liveRtcKey.currentState
                    ?.userExitRoom();

2.未读消息

在进入live模块 给一个GlobalKey

void onUnReadCount() async {
    try {
      int? unread =
          await EMClient.getInstance.chatManager.getUnreadMessageCount();
      liveRootKey.currentState?.updataUnReadMessags(unread ?? 0);
    } catch (e) {}
  }

3.更新money

在进入live模块 接收RechargeEvent

  subscription = eventBusBig.on<RechargeEvent>().listen((event) {
    liveRootKey.currentState
        ?.updataUserInfo(money: int.parse(event.money ?? '0'));
  });

4.关于LiveMethonDelegate

(1). showLiveReportPage 打开举报页面

(2). openIMMessageListPage 打开消息列表

(3). showRechargeblePage 打开充值页面

(4). showLiveIMChatPage(String userId) 打开充值页面

(5). showLiveCallVideoPage(String userId) 开始播放视频通话

(6). blackUserMoney(String money) 向外更新money余额

(7). setImSocketMessageHandler(LiveSocketEventHandler handler) 设置环信imhandler 设置了之后 直播间才有im链接能力 在环信onMessagesReceived回调中

 @override
void onMessagesReceived(List<EMMessage> messages) {
  if (_liveSocketEventHandler != null) {
    messages
        .where((element) => element.chatType == EMMessageChatType.ChatRoom)
        .toList()
        .forEach((element) {
      _liveSocketEventHandler?.onMessageReceived(element);
    });
  }
  List<EMMessage> chatMessages = messages
      .where((element) => element.chatType != EMMessageChatType.ChatRoom)
      .toList();
  if (chatMessages.isNotEmpty) {
    imPluginDelegateList.forEach((element) {
      element.onMessageReceived(messages);
    });
    // _onImLivePluginDelegate?.onMessageReceived(messages);
  }
}

在环信onCmdMessagesReceived回调中

  if (_liveSocketEventHandler != null) {
    messages
        .where((element) {
          if (element.body is EMCmdMessageBody) {
            EMCmdMessageBody cmdMessageBody =
                element.body as EMCmdMessageBody;
            if (cmdMessageBody.action == 'live') {
              return true;
            }
          }
          return false;
        })
        .toList()
        .forEach((element) {
          _liveSocketEventHandler?.onMessageReceived(element);
        });
  }

(8). setOnConnection(OnImLivePluginDelegate delegate) 设置im 在线状态回调

  1. pubspec.yaml 添加 ''' mmoo_live_room: git:
    url: https://gitee.com/mimo_1/mmoo-live-room.git ref: <最新版>'''

  2. 修改mmoo_base_video 里面的 美颜版本

  3. LoneMainPageLy 添加直播列表tabbar

  4. MainDao.initConfig 添加 LiveOpenType BEKEY

  5. LoneVideoUtilLy 添加直播代码 详见代码


 @override
 void onMessagesReceived(List<EMMessage> messages) {
   if (_liveSocketEventHandler != null) {
     messages
         .where((element) => element.chatType == EMMessageChatType.ChatRoom)
         .toList()
         .forEach((element) {
       _liveSocketEventHandler?.onMessageReceived(element);
     });
   }
   List<EMMessage> chatMessages = messages
       .where((element) => element.chatType != EMMessageChatType.ChatRoom)
       .toList();
   if (chatMessages.isNotEmpty) {
     imPluginDelegateList.forEach((element) {
       element.onLoneMessageReceivedLy(messages);
     });
   }
 }

 @override
 void onCmdMessagesReceived(List<EMMessage> messages) {
   AppConfig.printLog('onCmdMessagesReceived');
   if (_liveSocketEventHandler != null) {
     messages
         .where((element) {
           if (element.body is EMCmdMessageBody) {
             EMCmdMessageBody cmdMessageBody =
                 element.body as EMCmdMessageBody;
             if (cmdMessageBody.action == 'live') {
               return true;
             }
           }
           return false;
         })
         .toList()
         .forEach((element) {
           _liveSocketEventHandler?.onMessageReceived(element);
         });
   }
   return super.onCmdMessagesReceived(messages);
 }
  1. requestLoneVideoPermissionLy 函数 添加
await ConfigLiveGlobalkey.liveRtcKey.currentState?.userExitRoom();
     CommonUtils.dismiss();
  1. 在欢迎页添加
Future initialization() async {
   CommonUtils.toast = ((msg) {
     LoneCommonUtilLy.showErrorToastLy(LoneRouterLy.context, res: msg);
   });
   CommonUtils.toastDismiss = (() {
     if (RechargeUtils.instance.showLoading == true) {
       Navigator.pop(context);
     }
   });
   CommonUtils.toastLoad = ((status) {
     if (RechargeUtils.instance.showLoading == false) {
       LoneCommonUtilLy.showLoneLoadingDialogLy(context, text: status);
     }
   });
 }
  1. 添加充值成功回调 然后更新
liveRootKey.currentState?.updataUserInfo(money: int.parse((event.money ?? '0'))); ventBusLone.on<LoneRechargeEventLy>().listen((event) 
  1. main.dart 添加 prividers.addAll(ProviderLiveConfig.prividers); 及LiveS.S.delegate,

  2. 添加在直播间内接收到通话邀请的提示 onLoneReceivedByPeerLy 添加样式判断

  3. goUserPage 添加 goLivePage