zby-live-sdk 1.0.49-beta-talrtc0920 → 1.0.49-beta0921-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zby-live-sdk",
3
- "version": "1.0.49-beta-talrtc0920",
3
+ "version": "1.0.49-beta0921-1",
4
4
  "main": "dist/zby-live-sdk.cjs.js",
5
5
  "module": "dist/zby-live-sdk.esm.js",
6
6
  "browsers": "dist/zby-live-sdk.umd.js",
@@ -13,7 +13,7 @@ const urls = {
13
13
  };
14
14
 
15
15
  // export const version = require('../../package.json').version;
16
- export const version = '1.0.49-beta-talrtc0920';
16
+ export const version = '1.0.49-beta0921-1';
17
17
 
18
18
  export const liveExt = {
19
19
  name: 'live',
@@ -108,11 +108,22 @@ const apiChangeSdkUrl = {
108
108
  online: 'https://cloud-platform-live.speiyou.com/cloud-platform'
109
109
  };
110
110
 
111
+ //开启混流
112
+ const apiMixStreams = {
113
+ test: 'https://tf-classroom-api-test.vdyoo.com',
114
+ online: 'https://tf-classroom-api-online.vdyoo.com'
115
+ };
116
+
111
117
  export const getApiCloudBaseUrl = () => {
112
118
  const {env} = config;
113
119
  return apiCloudUrl[env];
114
120
  };
115
121
 
122
+ export const getApiMixStreams = () => {
123
+ const {env} = config;
124
+ return apiMixStreams[env];
125
+ }
126
+
116
127
  export const getApiChangeSdkUrl = () => {
117
128
  const {env} = config;
118
129
  return apiChangeSdkUrl[env];
@@ -7,7 +7,7 @@
7
7
  * @FilePath: \1705\zby_live_sdk\src\network\api.js
8
8
  */
9
9
  import commonFetch from './commonFetch.js';
10
- import {getReportBaseUrl, getApiCloudBaseUrl, getCloudApiDomain, getApiChangeSdkUrl, timestampUrl} from '../config/config.js';
10
+ import {getReportBaseUrl, getApiCloudBaseUrl, getCloudApiDomain, getApiChangeSdkUrl, timestampUrl, getApiMixStreams} from '../config/config.js';
11
11
  import util from '../util/util';
12
12
 
13
13
  //获取信道服务器地址
@@ -48,3 +48,12 @@ export function dabanDataReport(param){
48
48
  export function changeSdkInRoom(param){
49
49
  return commonFetch(`${getApiChangeSdkUrl()}/rtccloud/sdk/set/lecture/client`, param, 'FROMDATA');
50
50
  }
51
+
52
+ //开始混流
53
+ export function mixStreamsStart(param) {
54
+ return commonFetch(`${getApiMixStreams()}/rtc-backend/mix/stream/start`, param, 'POST');
55
+ }
56
+ //结束混流
57
+ export function mixStreamsStop(param) {
58
+ return commonFetch(`${getApiMixStreams()}/rtc-backend/mix/stream/end`, param, 'POST');
59
+ }
@@ -52,7 +52,6 @@ let localRoomId = null;
52
52
  let userId = null;
53
53
  let isNoticeMicVolume = false;
54
54
  let enableLocalCapture = true; // 本地摄像头采集,默认允许
55
- let teacherId = null;
56
55
  // /**
57
56
  // * 过滤直播云sdk中deviceId前缀
58
57
  // * @param {string} deviceId
@@ -426,13 +425,12 @@ const init = async (args) => {
426
425
  localRoomId = args.roomId;
427
426
  userId = args.userId;
428
427
  localStreamId = args.streamId;
429
- teacherId = args.teacherId;
430
428
  const _devices = {
431
429
  camera: (devices && devices.camera) || (usedDevices && usedDevices.camera && usedDevices.camera.use) || '',
432
430
  microphone: (devices && devices.microphone) || (usedDevices && usedDevices.microphone && usedDevices.microphone.use) || '',
433
431
  speaker: (devices && devices.speaker) || (usedDevices && usedDevices.speaker && usedDevices.speaker.use) || ''
434
432
  };
435
- console.log('-> load talrtc sdk. teacherId: ', teacherId);
433
+ console.log('-> load talrtc sdk');
436
434
  await loadTalrtc(args.extensionVersion);
437
435
  console.log('-> load talrtc sdk finished ');
438
436
  const resp = await startEngine(args.appId, args.userId, args.usersign || '67890', 7, args.live_id);
@@ -456,7 +454,6 @@ const init = async (args) => {
456
454
 
457
455
  //rtc同屏以及高光时刻,都开启音频外部采集,默认传1
458
456
  await setAudioAuxSource(1);
459
- teacherId = null;
460
457
  }
461
458
 
462
459
  if(args.noiseSuppressMode == -2) {
@@ -1501,8 +1498,6 @@ const startPush = async (streamId) => {
1501
1498
  if (streamId === screenStreamId) {
1502
1499
  isScreenSharing = true;
1503
1500
  }
1504
- setAudioType(4, localStreamId); // 设置采集类型,不用await,避免接口挂起导致未推流
1505
-
1506
1501
  defaultApi.writeLog(`avsdk TALSDK::startPush streamId: ${streamId}`);
1507
1502
  try {
1508
1503
  if (!isFirstHeartBeatReport) {
@@ -1597,7 +1592,6 @@ const startPlay = (streamId, muteAudio, muteVideo) => {
1597
1592
  }
1598
1593
  defaultApi.writeLog(`avsdk TALSDK::startPlay streamId: ${streamId}, muteAudio: ${muteAudio}, muteVideo: ${muteVideo}`);
1599
1594
  return callMethod('StartPlay', {
1600
- myStreamId: localStreamId,
1601
1595
  streamId,
1602
1596
  muteAudio,
1603
1597
  muteVideo,
@@ -1870,19 +1864,10 @@ const setAudioAuxSource = (source) => {
1870
1864
  });
1871
1865
  };
1872
1866
 
1873
- /**
1874
- * RTC流音频类型
1875
- * @param {number} type 音频类型 0:静音 / 1:麦克风 / 2:拉流的声音 / 3:1+2 / 4:麦克风+扬声器 5: 扬声器
1876
- * @param {string} streamId 流
1877
- * @returns {Promise<void>}
1878
- */
1879
- const setAudioType = (type, streamId) => {
1880
- defaultApi.writeLog('info', 'avsdk TALRTC::SetAudioType');
1881
- if (!streamId) {
1882
- streamId = screenStreamId;
1883
- }
1884
- return callMethod('SetAudioType', {
1885
- streamId,
1867
+ //RTC同屏 辅助通道音频类型 0:静音 / 1:麦克风 / 2:拉流的声音 / 3:1+2 / 4:麦克风+扬声器
1868
+ const setAUXAudioType = (type) => {
1869
+ defaultApi.writeLog('info', 'avsdk TALRTC::SetAUXAudioType');
1870
+ return callMethod('SetAUXAudioType', {
1886
1871
  type
1887
1872
  });
1888
1873
  };
@@ -1928,18 +1913,13 @@ const startMultiScreen = async () => {
1928
1913
  * @returns {Promise}
1929
1914
  */
1930
1915
  export const setAudioMixMode = async (mixMode, streamIdArr) => {
1931
- // let channelsArr = [];
1932
- // if(streamIdArr.length > 0){
1933
- // streamIdArr.forEach( item => {
1934
- // channelsArr.push(getChannelIndex(item));
1935
- // });
1936
- // }
1937
- if (!Array.isArray(streamIdArr)) return;
1938
-
1939
- if (teacherId && !streamIdArr.includes(teacherId)) {
1940
- streamIdArr.push(teacherId);
1916
+ let channelsArr = [];
1917
+ if(streamIdArr.length > 0){
1918
+ streamIdArr.forEach( item => {
1919
+ channelsArr.push(getChannelIndex(item));
1920
+ });
1941
1921
  }
1942
- return callMethod('SetAudioMixMode', {mixMode: mixMode, streamIdArr, num: streamIdArr.length});
1922
+ return callMethod('SetAudioMixMode', {mixMode: mixMode, channels: channelsArr, num: channelsArr.length});
1943
1923
  };
1944
1924
 
1945
1925
 
@@ -1974,10 +1954,6 @@ const leaveRoom = async () => {
1974
1954
  previewIdToStreamId = {};
1975
1955
  streamIdRtcPlayerInfo = {};
1976
1956
  streamIdRtcPlayerInfo1 = {};
1977
- uiChnIndexs.length = 100;
1978
- uiChnIndexs.fill(0).forEach((value, index, array) => {
1979
- array[index] = array.length - (index + 1);
1980
- });
1981
1957
  };
1982
1958
 
1983
1959
 
@@ -2343,7 +2319,7 @@ export default {
2343
2319
  setMirrorStatus,
2344
2320
  setPlayViewMirror,
2345
2321
  setAudioAuxSource,
2346
- setAudioType,
2322
+ setAUXAudioType,
2347
2323
  startAudioExCapture,
2348
2324
  startMultiScreen,
2349
2325
  setAudioMixMode,
@@ -20,6 +20,11 @@ const rtcReportUrl = {
20
20
  test: 'test-r.weclassroom.com',
21
21
  online: 'r.weclassroom.com'
22
22
  };
23
+ const sdkVale = {
24
+ zego: 8, //8代表zego采集麦克风+扬声器
25
+ talrtc: 101, //101代表talrtc采集声音
26
+ trtc: 102, //102代表trtc采集声音
27
+ }
23
28
 
24
29
  /**
25
30
  * @function 设备检测初始化
@@ -78,7 +83,7 @@ export const deviceCheckerInit = async (extension, env) => {
78
83
  });
79
84
  window.zbyAVSDK_init_sdk_type = 'zego';
80
85
  }
81
- defaultApi.writeLog('change zbyAVSDK_init_sdk_type to rtc , from avsdk device check init');
86
+ defaultApi.writeLog('change zbyAVSDK_init_sdk_type to zego , from avsdk device check init');
82
87
  };
83
88
 
84
89
  /**
@@ -1243,7 +1248,7 @@ export const getSnapshootId = (streamId) => {
1243
1248
  }
1244
1249
  break;
1245
1250
  case TALRTC:
1246
- if (talrtcsdk.hasStream(streamId)) {
1251
+ if (zegosdk.hasStream(streamId)) {
1247
1252
  return talrtcsdk.getChannelIndex(streamId);
1248
1253
  } else {
1249
1254
  defaultApi.writeLog(`talrtcsdk getSnapshootId , no streamId: ${streamId} in talrtc room`);
@@ -1669,7 +1674,8 @@ export const setAudioMixMode = (mixMode, streamIdArr) => {
1669
1674
  case ZEGO:
1670
1675
  return zegosdk.setAudioMixMode(mixMode, streamIdArr);
1671
1676
  case TALRTC:
1672
- return talrtcsdk.setAudioMixMode(mixMode, streamIdArr);
1677
+ // FIXME METHOD_NOT_IMPLEMENT;
1678
+ break;
1673
1679
  default:
1674
1680
  break;
1675
1681
  }
@@ -1786,8 +1792,6 @@ export const setAUXAudioType = (type) => {
1786
1792
  break;
1787
1793
  case ZEGO:
1788
1794
  return zegosdk.setAUXAudioType(type);
1789
- case TALRTC:
1790
- return talrtcsdk.setAudioType(type);
1791
1795
  default:
1792
1796
  break;
1793
1797
  }
@@ -1808,6 +1812,21 @@ export const getStreamType_zego = () => {
1808
1812
  }
1809
1813
  };
1810
1814
 
1815
+ const setThirdAudioCallbackType = (sdkType) => {
1816
+ let type = sdkVale[sdkType];
1817
+ return zegosdk.setThirdAudioType(type);
1818
+ }
1819
+
1820
+ const startMixStreams = (urls) => {
1821
+ console.log('zego startmixStreams');
1822
+ return zegosdk.startmixStreams(urls);
1823
+ }
1824
+
1825
+ const stopMixtStreams = (urls) => {
1826
+ console.log('zego stopMixtStreams');
1827
+ return zegosdk.stopMixtStreams(urls);
1828
+ }
1829
+
1811
1830
 
1812
1831
  export default {
1813
1832
  init,
@@ -1886,6 +1905,9 @@ export default {
1886
1905
  sendMediaSideInfo,
1887
1906
  enableHighlight,
1888
1907
  setAUXAudioType,
1889
- mixedstuVideo
1908
+ mixedstuVideo,
1909
+ setThirdAudioCallbackType,
1910
+ startMixStreams,
1911
+ stopMixtStreams
1890
1912
  // getDeviceState
1891
1913
  };
@@ -6,6 +6,7 @@
6
6
  **/
7
7
  import {dabanDataReport} from '../network/api.js';
8
8
  import dataReport from '../network/dataReport.js';
9
+ import { mixStreamsStart,mixStreamsStop } from '../network/api';
9
10
  import {
10
11
  getS,
11
12
  setS,
@@ -69,6 +70,9 @@ let currStreamIdRtcPlayerInfo ;
69
70
 
70
71
  //记录底层推流回调的值
71
72
  let dataZegoCapture = {};
73
+
74
+ //记录推流id
75
+ let streamIdList = [];
72
76
  /**
73
77
  * @function 调用端提供的回调方法
74
78
  * @param name:String 回调方法名
@@ -190,7 +194,10 @@ const addListener = (userId, userName, confId, nNetType, devices) => {
190
194
  afterInitSDK(userId, userName, confId, nNetType, devices);
191
195
  }
192
196
  }
193
- break;
197
+ break;
198
+ case 'OnMixStreamEx':
199
+ console.log('OnMixStreamEx',data)
200
+ break;
194
201
  case 'OnLoginChannel':
195
202
  var status = JSON.parse(data).uiErrorCode;
196
203
  defaultApi.writeLog(`ZEGO::addListener-- OnLoginChannel: ${status}`);
@@ -745,7 +752,7 @@ export const stopCheckDevice = async() => {
745
752
  removerListener();
746
753
  await stopSoundLevelMonitor();
747
754
  await stopPreview();
748
- defaultApi.writeLog('rtc stopCheckDevice and removerListener and captureDestroy');
755
+ defaultApi.writeLog('zego stopCheckDevice and removerListener and captureDestroy');
749
756
  return callMethod('DestroyEngine', {});
750
757
  };
751
758
 
@@ -1791,11 +1798,16 @@ export const setDefaultDevice = async (devices, operationType) => {
1791
1798
  */
1792
1799
  export const startPublish2 = async (streamid, idx, title, flag, seq) => {
1793
1800
  const streamId = streamid || window.zbyAVSDK_init_params.zego.streamId;
1801
+ if (streamIdList.includes(streamId)) {
1802
+ console.log('streamIdList is including this streamid', streamIdList, streamId);
1803
+ } else {
1804
+ streamIdList.push(streamId);
1805
+ }
1794
1806
  if (typeof title === 'undefined') {
1795
1807
  title = 'none';
1796
1808
  }
1797
1809
  if (typeof flag === 'undefined') {
1798
- flag = 0;
1810
+ flag = 1;
1799
1811
  }
1800
1812
  if (typeof seq === 'undefined') {
1801
1813
  seq = 0;
@@ -2069,6 +2081,133 @@ export const mixStream = (type, args, seq) => {
2069
2081
 
2070
2082
  };
2071
2083
 
2084
+ export const startmixStreams = async (targetUrl) => {
2085
+ const zego = window.zbyAVSDK_init_params.zego;
2086
+
2087
+ let rtcStreamId = `${zego.sid.slice(0,str.length-1)+2}` //'4000_345_123_2'
2088
+ let param = {
2089
+ institutionId: zego.institutionId,
2090
+ taskId: zego.sid,
2091
+ userId: zego.userId,
2092
+ streamIds: streamIdList,
2093
+ rtcStreamId,
2094
+ pushUrls: targetUrl //数组
2095
+ }
2096
+ let res = await mixStreamsStart(param);
2097
+ if (res.code == 0) {
2098
+ console.log('混流成功:', res);
2099
+ } else {
2100
+ console.log('startmixStream local start……');
2101
+ return callMethod('MixStreamEx', {
2102
+ mixstreamid: zego.sid,
2103
+ config: {
2104
+ nOutputFps: 15,
2105
+ nOutputBitrate: 512000,
2106
+ nOutputAudioBitrate: 48000,
2107
+ nOutputWidth: 1280,
2108
+ nOutputHeight: 720,
2109
+ nOutputAudioConfig: 0,
2110
+ pUserData: '',
2111
+ nLenOfUserData: 0,
2112
+ pInputStreamList: [
2113
+ {
2114
+ szStreamID: streamIdList[1],//截屏窗
2115
+ layout: { left: 0, top: 0, right: 1040, bottom: 720 },
2116
+ uSoundLevelID: 1234,
2117
+ nContentControl: 0,
2118
+ nVolume: 100,
2119
+ bAudioFocus: false,
2120
+ nAudioDirection: -1,
2121
+ renderMode: 0
2122
+ },
2123
+ {
2124
+ szStreamID: streamIdList[0],//头像
2125
+ layout: { left: 1040, top: 0, right: 1280, bottom: 180 },
2126
+ uSoundLevelID: 3232,
2127
+ nContentControl: 0,
2128
+ nVolume: 100,
2129
+ bAudioFocus: false,
2130
+ nAudioDirection: -1,
2131
+ renderMode: 0
2132
+ }
2133
+ ],
2134
+ nInputStreamCount: 2,
2135
+ pOutputList: [
2136
+ {
2137
+ isUrl: true, // 输出是否为流名或URL
2138
+ target: targetUrl[0], //isUrl=ture完整的RTMP URL,false是流名
2139
+ videoCodec: 0,
2140
+ videoBitrate: 0,
2141
+ encodeProfile: 1,
2142
+ encodeLatency: 0
2143
+ }
2144
+ // {
2145
+ // isUrl: false,
2146
+ // target: "streamId",
2147
+ // videoCodec: 0,
2148
+ // videoBitrate: 0,
2149
+ // encodeProfile: 1,
2150
+ // encodeLatency: 0
2151
+ // }
2152
+ ],
2153
+ nOutputStreamCount: 1,
2154
+ pOutputBackgroundImage: '',
2155
+ }
2156
+ })
2157
+ }
2158
+
2159
+
2160
+ };
2161
+
2162
+ export const stopMixtStreams = async (targetUrl) => {
2163
+ const zego = window.zbyAVSDK_init_params.zego;
2164
+ let param = {
2165
+ taskId: zego.sid,
2166
+ userId: zego.userId
2167
+ }
2168
+ let res = await mixStreamsStop(param);
2169
+ if (res.code == 0) {
2170
+ console.log('停止混流成功:', res);
2171
+ } else {
2172
+ return callMethod('MixStreamEx', {
2173
+ mixstreamid: zego.sid,
2174
+ config: {
2175
+ nOutputFps: 15,
2176
+ nOutputBitrate: 512000,
2177
+ nOutputAudioBitrate: 48000,
2178
+ nOutputWidth: 1280,
2179
+ nOutputHeight: 720,
2180
+ nOutputAudioConfig: 0,
2181
+ pUserData: '',
2182
+ nLenOfUserData: 0,
2183
+ pInputStreamList: [],
2184
+ nInputStreamCount: 2,
2185
+ pOutputList: [
2186
+ {
2187
+ isUrl: true, // 输出是否为流名或URL
2188
+ target: targetUrl[0], //isUrl=ture完整的RTMP URL,false是流名
2189
+ videoCodec: 0,
2190
+ videoBitrate: 0,
2191
+ encodeProfile: 1,
2192
+ encodeLatency: 0
2193
+ }
2194
+ // {
2195
+ // isUrl: false,
2196
+ // target: "streamId",
2197
+ // videoCodec: 0,
2198
+ // videoBitrate: 0,
2199
+ // encodeProfile: 1,
2200
+ // encodeLatency: 0
2201
+ // }
2202
+ ],
2203
+ nOutputStreamCount: 1,
2204
+ pOutputBackgroundImage: '',
2205
+ }
2206
+ })
2207
+ }
2208
+ };
2209
+
2210
+
2072
2211
  /**
2073
2212
  * @function 是否拉取音频流--通过流id控制
2074
2213
  * @param streamId:String 被拉取的流的 id,必选
@@ -2410,7 +2549,7 @@ const setAudioAuxSource = (source) => {
2410
2549
  });
2411
2550
  }
2412
2551
 
2413
- //RTC同屏 辅助通道音频类型 0:静音 / 1:麦克风 / 2:拉流的声音 / 3:1+2 / 4:麦克风+扬声器
2552
+ //RTC同屏 辅助通道音频类型 0:静音 / 1:麦克风 / 2:拉流的声音 / 3:1+2 / 4:麦克风+扬声器 /5:扬声器(音乐)(没有拉流,没有外部混音没有调用,没有麦克风)
2414
2553
  const setAUXAudioType = (type) => {
2415
2554
  defaultApi.writeLog('info', 'avsdk ZEGO::SetAUXAudioType');
2416
2555
  return callMethod('SetAUXAudioType', {
@@ -2425,6 +2564,14 @@ const startAudioExCapture = (channel) => {
2425
2564
  channel
2426
2565
  });
2427
2566
  }
2567
+ /**
2568
+ * @function 设置第三路流音频类型
2569
+ * @param {number} type 音频类型 0:静音 / 1:麦克风 / 2:拉流的声音 / 3:1+2 / 4:麦克风+扬声器(音乐+拉流)(带外部混音) /8:麦克风+扬声器(音乐+拉流)(不带外部混音)/16:扬声器(音乐)(没有拉流,没有外部混音,没有麦克风)
2570
+ * @return: Promise
2571
+ */
2572
+ const setThirdAudioType = (type) => {
2573
+ return callMethod('SetThirdAudioType', { type })
2574
+ };
2428
2575
 
2429
2576
  //加载截屏插件
2430
2577
  const LoadCollectionOutputEntry2 = () => {
@@ -2983,5 +3130,8 @@ export default {
2983
3130
  addListener,
2984
3131
  stopCheckDevice,
2985
3132
  getDeviceCheckInitStatus,
2986
- setDeviceCheckInitStatus
3133
+ setDeviceCheckInitStatus,
3134
+ setThirdAudioType,
3135
+ startmixStreams,
3136
+ stopMixtStreams
2987
3137
  };
@@ -198,7 +198,6 @@ function caculateDeatailArgs(baseArgs, cloudData) {
198
198
  extensionVersion: baseArgs.extension.version.agora || '1.0.0.0',
199
199
  appId: cloudData.appId,
200
200
  usersign: 'testsign',
201
- teacherId: baseArgs.teacherId
202
201
  }),
203
202
  trtc: Object.assign({}, commonArgs, liveConfig, {
204
203
  extensionVersion: baseArgs.extension.version.trtc || '1.0.0.0',
@@ -384,6 +383,7 @@ const zbysdk = {
384
383
  defaultApi.writeLog(`sdk status : setAudioCallbackType , sdk_type : ${sdk_type}`);
385
384
  try {
386
385
  await liveBaseApi.setAudioCallbackType(sdk_type);
386
+ await zbyAVSDK.setThirdAudioCallbackType(sdk_type);
387
387
  } catch (e) {
388
388
  defaultApi.writeLog(`sdk status : setAudioCallbackType , error : ${JSON.stringify(e)}`);
389
389
  };
@@ -576,7 +576,9 @@ const zbysdk = {
576
576
  }
577
577
 
578
578
  try {
579
+ console.log('开始设置rtmp声音回调',sdk_type);
579
580
  await liveBaseApi.setAudioCallbackType(sdk_type);
581
+ await zbyAVSDK.setThirdAudioCallbackType(sdk_type);
580
582
  } catch (error) {
581
583
  defaultApi.writeLog(`setAudioCallbackType error : ${JSON.stringify(error)}`);
582
584
  }
@@ -1518,6 +1520,16 @@ const zbysdk = {
1518
1520
  return zbyAVSDK.sendMediaSideInfo(info);
1519
1521
  },
1520
1522
 
1523
+ startMixStreams(urls) {
1524
+ defaultApi.writeLog('sdk action: startMixStream');
1525
+ return zbyAVSDK.startMixStreams(urls);
1526
+ },
1527
+
1528
+ stopMixtStreams(urls) {
1529
+ defaultApi.writeLog('sdk action: stopMixtStreams');
1530
+ return zbyAVSDK.stopMixtStreams(urls);
1531
+ },
1532
+
1521
1533
  /**
1522
1534
  * @function 切换sdk类型
1523
1535
  * @return: Promise