live.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. import {getDataSet, getEventParam, toast} from "../../utils/utils";
  2. import {liveSources} from "../../model/enum";
  3. import {timStore} from "../../store/tim";
  4. import {createStoreBindings} from "mobx-miniprogram-bindings";
  5. import Tim from "../../model/tim";
  6. import User from "../../model/user";
  7. import EduTRTC from "../../model/edu-trct";
  8. import Route from "../../model/route";
  9. Page({
  10. data: {
  11. liveSourcesEnum: liveSources,
  12. user: {},
  13. groupId: '',
  14. pic: '',
  15. userSig: '',
  16. scheduleId: '',
  17. isFull: false,
  18. bigIndex: 0,
  19. isLive: false,
  20. },
  21. async onLoad(options) {
  22. wx.setKeepScreenOn({
  23. keepScreenOn: true,
  24. })
  25. this.storeBindings = createStoreBindings(this, {
  26. store: timStore,
  27. fields: ['isCanShare', 'isAudVideo', 'isAudText', 'isStuVideo', 'pusher', 'playerList'],
  28. actions: ['setScroll', 'pushMessage', 'resetMessage', 'logout', 'initLive', "exitRoom", "setPusherAttributesHandler"]
  29. })
  30. const {title, type, eId, scheduleId, eduStuName,pic} = options;
  31. let userID = "";
  32. let groupId = "";
  33. if (type == liveSources.DEFAULT) {
  34. userID = "student_" + eId;
  35. } else if (type == liveSources.GUEST) {
  36. userID = "guest_" + eId;
  37. }
  38. groupId = "schedule_" + scheduleId;
  39. const res = await User.getUserSign(userID);
  40. const userSig = res.userSig
  41. Tim.SDKAppID = res.appID;
  42. this.setData({
  43. type,
  44. user: {nickname: eduStuName, avatar: '', gender: 1, userID},
  45. groupId,
  46. scheduleId,
  47. userSig,
  48. pic
  49. })
  50. wx.setNavigationBarTitle({title})
  51. this.initLive(this);
  52. setTimeout(() => EduTRTC.getInstance().getSDK().getPusherInstance().start(), 800)
  53. },
  54. async reply(e) {
  55. let msg = getEventParam(e, "msg")
  56. if (!msg.trim()) {
  57. toast('请输入内容')
  58. return;
  59. }
  60. const message = Tim.getInstance().createGroupTextMsg(msg, this.data.groupId);
  61. this.setScroll(true)
  62. try {
  63. await Tim.getInstance().sendMessage(message);
  64. this.pushMessage(message)
  65. this.selectComponent('.bottom-reply').clear();
  66. } catch (e) {
  67. toast(e.message)
  68. }
  69. },
  70. async hand(e) {
  71. const message = Tim.getInstance().createHandMsg(this.data.groupId);
  72. const res = await Tim.getInstance().sendCMD(message);
  73. },
  74. async onUnload() {
  75. wx.setKeepScreenOn({
  76. keepScreenOn: false,
  77. })
  78. this.exitRoom()
  79. await this.logout()
  80. this.storeBindings.destroyStoreBindings()
  81. },
  82. changeFull(e) {
  83. this.setData({
  84. isFull: !this.data.isFull
  85. })
  86. },
  87. handlePusher(e) {
  88. console.log("handlePusher", e)
  89. },
  90. handlePlayer(e) {
  91. console.log("handlePlayer", e)
  92. let index = getDataSet(e, 'index');
  93. if (this.data.bigIndex == index || (index == -1 && !this.data.pusher.enableCamera)) {
  94. return;
  95. }
  96. this.setData({
  97. bigIndex: index
  98. })
  99. },
  100. switchCamera() {
  101. wx.createLivePusherContext().switchCamera({
  102. success() {
  103. },
  104. fail() {
  105. toast("切换失败")
  106. },
  107. }
  108. )
  109. },
  110. quitLink() {
  111. this.setPusherAttributesHandler({enableCamera: false, enableMic: false})
  112. },
  113. // 请保持跟 wxml 中绑定的事件名称一致
  114. _pusherStateChangeHandler(event) {
  115. console.log("_pusherStateChangeHandler", event);
  116. const code = getEventParam(event, "code")
  117. if (code == 1018) {
  118. this.setData({
  119. isLive: true
  120. })
  121. }
  122. EduTRTC.getInstance().getSDK().pusherEventHandler(event)
  123. },
  124. _pusherNetStatusHandler(event) {
  125. EduTRTC.getInstance().getSDK().pusherNetStatusHandler(event)
  126. },
  127. _pusherErrorHandler(event) {
  128. console.log("_pusherErrorHandler", event);
  129. EduTRTC.getInstance().getSDK().pusherErrorHandler(event)
  130. },
  131. _pusherBGMStartHandler(event) {
  132. EduTRTC.getInstance().getSDK().pusherBGMStartHandler(event)
  133. },
  134. _pusherBGMProgressHandler(event) {
  135. EduTRTC.getInstance().getSDK().pusherBGMProgressHandler(event)
  136. },
  137. _pusherBGMCompleteHandler(event) {
  138. EduTRTC.getInstance().getSDK().pusherBGMCompleteHandler(event)
  139. },
  140. _pusherAudioVolumeNotify(event) {
  141. EduTRTC.getInstance().getSDK().pusherAudioVolumeNotify(event)
  142. },
  143. _playerStateChange(event) {
  144. console.log("_playerStateChange", event);
  145. EduTRTC.getInstance().getSDK().playerEventHandler(event)
  146. },
  147. _playerFullscreenChange(event) {
  148. EduTRTC.getInstance().getSDK().playerFullscreenChange(event)
  149. },
  150. _playerNetStatus(event) {
  151. EduTRTC.getInstance().getSDK().playerNetStatus(event)
  152. },
  153. _playerAudioVolumeNotify(event) {
  154. EduTRTC.getInstance().getSDK().playerAudioVolumeNotify(event)
  155. },
  156. onShareAppMessage(options) {
  157. let obj = {};
  158. if (this.data.pic){
  159. obj.imageUrl = this.data.pic
  160. }
  161. return {
  162. path: Route.getIndexUrl(this.data.scheduleId),
  163. ...obj
  164. }
  165. },
  166. //放大pusher的方法(就是改变pusher控件的大小)
  167. //放大player的方法
  168. testPlayerFullScreen(id) {
  169. let livePlayerContext = wx.createLivePlayerContext(id);
  170. //进入全屏
  171. let direction = 0;
  172. let item = this.data.playerList[0];//item是流集合里的一个
  173. // // 已知问题:视频的尺寸需要等待player触发NetStatus事件才能获取到,如果进房就双击全屏,全屏后的方向有可能不对。
  174. if (item.netStatus && item.netStatus.videoWidth && item.netStatus.videoHeight) {
  175. // 如果是横视频,全屏时进行横屏处理。如果是竖视频,则为0
  176. direction = item.netStatus.videoWidth > item.netStatus.videoHeight ? 90 : 0
  177. }
  178. livePlayerContext.requestFullScreen({
  179. direction,
  180. success(res) {
  181. }
  182. })
  183. //退出全屏
  184. livePlayerContext.exitFullScreen({
  185. success(res) {
  186. }
  187. })
  188. }
  189. });