TXFullVideoCell.m 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. //
  2. // TXFullVideoCell.m
  3. // TeacherDaya
  4. //
  5. // Created by 王智 on 2023/4/14.
  6. // Copyright © 2023 DayaMusic. All rights reserved.
  7. //
  8. #import "TXFullVideoCell.h"
  9. #import "ClassroomService.h"
  10. #import "LocalRenderManager.h"
  11. #import "TXRTCService.h"
  12. @interface TXFullVideoCell ()
  13. @property (weak, nonatomic) IBOutlet UIView *mineView;
  14. @property (nonatomic, strong) NSString *displayUserId;
  15. @property (weak, nonatomic) IBOutlet UIView *videoContainer;
  16. @property (weak, nonatomic) IBOutlet UIView *bottomView;
  17. @property (weak, nonatomic) IBOutlet UIView *backGroundView;
  18. @property (weak, nonatomic) IBOutlet UILabel *nameLabel;
  19. @property (weak, nonatomic) IBOutlet UIImageView *micStatus;
  20. @property (weak, nonatomic) IBOutlet UIImageView *qualityImage;
  21. @property (nonatomic, strong) UIView *closeCameraView;
  22. @property (nonatomic, strong) UIImageView *avatarView;
  23. @end
  24. @implementation TXFullVideoCell
  25. - (void)awakeFromNib {
  26. [super awakeFromNib];
  27. // Initialization code
  28. if (![self.backGroundView.subviews containsObject:self.videoView]) {
  29. [self.backGroundView addSubview:self.videoView];
  30. }
  31. self.mineView.layer.cornerRadius = 10;
  32. self.mineView.layer.maskedCorners = kCALayerMinXMaxYCorner;
  33. // UIView createGradientLayerFromColor:<#(nonnull UIColor *)#> startPoint:<#(CGPoint)#> endColor:<#(nonnull UIColor *)#> endPoint:<#(CGPoint)#> bounds:<#(CGRect)#>
  34. }
  35. - (instancetype)initWithCoder:(NSCoder *)coder {
  36. self = [super initWithCoder:coder];
  37. if (self) {
  38. }
  39. return self;
  40. }
  41. - (void)setCellSize:(CGSize)cellSize {
  42. _cellSize = cellSize;
  43. [self.videoView mas_remakeConstraints:^(MASConstraintMaker *make) {
  44. make.left.right.top.bottom.mas_equalTo(self);
  45. }];
  46. // 添加背景图
  47. [self.videoView addSubview:self.closeCameraView];
  48. [self.closeCameraView mas_remakeConstraints:^(MASConstraintMaker *make) {
  49. make.left.mas_equalTo(self.videoView.mas_left);
  50. make.top.mas_equalTo(self.videoView.mas_top);
  51. make.bottom.mas_equalTo(self.videoView.mas_bottom);
  52. make.right.mas_equalTo(self.videoView.mas_right);
  53. }];
  54. }
  55. - (void)setModel:(RoomMember *)member displayUserId:(NSString *)displayUserId {
  56. [self resetDefaultStyle];
  57. self.displayUserId = displayUserId;
  58. if (member == nil) {
  59. return;
  60. }
  61. RoomMember *currentMember = [[ClassroomService sharedService].currentRoom getMember:member.userId];
  62. if (member.userId == nil) {
  63. self.videoView.hidden = YES;
  64. }
  65. else {
  66. [self.avatarView sd_setImageWithURL:[NSURL URLWithString:[currentMember.headUrl getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:STUDENT_AVATAR]];
  67. if ([currentMember.userId isEqualToString:[ClassroomService sharedService].currentRoom.currentMember.userId]) {
  68. self.mineView.hidden = NO;
  69. }
  70. else {
  71. self.mineView.hidden = YES;
  72. }
  73. [self remakeNameLable:currentMember];
  74. }
  75. if (![currentMember.userId isEqualToString:displayUserId]) {
  76. [self renderVideo:member];
  77. }
  78. BOOL isMicEnable = currentMember.microphoneEnable;
  79. NSString *imgName = @"";
  80. if (isMicEnable) {
  81. imgName = @"mic_on";
  82. }
  83. else {
  84. imgName = @"mic_off";
  85. }
  86. [self.micStatus setImage:[UIImage imageNamed:imgName]];
  87. }
  88. - (void)updateQuality:(TXNetWorkingStatus)quality {
  89. NSString *displayImg = @"network_full";
  90. switch (quality) {
  91. case TXNetWorkingStatus_Full:
  92. displayImg = @"network_full";
  93. break;
  94. case TXNetWorkingStatus_Good:
  95. displayImg = @"network_good";
  96. break;
  97. case TXNetWorkingStatus_Nomal:
  98. displayImg = @"network_nomal";
  99. break;
  100. case TXNetWorkingStatus_Bad:
  101. displayImg = @"network_bad";
  102. break;
  103. case TXNetWorkingStatus_Poor:
  104. displayImg = @"network_none";
  105. break;
  106. default:
  107. break;
  108. }
  109. self.qualityImage.image = [UIImage imageNamed:displayImg];
  110. }
  111. - (void)updateUserVolume:(NSInteger)volume isCloseMic:(BOOL)isClose {
  112. NSString *micImg = @"volume_full";
  113. if (volume >= 75) {
  114. micImg = @"volume_full";
  115. }
  116. else if (volume >= 50) {
  117. micImg = @"volume_big";
  118. }
  119. else if (volume >=25) {
  120. micImg = @"volume_small";
  121. }
  122. else {
  123. micImg = @"volume_none";
  124. }
  125. if (isClose) {
  126. micImg = @"mic_off";
  127. }
  128. [self.micStatus setImage:[UIImage imageNamed:micImg]];
  129. }
  130. - (void)resetDefaultStyle {
  131. self.videoView.hidden = NO;
  132. }
  133. - (void)renderVideo:(RoomMember *)member {
  134. if([[ClassroomService sharedService].currentRoom.currentMemberId isEqualToString:member.userId]) {
  135. [TRTC_MANAGER renderLocalUserInView:self.videoView isCameraEnable:member.cameraEnable];
  136. }
  137. else {
  138. if (![member.userId isEqualToString:self.displayUserId]) {
  139. self.displayUserId = member.userId;
  140. [TRTC_MANAGER renderRemoteUser:member.userId inView:self.videoView];
  141. }
  142. }
  143. if (member.cameraEnable) {
  144. self.closeCameraView.hidden = YES;
  145. }
  146. else {
  147. self.closeCameraView.hidden = NO;
  148. }
  149. }
  150. - (void)remakeNameLable:(RoomMember *)member {
  151. NSString * nameTxt = member.name.length > 8 ? [NSString stringWithFormat:@"%@...",[member.name substringToIndex:8]] : member.name;
  152. self.nameLabel.text = nameTxt;
  153. }
  154. - (UIView *)videoView {
  155. if(!_videoView) {
  156. _videoView = [[UIView alloc] init];
  157. _videoView.backgroundColor = HexRGB(0xE9EDF3);
  158. }
  159. return _videoView;
  160. }
  161. - (UIView *)closeCameraView {
  162. if (!_closeCameraView) {
  163. _closeCameraView = [[UIView alloc] initWithFrame:CGRectZero];
  164. _closeCameraView.backgroundColor = HexRGB(0xE9EDF3);
  165. [_closeCameraView addSubview:self.avatarView];
  166. [self.avatarView mas_makeConstraints:^(MASConstraintMaker *make) {
  167. make.centerX.mas_equalTo(_closeCameraView.mas_centerX);
  168. make.centerY.mas_equalTo(_closeCameraView.mas_centerY);
  169. make.width.height.mas_equalTo(82);
  170. }];
  171. }
  172. return _closeCameraView;
  173. }
  174. - (UIImageView *)avatarView {
  175. if (!_avatarView) {
  176. _avatarView = [[UIImageView alloc] init];
  177. _avatarView.layer.cornerRadius = 41;
  178. _avatarView.clipsToBounds = YES;
  179. _avatarView.layer.borderColor = [UIColor whiteColor].CGColor;
  180. _avatarView.layer.borderWidth = 1.0f;
  181. _avatarView.contentMode = UIViewContentModeScaleAspectFill;
  182. }
  183. return _avatarView;
  184. }
  185. @end