Browse Source

屏蔽对应成员声音

Steven 5 years ago
parent
commit
eb3df4acb9

+ 8 - 8
MusicGradeExam/MusicGradeExam/Define/PrefixHeader.pch

@@ -85,17 +85,17 @@
 
 //#ifdef DEBUG
 
-//#define hostURL (@"https://test.kj.colexiu.com")
-//#define SEALCLASSHOST (@"https://test.kj.colexiu.com/api-im")
-//#define WEBHOST (@"https://test.m.kj.colexiu.com")
-//#define JSPUSH_ENVIRONMENT (NO)
-//#define RCIM_KEY (@"8luwapkv84g3l")
-
-#define hostURL (@"http://192.168.3.28:8000")
-#define SEALCLASSHOST (@"http://192.168.3.28:8000/api-im")
+#define hostURL (@"https://test.kj.colexiu.com")
+#define SEALCLASSHOST (@"https://test.kj.colexiu.com/api-im")
 #define WEBHOST (@"https://test.m.kj.colexiu.com")
 #define JSPUSH_ENVIRONMENT (NO)
 #define RCIM_KEY (@"8luwapkv84g3l")
+
+//#define hostURL (@"http://192.168.3.28:8000")
+//#define SEALCLASSHOST (@"http://192.168.3.28:8000/api-im")
+//#define WEBHOST (@"https://test.m.kj.colexiu.com")
+//#define JSPUSH_ENVIRONMENT (NO)
+//#define RCIM_KEY (@"8luwapkv84g3l")
 //#else    // 线上
 
 //#define hostURL (@"https://online.dayaedu.com")

+ 8 - 0
MusicGradeExam/MusicGradeExam/UI/Classroom/Controller/ClassroomViewController.m

@@ -405,6 +405,14 @@
     }
 }
 
+// 不播放声音列表
+- (void)memberIgnoreAction:(RoomMember *)member {
+    NSLog(@"memberRecordAction %@", member);
+    NSString *shieldUserId = member.shieldUserId;
+    NSArray *memberArray = [shieldUserId componentsSeparatedByString:@","];
+    [[RTCService sharedInstance] unPlayRemoteUserAudioStream:memberArray];
+}
+
 - (void)errorDidOccur:(ErrorCode)code {
     NSLog(@"errorDidOccur %@",@(code));
     [self.hud hideAnimated:YES];

+ 1 - 0
MusicGradeExam/MusicGradeExam/UI/Classroom/Service/Classroom/ClassroomService.h

@@ -24,6 +24,7 @@ NS_ASSUME_NONNULL_BEGIN
 - (void)memberDidLeave:(RoomMember *)member;
 - (void)memberDidKick:(RoomMember *)member;
 - (void)memberRecordAction:(RoomMember *)member;
+- (void)memberIgnoreAction:(RoomMember *)member;
 //转让助教,助教收到的回调
 - (void)assistantDidTransfer:(RoomMember *)oldAssistant newAssistant:(RoomMember *)newAssistant;
 //除降级外其它角色变化

+ 11 - 10
MusicGradeExam/MusicGradeExam/UI/Classroom/Service/Classroom/ClassroomService.m

@@ -707,16 +707,11 @@
                 }
             }
         } else if(msg.action == MemberChangeActionKick) {
-//            if ([msg.userId isEqualToString:self.currentRoom.currentMember.userId]) {
-//                if ([self.classroomDelegate respondsToSelector:@selector(roomDidLeave)]) {
-//                    [self.classroomDelegate roomDidLeave];
-//                }
-//            } else {
-                RoomMember *mem = [self.currentRoom getMember:msg.userId];
-                if([self.classroomDelegate respondsToSelector:@selector(memberDidKick:)]) {
-                    [self.classroomDelegate memberDidKick:mem];
-                }
-//            }
+            
+            RoomMember *mem = [self.currentRoom getMember:msg.userId];
+            if([self.classroomDelegate respondsToSelector:@selector(memberDidKick:)]) {
+                [self.classroomDelegate memberDidKick:mem];
+            }
         }
         else if (msg.action == MemberChangeActionRecord) { // 去录制
             RoomMember *mem = [self.currentRoom getMember:msg.userId];
@@ -728,6 +723,12 @@
             
             [[NSNotificationCenter defaultCenter] postNotificationName:RefreshWaitListNotification object:nil];
         }
+        else if (msg.action == MemberChangeActionIgnore) { // 屏蔽声音列表
+            RoomMember *mem = [self.currentRoom getMember:msg.userId];
+            if ([self.classroomDelegate respondsToSelector:@selector(memberIgnoreAction:)]) {
+                [self.classroomDelegate memberIgnoreAction:mem];
+            }
+        }
     });
 }
 

+ 3 - 1
MusicGradeExam/MusicGradeExam/UI/Classroom/Service/Classroom/Message/MemberChangeMessage.h

