call.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <template>
  2. <view id="pageBox"><trtc-room id="trtcroom" :config="trtcConfig"></trtc-room></view>
  3. </template>
  4. <script>
  5. import { getSig } from '@/api/record.js';
  6. export default {
  7. data() {
  8. return {
  9. trtcConfig: {
  10. debugMode: false,//开启调试
  11. sdkAppID: '1400396944', // 开通实时音视频服务创建应用后分配的 SDKAppID
  12. userID: '', // 用户 ID,可以由您的帐号系统指定
  13. userSig: '', // 身份签名,相当于登录密码的作用
  14. template: '1v1',//
  15. enableCamera: true,//是否开启摄像头。设置为 true 时,调用 enterRoom 后,会自动发布视频
  16. enableMic: true,//是否开启麦克风。设置为 true 时,调用 enterRoom 后,会自动发布音频
  17. enableAns: true,//是否开启音频噪声抑制,该特性会自动检测背景噪音并进行过滤,但也会误伤周围的音乐,只有会议、教学等场景才适合开启。
  18. enableAgc: true,//是否开启音频自动增益,该特性可以补偿部分手机麦克风音量太小的问题,但也会放大噪音,建议配合 ANS 同时开启。
  19. enableAutoFocus: true//是否开启摄像头自动对焦,如果关闭则需要用户手动点击摄像头中的预览画面进行对焦。
  20. },
  21. roomId: '',
  22. template: '1v1',
  23. timestamp: [] //当前正在房间的用户
  24. };
  25. },
  26. onLoad(option) {
  27. let obj = this;
  28. obj.trtcConfig.userID = option.userId;
  29. obj.callGetRoom().then(e => {
  30. obj.trtcConfig.userSig = e;
  31. console.log('开始调用初始化');
  32. obj.info();
  33. });
  34. obj.roomId = option.roomId;
  35. },
  36. methods: {
  37. // 获取房间号id
  38. callGetRoom() {
  39. let obj = this;
  40. return new Promise(function(resolve, reject) {
  41. getSig({})
  42. .then(e => {
  43. resolve(e.data.UserSig);
  44. })
  45. .catch(e => {
  46. reject(e);
  47. });
  48. });
  49. },
  50. info() {
  51. let obj = this;
  52. // index.js
  53. let trtcRoomContext = this.selectComponent('#trtcroom');
  54. let EVENT = trtcRoomContext.EVENT;
  55. trtcRoomContext.setData(
  56. {
  57. trtcConfig: obj.trtcConfig
  58. },
  59. e => {
  60. if (trtcRoomContext) {
  61. trtcRoomContext.on(EVENT.LOCAL_JOIN, event => {
  62. console.log('进入房间成功');
  63. // 进房成功后发布本地音频流和视频流
  64. trtcRoomContext.publishLocalVideo().then(() => {
  65. console.log('发布成功1');
  66. // 发布成功
  67. });
  68. trtcRoomContext.publishLocalAudio().then(() => {
  69. console.log('发布成功2');
  70. // 发布成功
  71. });
  72. });
  73. // 监听远端用户的视频流的变更事件
  74. trtcRoomContext.on(EVENT.REMOTE_VIDEO_ADD, event => {
  75. console.log('视频流变动');
  76. // 订阅(即播放)远端用户的视频流
  77. let userID = event.data.userID;
  78. let streamType = event.data.streamType; // 'main' or 'aux'
  79. trtcRoomContext.subscribeRemoteVideo({ userID: userID, streamType: streamType });
  80. });
  81. // 监听远端用户的音频流的变更事件
  82. trtcRoomContext.on(EVENT.REMOTE_AUDIO_ADD, event => {
  83. console.log('音频变动’');
  84. // 订阅(即播放)远端用户的音频流
  85. let userID = event.data.userID;
  86. trtcRoomContext.subscribeRemoteAudio({ userID: userID });
  87. });
  88. // 远端用户进房
  89. trtcRoomContext.on(EVENT.REMOTE_USER_JOIN, event => {
  90. console.log('* room REMOTE_USER_JOIN', event, trtcRoomContext.getRemoteUserList());
  91. this.timestamp.push(new Date());
  92. // 1v1视频通话时限制人数为两人的简易逻辑,建议通过后端实现房间人数管理
  93. });
  94. // 远端用户退出
  95. trtcRoomContext.on(EVENT.REMOTE_USER_LEAVE, event => {
  96. console.log('* room REMOTE_USER_LEAVE', event, trtcRoomContext.getRemoteUserList());
  97. if (this.template === '1v1') {
  98. this.timestamp = [];
  99. }
  100. if (this.template === '1v1' && this.remoteUser === event.data.userID) {
  101. this.remoteUser = null;
  102. }
  103. });
  104. // 远端用户推送视频
  105. trtcRoomContext.on(EVENT.REMOTE_VIDEO_ADD, event => {
  106. // 订阅视频
  107. const userList = trtcRoomContext.getRemoteUserList();
  108. const data = event.data;
  109. // 1v1 只订阅第一个远端流
  110. this.remoteUser = data.userID;
  111. trtcRoomContext.subscribeRemoteVideo({
  112. userID: data.userID,
  113. streamType: data.streamType
  114. });
  115. });
  116. // 本地推送错误
  117. trtcRoomContext.on(EVENT.ERROR, event => {
  118. console.log('* room ERROR', event);
  119. });
  120. // 进入房间
  121. trtcRoomContext.enterRoom({ roomID: obj.roomId }).catch(res => {
  122. console.error('room joinRoom 进房失败:', res);
  123. });
  124. }
  125. }
  126. );
  127. }
  128. }
  129. };
  130. </script>
  131. <style>
  132. #trtcroom,
  133. page,
  134. #pageBox {
  135. height: 100%;
  136. width: 100%;
  137. }
  138. </style>