VideoManager+juphoon.m 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. //
  2. // VideoManager+juphoon.m
  3. // SikeyComm
  4. //
  5. // Created by 刘振兴 on 2025/2/11.
  6. // Copyright © 2025 BaH Cy. All rights reserved.
  7. //
  8. #import "VideoManager+juphoon.h"
  9. #import "VideoManager+timer.h"
  10. @implementation VideoManager (juphoon)
  11. //初始化
  12. - (BOOL)initJuphoon {
  13. self.mJuphoonClient = [JCClient create:APP_KEY_JUPHOON callback:self createParam:nil];
  14. self.mJuphoonMediaDevice = [JCMediaDevice create:self.mJuphoonClient callback:self];
  15. self.mJuphoonCall = [JCCall create:self.mJuphoonClient mediaDevice:self.mJuphoonMediaDevice callback:self];
  16. self.mJuphoonCall.mediaConfig = [JCCallMediaConfig generateByMode:JCCallMediaConfigModeIOT];
  17. self.mJuphoonMediaDevice.videoAngle = JCMediaDeviceVideoAngel0;
  18. [self.mJuphoonMediaDevice setCameraProperty:640 height:360 framerate:10];
  19. //Zmf_VideoCaptureListenRotation(0, 0);
  20. //Zmf_VideoRenderListenRotation(0,0);
  21. return self.mJuphoonClient.state == JCClientStateIdle;
  22. }
  23. - (void)loginJuphoon {
  24. NSString* uid = [DataManager shared].loginModel.uid;
  25. NSString* password = @"123456";
  26. JCClientLoginParam* loginParam = [[JCClientLoginParam alloc] init];
  27. BOOL isOK = [self.mJuphoonClient login:uid password:password loginParam:loginParam];
  28. HDNormalLog(([NSString stringWithFormat:@"VideoManager: login call: %d", isOK]));
  29. }
  30. - (void)logoutJuphoon {
  31. if (self.mJuphoonClient) {
  32. [self.mJuphoonClient logout];
  33. }
  34. }
  35. - (BOOL)call:(NSString*)sid ticket:(NSString*)ticket {
  36. self.mSID = sid;
  37. self.mTicket = ticket;
  38. JCCallParam* callParam = [JCCallParam callParamWithExtraParam:@"" ticket:ticket];
  39. return [self.mJuphoonCall call:ticket video:true callParam:callParam];
  40. }
  41. #pragma mark - JCMediaDeviceCallback
  42. /**
  43. * 登录结果回调
  44. *
  45. * 在调用 {@link JCClient#login:password:loginParam: login} 方法成功后会收到此回调
  46. *
  47. * @param result 登录是否成功
  48. * - true:登录成功
  49. * - false:登录失败
  50. * @param reason 登录失败原因,当 result 为 false 时该值有效。参见:@ref JCClientReason "错误原因"
  51. */
  52. - (void)onLogin:(bool)result reason:(JCClientReason)reason {
  53. @weakify(self);
  54. HDNormalLog(([NSString stringWithFormat:@"VideoManager: login Result:%d Reason:%ld", result, reason]));
  55. if (result) {// 登录成功
  56. } else if (reason == JCClientReasonAuth) {// 账号密码错误
  57. } else {
  58. //如果没有成功//
  59. if (reason != JCClientReasonNone && reason != JCClientReasonStateCannotLogin) {
  60. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  61. [weak_self loginJuphoon];
  62. });
  63. }
  64. }
  65. }
  66. /**
  67. * 登出回调
  68. *
  69. * 在调用 {@link JCClient#logout logout} 方法成功会收到此回调
  70. *
  71. * @param reason 登出失败原因,参见:@ref JCClientReason "错误原因"
  72. */
  73. - (void)onLogout:(JCClientReason)reason {
  74. HDNormalLog(@"VideoManager: onLogout");
  75. }
  76. /**
  77. * 登录状态变化回调
  78. *
  79. * 在用户的登录状态发生改变时会收到此回调,登录状态:
  80. * - @ref JCClientStateNotInit : 未初始化
  81. * - @ref JCClientStateIdle : 未登录
  82. * - @ref JCClientStateLogining : 登录中
  83. * - @ref JCClientStateLogined : 登录成功
  84. * - @ref JCClientStateLogouting : 登出中
  85. *
  86. * @param state 当前状态值
  87. * @param oldState 之前状态值
  88. */
  89. - (void)onClientStateChange:(JCClientState)state oldState:(JCClientState)oldState {
  90. if (state == JCClientStateIdle) {
  91. [self loginJuphoon];
  92. }
  93. }
  94. #pragma mark - JCCallCallback
  95. /**
  96. * 新增通话回调
  97. *
  98. * 当上层收到此回调时,可以根据 JCCallItem 对象获得该通话的所有信息及状态,从而更新该通话相关UI
  99. *
  100. * @param item JCCallItem 对象
  101. */
  102. - (void)onCallItemAdd:(JCCallItem* __nonnull)item {
  103. HDNormalLog(([NSString stringWithFormat:@"VideoManager: onCallItemAdd direction: %ld", (long)item.direction]));
  104. NSDictionary *dic = @{kCallIetmKey:item};
  105. [[NSNotificationCenter defaultCenter] postNotificationName:kCallNotification object:nil userInfo:dic];
  106. if (self.mJuphoonCall.callItems.count == 1) {
  107. [self showInCallVC];
  108. }
  109. }
  110. /**
  111. * 移除通话回调
  112. *
  113. * 当上层收到此回调时,可以根据 JCCallItem 对象获得该通话的所有信息及状态,从而更新该通话相关UI
  114. *
  115. * @param item JCCallItem 对象
  116. * @param reason 通话结束原因,参见:@ref JCCallReason "通话结束原因"
  117. * @param description 通话结束原因的描述,只有被动挂断的时候,才会收到这个值,其他情况下则返回空字符串
  118. */
  119. - (void)onCallItemRemove:(JCCallItem *)item reason:(JCCallReason)reason description:(NSString *)description {
  120. HDNormalLog(([NSString stringWithFormat:@"VideoManager: onCallItemRemove reason:%ld", reason]));
  121. [[NSNotificationCenter defaultCenter] postNotificationName:kCallNotification object:nil];
  122. [self removeInCallVC];
  123. switch (reason) {
  124. case JCCallReasonNone:
  125. [EasyTextView showInfoText:[NSString stringWithFormat:NSLocalizedString(@"Video.Error.Hangup", nil)]];
  126. break;
  127. case JCCallReasonNotFound:
  128. [EasyTextView showErrorText:[NSString stringWithFormat:NSLocalizedString(@"Video.Error.User.No", nil)]];
  129. break;
  130. case JCCallReasonUserOffline:
  131. [EasyTextView showErrorText:[NSString stringWithFormat:NSLocalizedString(@"Video.Error.User.Offline", nil)]];
  132. [self loginJuphoon];
  133. break;
  134. case JCCallReasonNotLogin:
  135. [EasyTextView showErrorText:[NSString stringWithFormat:NSLocalizedString(@"Video.Error.User.Login", nil)]];
  136. break;
  137. case JCCallReasonTimeOut:
  138. //[EasyTextView showErrorText:[NSString stringWithFormat:NSLocalizedString(@"Video.Error.Timeout", nil)]];
  139. break;
  140. case JCCallReasonNetWork:
  141. [EasyTextView showErrorText:[NSString stringWithFormat:NSLocalizedString(@"Video.Error.Network", nil)]];
  142. break;
  143. default: {
  144. break;
  145. }
  146. }
  147. }
  148. /**
  149. * 通话状态更新回调
  150. *
  151. * 当上层收到此回调时,可以根据 JCCallItem 对象获得该通话的所有信息及状态,从而更新该通话相关UI
  152. *
  153. * @param item JCCallItem 对象
  154. * @param changeParam JCCallChangeParam 更新标识对象
  155. */
  156. - (void)onCallItemUpdate:(JCCallItem* __nonnull)item changeParam:(JCCallChangeParam * __nullable)changeParam {
  157. // if (item.state == JCCallStateTalking && [self.mInCallVC getRemoteCanvas] == nil && item.uploadVideoStreamOther) {
  158. // [self stopTimeoutTimer];
  159. // }
  160. [[NSNotificationCenter defaultCenter] postNotificationName:kCallNotification object:nil];
  161. }
  162. @end