@@ -21,7 +21,8 @@ typedef NS_ENUM(NSUInteger, MemberChangeAction) {
     MemberChangeActionRecord = 4,
     // 刷新排队列表
     MemberChangeActionRefresh = 5,
-    
+    // 用户不接收播放对应成员的声音
+    MemberChangeActionIgnore = 6,
 };
 
 /**
@@ -30,6 +31,7 @@ typedef NS_ENUM(NSUInteger, MemberChangeAction) {
  */
 @interface MemberChangeMessage : RCMessageContent
 @property (nonatomic, copy) NSString *userId;
+@property (nonatomic, copy) NSString *shieldUserId;
 @property (nonatomic, copy) NSString *userName;
 @property (nonatomic, assign) MemberChangeAction action;
 @property (nonatomic, assign) int role;

+ 1 - 0
MusicGradeExam/MusicGradeExam/UI/Classroom/Service/Classroom/Message/MemberChangeMessage.m

@@ -17,6 +17,7 @@
     NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
     if(dic) {
         self.userId = dic[@"userId"];
+        self.shieldUserId = dic[@"shieldUserId"];
         self.userName = dic[@"userName"];
         self.role = [dic[@"role"] intValue];
         self.action = [dic[@"action"] integerValue];

+ 1 - 0
MusicGradeExam/MusicGradeExam/UI/Classroom/Service/Classroom/Model/RoomMember.h

@@ -14,6 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
 @interface RoomMember : NSObject
 
 @property (nonatomic, copy)   NSString *userId;
+@property (nonatomic, copy)   NSString *shieldUserId;
 @property (nonatomic, copy)   NSString *name;
 @property (nonatomic, assign) long long joinTime;
 @property (nonatomic, assign) Role role;

+ 1 - 0
MusicGradeExam/MusicGradeExam/UI/Classroom/Service/Classroom/Model/RoomMember.m

@@ -20,6 +20,7 @@
     member.microphoneEnable = [dic[@"microphone"] boolValue];
     member.musicModeOn = [dic[@"musicModeOn"] boolValue];
     member.handUpOn = [dic[@"handUpOn"] boolValue];
+    member.shieldUserId = dic[@"shieldUserId"];
     NSDictionary *jsonDic = [dic dictionaryValueForKey:@"playMidiJson"];
     if (jsonDic) {
         member.customType = [jsonDic integerValueForKey:@"customType"];

+ 2 - 0
MusicGradeExam/MusicGradeExam/UI/Classroom/Service/RTCService/RTCService.h

@@ -155,6 +155,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 - (void)unPlayRemoteUserAudioStreamExcept:(NSString *)teacherId;
 
+- (void)unPlayRemoteUserAudioStream:(NSArray *)userIdArray;
+
 - (void)playAllRemoteUserAudioStream;
 
 #pragma mark - 顶部工具栏接口

+ 36 - 0
MusicGradeExam/MusicGradeExam/UI/Classroom/Service/RTCService/RTCService.m

@@ -254,6 +254,17 @@
         [self.rtcRoom subscribeAVStream:nil tinyStreams:remoteUser.remoteAVStreams completion:^(BOOL isSuccess, RongRTCCode desc) {
             if (isSuccess) {
                 [[KSRemoteUserManager shareInstance] addUser:remoteUser.userId];
+                RoomMember *curMember = [ClassroomService sharedService].currentRoom.currentMember;
+                NSString *shieldUserId = curMember.shieldUserId;
+                NSArray *memberIdArray = [shieldUserId componentsSeparatedByString:@","];
+                // 在屏蔽状态下,进入后订阅自动屏蔽对应成员声音
+                if ([memberIdArray containsObject:curMember.userId]) {
+                    for (RongRTCAVInputStream *stream in remoteUser.remoteAVStreams) {
+                        if (stream.streamType == RTCMediaTypeAudio) {
+                            stream.disable = YES;
+                        }
+                    }
+                }
             }
             NSLog(@"订阅流 %@ success:%@ code:%@",remoteUser.userId,@(isSuccess),@(desc));
         }];
@@ -346,6 +357,31 @@
     }
 }
 
+- (void)unPlayRemoteUserAudioStream:(NSArray *)userIdArray {
+    if(!self.rtcRoom) {
+        NSLog(@"尚未加入 rtc room,不能取消订阅音视频流");
+        return;
+    }
+    for (RongRTCRemoteUser *remoteUser in self.rtcRoom.remoteUsers) {
+        if ([[KSRemoteUserManager shareInstance] isContentUser:remoteUser.userId]) {
+            if ([userIdArray containsObject:remoteUser.userId]) { // 在屏蔽列表中的不播放
+                for (RongRTCAVInputStream *stream in remoteUser.remoteAVStreams) {
+                    if (stream.streamType == RTCMediaTypeAudio) {
+                        stream.disable = YES;
+                    }
+                }
+            }
+            else { // 不在列表中的播放
+                for (RongRTCAVInputStream *stream in remoteUser.remoteAVStreams) {
+                    if (stream.streamType == RTCMediaTypeAudio) {
+                        stream.disable = NO;
+                    }
+                }
+            }
+        }
+    }
+}
+
 - (void)playAllRemoteUserAudioStream {
     if(!self.rtcRoom) {
         NSLog(@"尚未加入 rtc room,不能取消订阅音视频流");