zby-live-sdk
Version:
This is a live SDK for weclassroom.
27,150 lines • 840 kB
JavaScript
/*!
* zby-live-sdk.js v1.0.49-beta-20260807
* 2026-8-7 why
* Released By TAL Weclassroom.
*/
'use strict';
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var MD5 = _interopDefault(require('md5'));
var axios = _interopDefault(require('axios'));
var Qs = _interopDefault(require('qs'));
var io = _interopDefault(require('socket.io-client'));
var Protocol = _interopDefault(require('pomelo-protocol'));
var Protobuf = _interopDefault(require('pomelo-protobuf'));
var pako = _interopDefault(require('pako'));
function _typeof(obj) {
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
_typeof = function (obj) {
return typeof obj;
};
} else {
_typeof = function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
}
return _typeof(obj);
}
var REACT_ELEMENT_TYPE;
function _jsx(type, props, key, children) {
if (!REACT_ELEMENT_TYPE) {
REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7;
}
var defaultProps = type && type.defaultProps;
var childrenLength = arguments.length - 3;
if (!props && childrenLength !== 0) {
props = {
children: void 0
};
}
if (props && defaultProps) {
for (var propName in defaultProps) {
if (props[propName] === void 0) {
props[propName] = defaultProps[propName];
}
}
} else if (!props) {
props = defaultProps || {};
}
if (childrenLength === 1) {
props.children = children;
} else if (childrenLength > 1) {
var childArray = new Array(childrenLength);
for (var i = 0; i < childrenLength; i++) {
childArray[i] = arguments[i + 3];
}
props.children = childArray;
}
return {
$$typeof: REACT_ELEMENT_TYPE,
type: type,
key: key === undefined ? null : '' + key,
ref: null,
props: props,
_owner: null
};
}
function _asyncIterator(iterable) {
var method;
if (typeof Symbol === "function") {
if (Symbol.asyncIterator) {
method = iterable[Symbol.asyncIterator];
if (method != null) return method.call(iterable);
}
if (Symbol.iterator) {
method = iterable[Symbol.iterator];
if (method != null) return method.call(iterable);
}
}
throw new TypeError("Object is not async iterable");
}
function _AwaitValue(value) {
this.wrapped = value;
}
function _AsyncGenerator(gen) {
var front, back;
function send(key, arg) {
return new Promise(function (resolve, reject) {
var request = {
key: key,
arg: arg,
resolve: resolve,
reject: reject,
next: null
};
if (back) {
back = back.next = request;
} else {
front = back = request;
resume(key, arg);
}
});
}
function resume(key, arg) {
try {
var result = gen[key](arg);
var value = result.value;
var wrappedAwait = value instanceof _AwaitValue;
Promise.resolve(wrappedAwait ? value.wrapped : value).then(function (arg) {
if (wrappedAwait) {
resume("next", arg);
return;
}
settle(result.done ? "return" : "normal", arg);
}, function (err) {
resume("throw", err);
});
} catch (err) {
settle("throw", err);
}
}
function settle(type, value) {
switch (type) {
case "return":
front.resolve({
value: value,
done: true
});
break;
case "throw":
front.reject(value);
break;
default:
front.resolve({
value: value,
done: false
});
break;
}
front = front.next;
if (front) {
resume(front.key, front.arg);
} else {
back = null;
}
}
this._invoke = send;
if (typeof gen.return !== "function") {
this.return = undefined;
}
}
if (typeof Symbol === "function" && Symbol.asyncIterator) {
_AsyncGenerator.prototype[Symbol.asyncIterator] = function () {
return this;
};
}
_AsyncGenerator.prototype.next = function (arg) {
return this._invoke("next", arg);
};
_AsyncGenerator.prototype.throw = function (arg) {
return this._invoke("throw", arg);
};
_AsyncGenerator.prototype.return = function (arg) {
return this._invoke("return", arg);
};
function _wrapAsyncGenerator(fn) {
return function () {
return new _AsyncGenerator(fn.apply(this, arguments));
};
}
function _awaitAsyncGenerator(value) {
return new _AwaitValue(value);
}
function _asyncGeneratorDelegate(inner, awaitWrap) {
var iter = {},
waiting = false;
function pump(key, value) {
waiting = true;
value = new Promise(function (resolve) {
resolve(inner[key](value));
});
return {
done: false,
value: awaitWrap(value)
};
}
;
if (typeof Symbol === "function" && Symbol.iterator) {
iter[Symbol.iterator] = function () {
return this;
};
}
iter.next = function (value) {
if (waiting) {
waiting = false;
return value;
}
return pump("next", value);
};
if (typeof inner.throw === "function") {
iter.throw = function (value) {
if (waiting) {
waiting = false;
throw value;
}
return pump("throw", value);
};
}
if (typeof inner.return === "function") {
iter.return = function (value) {
return pump("return", value);
};
}
return iter;
}
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _asyncToGenerator(fn) {
return function () {
var self = this,
args = arguments;
return new Promise(function (resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
}
function _throw(err) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
}
_next(undefined);
});
};
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
return Constructor;
}
function _defineEnumerableProperties(obj, descs) {
for (var key in descs) {
var desc = descs[key];
desc.configurable = desc.enumerable = true;
if ("value" in desc) desc.writable = true;
Object.defineProperty(obj, key, desc);
}
if (Object.getOwnPropertySymbols) {
var objectSymbols = Object.getOwnPropertySymbols(descs);
for (var i = 0; i < objectSymbols.length; i++) {
var sym = objectSymbols[i];
var desc = descs[sym];
desc.configurable = desc.enumerable = true;
if ("value" in desc) desc.writable = true;
Object.defineProperty(obj, sym, desc);
}
}
return obj;
}
function _defaults(obj, defaults) {
var keys = Object.getOwnPropertyNames(defaults);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var value = Object.getOwnPropertyDescriptor(defaults, key);
if (value && value.configurable && obj[key] === undefined) {
Object.defineProperty(obj, key, value);
}
}
return obj;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === 'function') {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function (key) {
_defineProperty(target, key, source[key]);
});
}
return target;
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
if (superClass) _setPrototypeOf(subClass, superClass);
}
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
subClass.__proto__ = superClass;
}
function _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
if (Reflect.construct.sham) return false;
if (typeof Proxy === "function") return true;
try {
Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
return true;
} catch (e) {
return false;
}
}
function _construct(Parent, args, Class) {
if (isNativeReflectConstruct()) {
_construct = Reflect.construct;
} else {
_construct = function _construct(Parent, args, Class) {
var a = [null];
a.push.apply(a, args);
var Constructor = Function.bind.apply(Parent, a);
var instance = new Constructor();
if (Class) _setPrototypeOf(instance, Class.prototype);
return instance;
};
}
return _construct.apply(null, arguments);
}
function _isNativeFunction(fn) {
return Function.toString.call(fn).indexOf("[native code]") !== -1;
}
function _wrapNativeSuper(Class) {
var _cache = typeof Map === "function" ? new Map() : undefined;
_wrapNativeSuper = function _wrapNativeSuper(Class) {
if (Class === null || !_isNativeFunction(Class)) return Class;
if (typeof Class !== "function") {
throw new TypeError("Super expression must either be null or a function");
}
if (typeof _cache !== "undefined") {
if (_cache.has(Class)) return _cache.get(Class);
_cache.set(Class, Wrapper);
}
function Wrapper() {
return _construct(Class, arguments, _getPrototypeOf(this).constructor);
}
Wrapper.prototype = Object.create(Class.prototype, {
constructor: {
value: Wrapper,
enumerable: false,
writable: true,
configurable: true
}
});
return _setPrototypeOf(Wrapper, Class);
};
return _wrapNativeSuper(Class);
}
function _instanceof(left, right) {
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
return right[Symbol.hasInstance](left);
} else {
return left instanceof right;
}
}
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule) {
return obj;
} else {
var newObj = {};
if (obj != null) {
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
if (desc.get || desc.set) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
}
newObj.default = obj;
return newObj;
}
}
function _newArrowCheck(innerThis, boundThis) {
if (innerThis !== boundThis) {
throw new TypeError("Cannot instantiate an arrow function");
}
}
function _objectDestructuringEmpty(obj) {
if (obj == null) throw new TypeError("Cannot destructure undefined");
}
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
function _objectWithoutProperties(source, excluded) {
if (source == null) return {};
var target = _objectWithoutPropertiesLoose(source, excluded);
var key, i;
if (Object.getOwnPropertySymbols) {
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
for (i = 0; i < sourceSymbolKeys.length; i++) {
key = sourceSymbolKeys[i];
if (excluded.indexOf(key) >= 0) continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
target[key] = source[key];
}
}
return target;
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function _possibleConstructorReturn(self, call) {
if (call && (typeof call === "object" || typeof call === "function")) {
return call;
}
return _assertThisInitialized(self);
}
function _superPropBase(object, property) {
while (!Object.prototype.hasOwnProperty.call(object, property)) {
object = _getPrototypeOf(object);
if (object === null) break;
}
return object;
}
function _get(target, property, receiver) {
if (typeof Reflect !== "undefined" && Reflect.get) {
_get = Reflect.get;
} else {
_get = function _get(target, property, receiver) {
var base = _superPropBase(target, property);
if (!base) return;
var desc = Object.getOwnPropertyDescriptor(base, property);
if (desc.get) {
return desc.get.call(receiver);
}
return desc.value;
};
}
return _get(target, property, receiver || target);
}
function set(target, property, value, receiver) {
if (typeof Reflect !== "undefined" && Reflect.set) {
set = Reflect.set;
} else {
set = function set(target, property, value, receiver) {
var base = _superPropBase(target, property);
var desc;
if (base) {
desc = Object.getOwnPropertyDescriptor(base, property);
if (desc.set) {
desc.set.call(receiver, value);
return true;
} else if (!desc.writable) {
return false;
}
}
desc = Object.getOwnPropertyDescriptor(receiver, property);
if (desc) {
if (!desc.writable) {
return false;
}
desc.value = value;
Object.defineProperty(receiver, property, desc);
} else {
_defineProperty(receiver, property, value);
}
return true;
};
}
return set(target, property, value, receiver);
}
function _set(target, property, value, receiver, isStrict) {
var s = set(target, property, value, receiver || target);
if (!s && isStrict) {
throw new Error('failed to set property');
}
return value;
}
function _taggedTemplateLiteral(strings, raw) {
if (!raw) {
raw = strings.slice(0);
}
return Object.freeze(Object.defineProperties(strings, {
raw: {
value: Object.freeze(raw)
}
}));
}
function _taggedTemplateLiteralLoose(strings, raw) {
if (!raw) {
raw = strings.slice(0);
}
strings.raw = raw;
return strings;
}
function _temporalRef(val, name) {
if (val === _temporalUndefined) {
throw new ReferenceError(name + " is not defined - temporal dead zone");
} else {
return val;
}
}
function _readOnlyError(name) {
throw new Error("\"" + name + "\" is read-only");
}
function _classNameTDZError(name) {
throw new Error("Class \"" + name + "\" cannot be referenced in computed property keys.");
}
var _temporalUndefined = {};
function _slicedToArray(arr, i) {
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();
}
function _slicedToArrayLoose(arr, i) {
return _arrayWithHoles(arr) || _iterableToArrayLimitLoose(arr, i) || _nonIterableRest();
}
function _toArray(arr) {
return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest();
}
function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
}
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) {
for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
return arr2;
}
}
function _arrayWithHoles(arr) {
if (Array.isArray(arr)) return arr;
}
function _iterableToArray(iter) {
if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
}
function _iterableToArrayLimit(arr, i) {
var _arr = [];
var _n = true;
var _d = false;
var _e = undefined;
try {
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
_arr.push(_s.value);
if (i && _arr.length === i) break;
}
} catch (err) {
_d = true;
_e = err;
} finally {
try {
if (!_n && _i["return"] != null) _i["return"]();
} finally {
if (_d) throw _e;
}
}
return _arr;
}
function _iterableToArrayLimitLoose(arr, i) {
var _arr = [];
for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {
_arr.push(_step.value);
if (i && _arr.length === i) break;
}
return _arr;
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance");
}
function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance");
}
function _skipFirstGeneratorNext(fn) {
return function () {
var it = fn.apply(this, arguments);
it.next();
return it;
};
}
function _toPrimitive(input, hint) {
if (typeof input !== "object" || input === null) return input;
var prim = input[Symbol.toPrimitive];
if (prim !== undefined) {
var res = prim.call(input, hint || "default");
if (typeof res !== "object") return res;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return (hint === "string" ? String : Number)(input);
}
function _toPropertyKey(arg) {
var key = _toPrimitive(arg, "string");
return typeof key === "symbol" ? key : String(key);
}
function _initializerWarningHelper(descriptor, context) {
throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and set to use loose mode. ' + 'To use proposal-class-properties in spec mode with decorators, wait for ' + 'the next major version of decorators in stage 2.');
}
function _initializerDefineProperty(target, property, descriptor, context) {
if (!descriptor) return;
Object.defineProperty(target, property, {
enumerable: descriptor.enumerable,
configurable: descriptor.configurable,
writable: descriptor.writable,
value: descriptor.initializer ? descriptor.initializer.call(context) : void 0
});
}
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
var desc = {};
Object['ke' + 'ys'](descriptor).forEach(function (key) {
desc[key] = descriptor[key];
});
desc.enumerable = !!desc.enumerable;
desc.configurable = !!desc.configurable;
if ('value' in desc || desc.initializer) {
desc.writable = true;
}
desc = decorators.slice().reverse().reduce(function (desc, decorator) {
return decorator(target, property, desc) || desc;
}, desc);
if (context && desc.initializer !== void 0) {
desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
desc.initializer = undefined;
}
if (desc.initializer === void 0) {
Object['define' + 'Property'](target, property, desc);
desc = null;
}
return desc;
}
var id$1 = 0;
function _classPrivateFieldLooseKey(name) {
return "__private_" + id$1++ + "_" + name;
}
function _classPrivateFieldLooseBase(receiver, privateKey) {
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
throw new TypeError("attempted to use private field on non-instance");
}
return receiver;
}
function _classPrivateFieldGet(receiver, privateMap) {
if (!privateMap.has(receiver)) {
throw new TypeError("attempted to get private field on non-instance");
}
return privateMap.get(receiver).value;
}
function _classPrivateFieldSet(receiver, privateMap, value) {
if (!privateMap.has(receiver)) {
throw new TypeError("attempted to set private field on non-instance");
}
var descriptor = privateMap.get(receiver);
if (!descriptor.writable) {
throw new TypeError("attempted to set read only private field");
}
descriptor.value = value;
return value;
}
function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {
if (receiver !== classConstructor) {
throw new TypeError("Private static access of wrong provenance");
}
return descriptor.value;
}
function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) {
if (receiver !== classConstructor) {
throw new TypeError("Private static access of wrong provenance");
}
if (!descriptor.writable) {
throw new TypeError("attempted to set read only private field");
}
descriptor.value = value;
return value;
}
function _decorate(decorators, factory, superClass) {
var r = factory(function initialize(O) {
_initializeInstanceElements(O, decorated.elements);
}, superClass);
var decorated = _decorateClass(_coalesceClassElements(r.d.map(_createElementDescriptor)), decorators);
_initializeClassElements(r.F, decorated.elements);
return _runClassFinishers(r.F, decorated.finishers);
}
function _createElementDescriptor(def) {
var key = _toPropertyKey(def.key);
var descriptor;
if (def.kind === "method") {
descriptor = {
value: def.value,
writable: true,
configurable: true,
enumerable: false
};
Object.defineProperty(def.value, "name", {
value: typeof key === "symbol" ? "" : key,
configurable: true
});
} else if (def.kind === "get") {
descriptor = {
get: def.value,
configurable: true,
enumerable: false
};
} else if (def.kind === "set") {
descriptor = {
set: def.value,
configurable: true,
enumerable: false
};
} else if (def.kind === "field") {
descriptor = {
configurable: true,
writable: true,
enumerable: true
};
}
var element = {
kind: def.kind === "field" ? "field" : "method",
key: key,
placement: def.static ? "static" : def.kind === "field" ? "own" : "prototype",
descriptor: descriptor
};
if (def.decorators) element.decorators = def.decorators;
if (def.kind === "field") element.initializer = def.value;
return element;
}
function _coalesceGetterSetter(element, other) {
if (element.descriptor.get !== undefined) {
other.descriptor.get = element.descriptor.get;
} else {
other.descriptor.set = element.descriptor.set;
}
}
function _coalesceClassElements(elements) {
var newElements = [];
var isSameElement = function (other) {
return other.kind === "method" && other.key === element.key && other.placement === element.placement;
};
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
var other;
if (element.kind === "method" && (other = newElements.find(isSameElement))) {
if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {
if (_hasDecorators(element) || _hasDecorators(other)) {
throw new ReferenceError("Duplicated methods (" + element.key + ") can't be decorated.");
}
other.descriptor = element.descriptor;
} else {
if (_hasDecorators(element)) {
if (_hasDecorators(other)) {
throw new ReferenceError("Decorators can't be placed on different accessors with for " + "the same property (" + element.key + ").");
}
other.decorators = element.decorators;
}
_coalesceGetterSetter(element, other);
}
} else {
newElements.push(element);
}
}
return newElements;
}
function _hasDecorators(element) {
return element.decorators && element.decorators.length;
}
function _isDataDescriptor(desc) {
return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);
}
function _initializeClassElements(F, elements) {
var proto = F.prototype;
["method", "field"].forEach(function (kind) {
elements.forEach(function (element) {
var placement = element.placement;
if (element.kind === kind && (placement === "static" || placement === "prototype")) {
var receiver = placement === "static" ? F : proto;
_defineClassElement(receiver, element);
}
});
});
}
function _initializeInstanceElements(O, elements) {
["method", "field"].forEach(function (kind) {
elements.forEach(function (element) {
if (element.kind === kind && element.placement === "own") {
_defineClassElement(O, element);
}
});
});
}
function _defineClassElement(receiver, element) {
var descriptor = element.descriptor;
if (element.kind === "field") {
var initializer = element.initializer;
descriptor = {
enumerable: descriptor.enumerable,
writable: descriptor.writable,
configurable: descriptor.configurable,
value: initializer === void 0 ? void 0 : initializer.call(receiver)
};
}
Object.defineProperty(receiver, element.key, descriptor);
}
function _decorateClass(elements, decorators) {
var newElements = [];
var finishers = [];
var placements = {
static: [],
prototype: [],
own: []
};
elements.forEach(function (element) {
_addElementPlacement(element, placements);
});
elements.forEach(function (element) {
if (!_hasDecorators(element)) return newElements.push(element);
var elementFinishersExtras = _decorateElement(element, placements);
newElements.push(elementFinishersExtras.element);
newElements.push.apply(newElements, elementFinishersExtras.extras);
finishers.push.apply(finishers, elementFinishersExtras.finishers);
});
if (!decorators) {
return {
elements: newElements,
finishers: finishers
};
}
var result = _decorateConstructor(newElements, decorators);
finishers.push.apply(finishers, result.finishers);
result.finishers = finishers;
return result;
}
function _addElementPlacement(element, placements, silent) {
var keys = placements[element.placement];
if (!silent && keys.indexOf(element.key) !== -1) {
throw new TypeError("Duplicated element (" + element.key + ")");
}
keys.push(element.key);
}
function _decorateElement(element, placements) {
var extras = [];
var finishers = [];
for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {
var keys = placements[element.placement];
keys.splice(keys.indexOf(element.key), 1);
var elementObject = _fromElementDescriptor(element);
var elementFinisherExtras = _toElementFinisherExtras((0, decorators[i])(elementObject) || elementObject);
element = elementFinisherExtras.element;
_addElementPlacement(element, placements);
if (elementFinisherExtras.finisher) {
finishers.push(elementFinisherExtras.finisher);
}
var newExtras = elementFinisherExtras.extras;
if (newExtras) {
for (var j = 0; j < newExtras.length; j++) {
_addElementPlacement(newExtras[j], placements);
}
extras.push.apply(extras, newExtras);
}
}
return {
element: element,
finishers: finishers,
extras: extras
};
}
function _decorateConstructor(elements, decorators) {
var finishers = [];
for (var i = decorators.length - 1; i >= 0; i--) {
var obj = _fromClassDescriptor(elements);
var elementsAndFinisher = _toClassDescriptor((0, decorators[i])(obj) || obj);
if (elementsAndFinisher.finisher !== undefined) {
finishers.push(elementsAndFinisher.finisher);
}
if (elementsAndFinisher.elements !== undefined) {
elements = elementsAndFinisher.elements;
for (var j = 0; j < elements.length - 1; j++) {
for (var k = j + 1; k < elements.length; k++) {
if (elements[j].key === elements[k].key && elements[j].placement === elements[k].placement) {
throw new TypeError("Duplicated element (" + elements[j].key + ")");
}
}
}
}
}
return {
elements: elements,
finishers: finishers
};
}
function _fromElementDescriptor(element) {
var obj = {
kind: element.kind,
key: element.key,
placement: element.placement,
descriptor: element.descriptor
};
var desc = {
value: "Descriptor",
configurable: true
};
Object.defineProperty(obj, Symbol.toStringTag, desc);
if (element.kind === "field") obj.initializer = element.initializer;
return obj;
}
function _toElementDescriptors(elementObjects) {
if (elementObjects === undefined) return;
return _toArray(elementObjects).map(function (elementObject) {
var element = _toElementDescriptor(elementObject);
_disallowProperty(elementObject, "finisher", "An element descriptor");
_disallowProperty(elementObject, "extras", "An element descriptor");
return element;
});
}
function _toElementDescriptor(elementObject) {
var kind = String(elementObject.kind);
if (kind !== "method" && kind !== "field") {
throw new TypeError('An element descriptor\'s .kind property must be either "method" or' + ' "field", but a decorator created an element descriptor with' + ' .kind "' + kind + '"');
}
var key = _toPropertyKey(elementObject.key);
var placement = String(elementObject.placement);
if (placement !== "static" && placement !== "prototype" && placement !== "own") {
throw new TypeError('An element descriptor\'s .placement property must be one of "static",' + ' "prototype" or "own", but a decorator created an element descriptor' + ' with .placement "' + placement + '"');
}
var descriptor = elementObject.descriptor;
_disallowProperty(elementObject, "elements", "An element descriptor");
var element = {
kind: kind,
key: key,
placement: placement,
descriptor: Object.assign({}, descriptor)
};
if (kind !== "field") {
_disallowProperty(elementObject, "initializer", "A method descriptor");
} else {
_disallowProperty(descriptor, "get", "The property descriptor of a field descriptor");
_disallowProperty(descriptor, "set", "The property descriptor of a field descriptor");
_disallowProperty(descriptor, "value", "The property descriptor of a field descriptor");
element.initializer = elementObject.initializer;
}
return element;
}
function _toElementFinisherExtras(elementObject) {
var element = _toElementDescriptor(elementObject);
var finisher = _optionalCallableProperty(elementObject, "finisher");
var extras = _toElementDescriptors(elementObject.extras);
return {
element: element,
finisher: finisher,
extras: extras
};
}
function _fromClassDescriptor(elements) {
var obj = {
kind: "class",
elements: elements.map(_fromElementDescriptor)
};
var desc = {
value: "Descriptor",
configurable: true
};
Object.defineProperty(obj, Symbol.toStringTag, desc);
return obj;
}
function _toClassDescriptor(obj) {
var kind = String(obj.kind);
if (kind !== "class") {
throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator' + ' created a class descriptor with .kind "' + kind + '"');
}
_disallowProperty(obj, "key", "A class descriptor");
_disallowProperty(obj, "placement", "A class descriptor");
_disallowProperty(obj, "descriptor", "A class descriptor");
_disallowProperty(obj, "initializer", "A class descriptor");
_disallowProperty(obj, "extras", "A class descriptor");
var finisher = _optionalCallableProperty(obj, "finisher");
var elements = _toElementDescriptors(obj.elements);
return {
elements: elements,
finisher: finisher
};
}
function _disallowProperty(obj, name, objectType) {
if (obj[name] !== undefined) {
throw new TypeError(objectType + " can't have a ." + name + " property.");
}
}
function _optionalCallableProperty(obj, name) {
var value = obj[name];
if (value !== undefined && typeof value !== "function") {
throw new TypeError("Expected '" + name + "' to be a function");
}
return value;
}
function _runClassFinishers(constructor, finishers) {
for (var i = 0; i < finishers.length; i++) {
var newConstructor = (0, finishers[i])(constructor);
if (newConstructor !== undefined) {
if (typeof newConstructor !== "function") {
throw new TypeError("Finishers must return a constructor.");
}
constructor = newConstructor;
}
}
return constructor;
}
function _classPrivateMethodGet(receiver, privateSet, fn) {
if (!privateSet.has(receiver)) {
throw new TypeError("attempted to get private field on non-instance");
}
return fn;
}
function _classPrivateMethodSet() {
throw new TypeError("attempted to reassign private method");
}
var prefix = {
dev: 'dev-',
test: 'test-',
pre: 'pre-',
online: ''
};
var urls = {
api: 'api.weclassroom.com',
report: 's.weclassroom.com'
};
var INSTITUTIONID_APPID_MAP = {
test: {
'2020': '580745',
//素养小班课
'1062': 'd46144',
//素养大班课(小组课、通用课)
'2021': 'c907b9',
//素养组合小班课
'1187': '580745',
//素养同城课
'2022': '',
//素养伴学
'2023': 'c1de11',
//素养1v1
'3000': '388257',
//乐读小组
'3001': '714eb2',
//乐读小班
'3004': 'c2813e',
//乐读伴学
'3005': '714eb2',
//saas自习室
'3006': '2d0893' //乐乐课堂
},
online: {
'2020': '05214e',
//素养小班课
'1134': '4f1786',
//素养大班课(小组课、通用课)
'2021': 'cca684',
//素养组合小班课
'1187': '05214e',
//素养同城课
'2022': '',
//素养伴学
'2023': '68caa7',
//素养1v1
'3000': 'c82956',
//乐读小组
'3001': '812bb0',
//乐读小班
'3004': '3f5e09',
//乐读伴学
'3005': '812bb0',
//saas自习室
'3006': '2d0893' //乐乐课堂
}
};
var version = '1.0.49-beta-20260807'; // export const version = '1.0.49-beta-saas-20230804';
var liveExt = {
name: 'live',
version: '1.0.0.0'
};
var toolExt = {
name: 'tool',
version: '1.0.0.0'
};
var defaultExt = {
name: 'default_ext',
version: '1.0.0.0'
};
var zegoExt = {
name: 'zego_ext',
version: '1.0.0.0'
};
var utilitiesExt = {
name: 'utilities_ext',
version: '1.0.0.0'
};
var talrtcExt = {
name: 'talrtc_ext',
version: '1.0.0.0'
}; // 小班=0,大班=1
var classType = 0;
var productName$1 = 'zby-live-sdk';
var zegoSdkName = 'zego';
var talSdkName = 'Tal';
var rtcSdkName = 'rtc';
var tmSdkName = 'tm';
var talrtcSdkName = 'talrtc';
var extensionInfo = {
version: {
default_ext: '1.0.0.0' // arora : '1.0.0.1',
// rtc : '1.0.0.0',
// zego : '1.0.0.0',
// tool : '1.0.0.0'
}
};
var config = {
isHttps: true,
env: 'test',
weblog: true,
businessLinesType: 'saas' // saas | xes
};
var getBaseUrl = function getBaseUrl() {
var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'api';
var isHttps = config.isHttps,
env = config.env;
return "".concat(isHttps ? 'https://' : 'http://').concat(prefix[env ? env : 'online']).concat(urls[type]);
};
var getCloudApiDomain = function getCloudApiDomain() {
if (window.zby_sdk_cloud_api_domain) {
return window.zby_sdk_cloud_api_domain;
}
return getBaseUrl();
};
var reportUrls = {
// test: 'test-dp.weclassroom.com:10443/report',
// online: 'dp.weclassroom.com:443/report'
test: 'testdp-s.weclassroom.com/report',
online: 'dp-s.weclassroom.com/report '
};
var logAddressInit = {
test: 'live_test_log',
online: 'live_log'
}; // 从三方服务器获取时间戳
var timestampUrl = {
suning: 'https://quan.suning.com/getSysTime.do',
taobao: 'https://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp'
}; // 获取初始化数据
var apiCloudUrl = {
saas: {
test: 'https://test-api-cloud-control-zhibo.saasp.vdyoo.com/live-cloud-control',
online: 'https://api-cloud-control-zhibo.saasp.vdyoo.com/live-cloud-control'
},
xes: {
test: 'https://test-api-cloud-control-zhibo.speiyou.com/live-cloud-control',
online: 'https://api-cloud-control-zhibo.speiyou.com/live-cloud-control'
}
}; //切换sdk类型
var apiChangeSdkUrl = {
saas: {
test: 'https://test-cloud-platform-live.saasp.vdyoo.com/cloud-platform',
online: 'https://cloud-platform-live.saasp.vdyoo.com/cloud-platform'
},
xes: {
test: 'https://test-cloud-platform-live.speiyou.com/cloud-platform',
online: 'https://cloud-platform-live.speiyou.com/cloud-platform'
}
};
var rtcTokenUrl = {
test: 'https://api2.xueersi.com/rtcapi2stage/peiyou/getRtcToken',
online: 'https://api2.xueersi.com/rtcapi2/peiyou/getRtcToken'
};
var rtcTokenBackupUrl = {
test: 'https://rtcapi2.eaydu.com/peiyou/getRtcToken',
online: 'https://rtcapi2.eaydu.com/peiyou/getRtcToken'
};
var rtcTokenTimeoutConfig = {
primary: {
timeout: 5000,
retries: 3
},
backup: {
timeouts: [4000, 8000, 8000, 8000, 16000, 16000],
retries: 5
}
};
var getApiCloudBaseUrl$1 = function getApiCloudBaseUrl() {
var env = config.env,
businessLinesType = config.businessLinesType;
return apiCloudUrl[businessLinesType] && apiCloudUrl[businessLinesType][env];
};
var getApiChangeSdkUrl = function getApiChangeSdkUrl() {
var env = config.env,
businessLinesType = config.businessLinesType;
return apiChangeSdkUrl[businessLinesType] && apiChangeSdkUrl[businessLinesType][env];
};
var dabanReportUrl = '';
var logAddress = '';
var getReportBaseUrl = function getReportBaseUrl() {
if (dabanReportUrl) {
return dabanReportUrl;
}
var env = config.env;
return "https://".concat(reportUrls[env]);
};
var getLogAddress = function getLogAddress() {
var env = config.env;
console.log("logAddresshsghsg ".concat(env, " ").concat(logAddressInit[env]));
logAddress = logAddressInit[env]; // return logAddress;
};
var getapiChangeSdkUrl = function getapiChangeSdkUrl() {
var env = config.env,
businessLinesType = config.businessLinesType;
return apiChangeSdkUrl[businessLinesType] && apiChangeSdkUrl[businessLinesType][env];
};
var getAppIdByInstitutionId = function getAppIdByInstitutionId(institutionId) {
var env = config.env;
var institutionIdAppIdMap = INSTITUTIONID_APPID_MAP[env];
if (!institutionIdAppIdMap) return;
return institutionIdAppIdMap[institutionId];
};
var getRTCTokenUrl = function getRTCTokenUrl() {
var env = config.env;
return rtcTokenUrl[env];
}; // 根据当前环境(test/online)返回对应的备用域名URL
var getRTCTokenBackupUrl = function getRTCTokenBackupUrl() {
var env = config.env;
return rtcTokenBackupUrl[env];
}; // 返回完整的超时配置对象,供其他模块使用
var getRTCTokenTimeoutConfig = function getRTCTokenTimeoutConfig() {
return rtcTokenTimeoutConfig;
};
/**
* pomelo备用域名
* @type {{ host: string, port: number }[]}
*/
var pomeloBackupDomains = [];
var globalConfig = {
version: version,
extensionInfo: extensionInfo,
getBaseUrl: getBaseUrl,
pomeloBackupDomains: pomeloBackupDomains,
usePomelo: true,
config: config
};
var EM$1 = window.EM;
var cb = function cb(extName) {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$1) {
return function (name, args, sdkName) {
var argsStr = _typeof(args) === 'object' ? JSON.stringify(_objectSpread({}, args, {
classType: classType
})) : args;
return new Promise(function (resolve, reject) {
EM$1.CallMethod(extName, name, argsStr, function (code, msg) {
var msgbody = "".concat(extName, "--action: ").concat(sdkName || '', "--").concat(name || name.charAt(0).toLowerCase() + name.slice(1), " Code: ").concat(code, "\nMessage: ").concat(msg, "\nparams:").concat(JSON.stringify(args));
if (code === 0) {
name !== 'WriteLog' && defaultApi.writeLog && defaultApi.writeLog(msgbody, productName);
resolve({
code: code,
msg: msg && /\{|\}/g.test(msg) && JSON.parse(msg)
});
} else {
name !== 'WriteLog' && defaultApi.writeLog && defaultApi.writeLog(msgbody, productName, 'error');
resolve({
code: code,
msg: msg
});
}
});
}).catch(function () {
name !== 'WriteLog' && defaultApi.writeLog && defaultApi.writeLog("".concat(extName, "--action: ").concat(sdkName || '', "--").concat(name || name.charAt(0).toLowerCase() + name.slice(1), " Code: ").concat(code, "\nMessage: ").concat(msg, "\nparams:").concat(JSON.stringify(args)), productName, 'error');
});
};
}
};
var callMethod = cb(defaultExt.name);
var BASSAPI = {
// 初始化
init: function init() {
// 加载扩展
if (EM$1) {
return new Promise(function (resolve) {
EM$1.Load(defaultExt.name, defaultExt.version, false, function () {
resolve();
});
});
}
},
writeLog: function writeLog(args) {
return callMethod('WriteLog', args);
},
/**
* @function 设置用户信息
* @param {string} userId 用户id
* @param {string} institutionId 机构id
* @return: void
*/
setUserInfo: function setUserInfo(userId, institutionId) {
return callMethod('SetUserInfo', {
user_id: userId + '',
institution_id: institutionId + '',
description: ''
});
}
};
/*eslint-disable*/
/*
* @Author: why
* @Date: 2020-05-25 17:07:03
* @LastEditors: why
* @LastEditTime: 2020-05-25 17:41:42
* @Description:
*/
/**
* [js-sha256]{@link https://github.com/emn178/js-sha256}
*
* @version 0.9.0
* @author Chen, Yi-Cyuan [emn178@gmail.com]
* @copyright Chen, Yi-Cyuan 2014-2017
* @license MIT
*/
/*jslint bitwise: true */
var ERROR = 'input is invalid type';
var WINDOW = (typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object';
var root = WINDOW ? window : {};
if (root.JS_SHA256_NO_WINDOW) {
WINDOW = false;
}
var WEB_WORKER = !WINDOW && (typeof self === "undefined" ? "undefined" : _typeof(self)) === 'object';
var NODE_JS = !root.JS_SHA256_NO_NODE_JS && (typeof process === "undefined" ? "undefined" : _typeof(process)) === 'object' && process.versions && process.versions.node;
if (NODE_JS) {
root = global;
} else if (WEB_WORKER) {
root = self;
}
var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
var HEX_CHARS = '0123456789abcdef'.split('');
var EXTRA = [-2147483648, 8388608, 32768, 128];
var SHIFT = [24, 16, 8, 0];
var K = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];
var blocks = [];
if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) {
Array.isArray = function (obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
};
}
if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {
ArrayBuffer.isView = function (obj) {
return _typeof(obj) === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
};
}
var createOutputMethod = function createOutputMethod(outputType, is224) {
return function (message) {
return new Sha256(is224, true).update(message)[outputType]();
};
};
var createMethod = function createMethod(is224) {
var method = createOutputMethod('hex', is224);
method.create = function () {
return new Sha256(is224);
};
method.update = function (message) {
return method.create().update(message);
};
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
method[type] = createOutputMethod(type, is224);
}
return method;
};
var createHmacOutputMethod = function createHmacOutputMethod(outputType, is224) {
return function (key, message) {
return new HmacSha256(key, is224, true).update(message)[outputType]();
};
};
var createHmacMethod = function createHmacMethod(is224) {
var method = createHmacOutputMethod('hex', is224);
method.create = function (key) {
return new HmacSha256(key, is224);
};
method.update = function (key, message) {
return method.create(key).update(message);
};
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
var type = OUTPUT_TYPES[i];
method[type] = createHmacOutputMethod(type, is224);
}
return method;
};
function Sha256(is224, sharedMemory) {
if (sharedMemory) {
blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
this.blocks = blocks;
} else {
this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
}
if (is224) {
this.h0 = 0xc1059ed8;
this.h1 = 0x367cd507;
this.h2 = 0x3070dd17;
this.h3 = 0xf70e5939;
this.h4 = 0xffc00b31;
this.h5 = 0x68581511;
this.h6 = 0x64f98fa7;
this.h7 = 0xbefa4fa4;
} else {
// 256
this.h0 = 0x6a09e667;
this.h1 = 0xbb67ae85;
this.h2 = 0x3c6ef372;
this.h3 = 0xa54ff53a;
this.h4 = 0x510e527f;
this.h5 = 0x9b05688c;
this.h6 = 0x1f83d9ab;
this.h7 = 0x5be0cd19;
}
this.block = this.start = this.bytes = this.hBytes = 0;
this.finalized = this.hashed = false;
this.first = true;
this.is224 = is224;
}
Sha256.prototype.update = function (message) {
if (this.finalized) {
return;
}
var notString,
type = _typeof(message);
if (type !== 'string') {
if (type === 'object') {
if (message === null) {
throw new Error(ERROR);
} else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
message = new Uint8Array(message);
} else if (!Array.isArray(message)) {
if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {
throw new Error(ERROR);
}
}
} else {
throw new Error(ERROR);
}
notString = true;
}
var code,
index = 0,
i,
length = message.length,
blocks = this.blocks;
while (index < length) {
if (this.hashed) {
this.hashed = false;
blocks[0] = this.block;
blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
}
if (notString) {
for (i = this.start; index < length && i < 64; ++index) {
blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
}
} else {
for (i = this.start; index < length && i < 64; ++index) {
code = message.charCodeAt(index);
if (code < 0x80) {
blocks[i >> 2] |= code << SHIFT[i++ & 3];
} else if (code < 0x800) {
blocks[i >> 2] |= (0xc0 | code >> 6) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
} else if (code < 0xd800 || code >= 0xe000) {
blocks[i >> 2] |= (0xe0 | code >> 12) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
} else {
code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff);
blocks[i >> 2] |= (0xf0 | code >> 18) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | code >> 12 & 0x3f) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];
blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
}
}
}
this.lastByteIndex = i;
this.bytes += i - this.start;
if (i >= 64) {
this.block = blocks[16];
this.start = i - 64;
this.hash();
this.hashed = true;
} else {
this.start = i;
}
}
if (this.bytes > 4294967295) {
this.hBytes += this.bytes / 4294967296 << 0;
this.bytes = this.bytes % 4294967296;
}
return this;
};
Sha256.prototype.finalize = function () {
if (this.finalized) {
return;
}
this.finalized = true;
var blocks = this.blocks,
i = this.lastByteIndex;
blocks[16] = this.block;
blocks[i >> 2] |= EXTRA[i & 3];
this.block = blocks[16];
if (i >= 56) {
if (!this.hashed) {
this.hash();
}
blocks[0] = this.block;
blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
}
blocks[14] = this.hBytes << 3 | this.bytes >>> 29;
blocks[15] = this.bytes << 3;
this.hash();
};
Sha256.prototype.hash = function () {
var a = this.h0,
b = this.h1,
c = this.h2,
d = this.h3,
e = this.h4,
f = this.h5,
g = this.h6,
h = this.h7,
blocks = this.blocks,
j,
s0,
s1,
maj,
t1,
t2,
ch,
ab,
da,
cd,
bc;
for (j = 16; j < 64; ++j) {
// rightrotate
t1 = blocks[j - 15];
s0 = (t1 >>> 7 | t1 << 25) ^ (t1 >>> 18 | t1 << 14) ^ t1 >>> 3;
t1 = blocks[j - 2];
s1 = (t1 >>> 17 | t1 << 15) ^ (t1 >>> 19 | t1 << 13) ^ t1 >>> 10;
blocks[j] = blocks[j - 16] + s0 + blocks[j - 7] + s1 << 0;
}
bc = b & c;
for (j = 0; j < 64; j += 4) {
if (this.first) {
if (this.is224) {
ab = 300032;
t1 = blocks[0] - 1413257819;
h = t1 - 150054599 << 0;
d = t1 + 24177077 << 0;
} else {
ab = 704751109;
t1 = blocks[0] - 210244248;
h = t1 - 1521486534 << 0;
d = t1 + 143694565 << 0;
}
this.first = false;
} else {
s0 = (a >>> 2 | a << 30) ^ (a >>> 13 | a << 19) ^ (a >>> 22 | a << 10);
s1 = (e >>> 6 | e << 26) ^ (e >>> 11 | e << 21) ^ (e >>> 25 | e << 7);
ab = a & b;
maj = ab ^ a & c ^ bc;
ch = e & f ^ ~e & g;
t1 = h + s1 + ch + K[j] + blocks[j];
t2 = s0 + maj;
h = d + t1 << 0;
d = t1 + t2 << 0;
}
s0 = (d >>> 2 | d << 30) ^ (d >>> 13 | d << 19) ^ (d >>> 22 | d << 10);
s1 = (h >>> 6 | h << 26) ^ (h >>> 11 | h << 21) ^ (h >>> 25 | h << 7);
da = d & a;
maj = da ^ d & b ^ ab;
ch = h & e ^ ~h & f;
t1 = g + s1 + ch + K[j + 1] + blocks[j + 1];
t2 = s0 + maj;
g = c + t1 << 0;
c = t1 + t2 << 0;
s0 = (c >>> 2 | c << 30) ^ (c >>> 13 | c << 19) ^ (c >>> 22 | c << 10);
s1 = (g >>> 6 | g << 26) ^ (g >>> 11 | g << 21) ^ (g >>> 25 | g << 7);
cd = c & d;
maj = cd ^ c & a ^ da;
ch = g & h ^ ~g & e;
t1 = f + s1 + ch + K[j + 2] + blocks[j + 2];
t2 = s0 + maj;
f = b + t1 << 0;
b = t1 + t2 << 0;
s0 = (b >>> 2 | b << 30) ^ (b >>> 13 | b << 19) ^ (b >>> 22 | b << 10);
s1 = (f >>> 6 | f << 26) ^ (f >>> 11 | f << 21) ^ (f >>> 25 | f << 7);
bc = b & c;
maj = bc ^ b & d ^ cd;
ch = f & g ^ ~f & h;
t1 = e + s1 + ch + K[j + 3] + blocks[j + 3];
t2 = s0 + maj;
e = a + t1 << 0;
a = t1 + t2 << 0;
}
this.h0 = this.h0 + a << 0;
this.h1 = this.h1 + b << 0;
this.h2 = this.h2 + c << 0;
this.h3 = this.h3 + d << 0;
this.h4 = this.h4 + e << 0;
this.h5 = this.h5 + f << 0;
this.h6 = this.h6 + g << 0;
this.h7 = this.h7 + h << 0;
};
Sha256.prototype.hex = function () {
this.finalize();
var h0 = this.h0,
h1 = this.h1,
h2 = this.h2,
h3 = this.h3,
h4 = this.h4,
h5 = this.h5,
h6 = this.h6,
h7 = this.h7;
var hex = HEX_CHARS[h0 >> 28 & 0x0F] + HEX_CHARS[h0 >> 24 & 0x0F] + HEX_CHARS[h0 >> 20 & 0x0F] + HEX_CHARS[h0 >> 16 & 0x0F] + HEX_CHARS[h0 >> 12 & 0x0F] + HEX_CHARS[h0 >> 8 & 0x0F] + HEX_CHARS[h0 >> 4 & 0x0F] + HEX_CHARS[h0 & 0x0F] + HEX_CHARS[h1 >> 28 & 0x0F] + HEX_CHARS[h1 >> 24 & 0x0F] + HEX_CHARS[h1 >> 20 & 0x0F] + HEX_CHARS[h1 >> 16 & 0x0F] + HEX_CHARS[h1 >> 12 & 0x0F] + HEX_CHARS[h1 >> 8 & 0x0F] + HEX_CHARS[h1 >> 4 & 0x0F] + HEX_CHARS[h1 & 0x0F] + HEX_CHARS[h2 >> 28 & 0x0F] + HEX_CHARS[h2 >> 24 & 0x0F] + HEX_CHARS[h2 >> 20 & 0x0F] + HEX_CHARS[h2 >> 16 & 0x0F] + HEX_CHARS[h2 >> 12 & 0x0F] + HEX_CHARS[h2 >> 8 & 0x0F] + HEX_CHARS[h2 >> 4 & 0x0F] + HEX_CHARS[h2 & 0x0F] + HEX_CHARS[h3 >> 28 & 0x0F] + HEX_CHARS[h3 >> 24 & 0x0F] + HEX_CHARS[h3 >> 20 & 0x0F] + HEX_CHARS[h3 >> 16 & 0x0F] + HEX_CHARS[h3 >> 12 & 0x0F] + HEX_CHARS[h3 >> 8 & 0x0F] + HEX_CHARS[h3 >> 4 & 0x0F] + HEX_CHARS[h3 & 0x0F] + HEX_CHARS[h4 >> 28 & 0x0F] + HEX_CHARS[h4 >> 24 & 0x0F] + HEX_CHARS[h4 >> 20 & 0x0F] + HEX_CHARS[h4 >> 16 & 0x0F] + HEX_CHARS[h4 >> 12 & 0x0F] + HEX_CHARS[h4 >> 8 & 0x0F] + HEX_CHARS[h4 >> 4 & 0x0F] + HEX_CHARS[h4 & 0x0F] + HEX_CHARS[h5 >> 28 & 0x0F] + HEX_CHARS[h5 >> 24 & 0x0F] + HEX_CHARS[h5 >> 20 & 0x0F] + HEX_CHARS[h5 >> 16 & 0x0F] + HEX_CHARS[h5 >> 12 & 0x0F] + HEX_CHARS[h5 >> 8 & 0x0F] + HEX_CHARS[h5 >> 4 & 0x0F] + HEX_CHARS[h5 & 0x0F] + HEX_CHARS[h6 >> 28 & 0x0F] + HEX_CHARS[h6 >> 24 & 0x0F] + HEX_CHARS[h6 >> 20 & 0x0F] + HEX_CHARS[h6 >> 16 & 0x0F] + HEX_CHARS[h6 >> 12 & 0x0F] + HEX_CHARS[h6 >> 8 & 0x0F] + HEX_CHARS[h6 >> 4 & 0x0F] + HEX_CHARS[h6 & 0x0F];
if (!this.is224) {
hex += HEX_CHARS[h7 >> 28 & 0x0F] + HEX_CHARS[h7 >> 24 & 0x0F] + HEX_CHARS[h7 >> 20 & 0x0F] + HEX_CHARS[h7 >> 16 & 0x0F] + HEX_CHARS[h7 >> 12 & 0x0F] + HEX_CHARS[h7 >> 8 & 0x0F] + HEX_CHARS[h7 >> 4 & 0x0F] + HEX_CHARS[h7 & 0x0F];
}
return hex;
};
Sha256.prototype.toString = Sha256.prototype.hex;
Sha256.prototype.digest = function () {
this.finalize();
var h0 = this.h0,
h1 = this.h1,
h2 = this.h2,
h3 = this.h3,
h4 = this.h4,
h5 = this.h5,
h6 = this.h6,
h7 = this.h7;
var arr = [h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF];
if (!this.is224) {
arr.push(h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF);
}
return arr;
};
Sha256.prototype.array = Sha256.prototype.digest;
Sha256.prototype.arrayBuffer = function () {
this.finalize();
var buffer = new ArrayBuffer(this.is224 ? 28 : 32);
var dataView = new DataView(buffer);
dataView.setUint32(0, this.h0);
dataView.setUint32(4, this.h1);
dataView.setUint32(8, this.h2);
dataView.setUint32(12, this.h3);
dataView.setUint32(16, this.h4);
dataView.setUint32(20, this.h5);
dataView.setUint32(24, this.h6);
if (!this.is224) {
dataView.setUint32(28, this.h7);
}
return buffer;
};
function HmacSha256(key, is224, sharedMemory) {
var i,
type = _typeof(key);
if (type === 'string') {
var bytes = [],
length = key.length,
index = 0,
code;
for (i = 0; i < length; ++i) {
code = key.charCodeAt(i);
if (code < 0x80) {
bytes[index++] = code;
} else if (code < 0x800) {
bytes[index++] = 0xc0 | code >> 6;
bytes[index++] = 0x80 | code & 0x3f;
} else if (code < 0xd800 || code >= 0xe000) {
bytes[index++] = 0xe0 | code >> 12;
bytes[index++] = 0x80 | code >> 6 & 0x3f;
bytes[index++] = 0x80 | code & 0x3f;
} else {
code = 0x10000 + ((code & 0x3ff) << 10 | key.charCodeAt(++i) & 0x3ff);
bytes[index++] = 0xf0 | code >> 18;
bytes[index++] = 0x80 | code >> 12 & 0x3f;
bytes[index++] = 0x80 | code >> 6 & 0x3f;
bytes[index++] = 0x80 | code & 0x3f;
}
}
key = bytes;
} else {
if (type === 'object') {
if (key === null) {
throw new Error(ERROR);
} else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) {
key = new Uint8Array(key);
} else if (!Array.isArray(key)) {
if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) {
throw new Error(ERROR);
}
}
} else {
throw new Error(ERROR);
}
}
if (key.length > 64) {
key = new Sha256(is224, true).update(key).array();
}
var oKeyPad = [],
iKeyPad = [];
for (i = 0; i < 64; ++i) {
var b = key[i] || 0;
oKeyPad[i] = 0x5c ^ b;
iKeyPad[i] = 0x36 ^ b;
}
Sha256.call(this, is224, sharedMemory);
this.update(iKeyPad);
this.oKeyPad = oKeyPad;
this.inner = true;
this.sharedMemory = sharedMemory;
}
HmacSha256.prototype = new Sha256();
HmacSha256.prototype.finalize = function () {
Sha256.prototype.finalize.call(this);
if (this.inner) {
this.inner = false;
var innerHash = this.array();
Sha256.call(this, this.is224, this.sharedMemory);
this.update(this.oKeyPad);
this.update(innerHash);
Sha256.prototype.finalize.call(this);
}
};
var sha256 = {
sha256: createMethod(),
sha224: createMethod(true),
hmacsha256: createHmacMethod(),
hmacsha224: createHmacMethod(true)
};
/*
* @Author: songge
* @Date: 2020-08-31 16:13:51
* @LastEditTime: 2020-08-31 19:21:52
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \demo9\51-demo\src\_zby_live_sdk\src\network\commonFetch.js
*/
/**
* 真正的请求
* @param url 请求地址
* @param options 请求参数
* @param method 请求方式
*/
var get = function get(params, url, timeout, headers) {
return axios({
method: 'get',
url: url,
timeout: timeout,
params: params,
headers: headers
});
};
var post = function post(data, url, timeout, headers) {
return axios({
method: 'post',
url: url,
timeout: timeout,
data: data,
headers: headers
});
};
var post1 = function post1(data, url, timeout, headers) {
return axios({
method: 'post',
url: url,
timeout: timeout,
data: Qs.stringify(data),
headers: headers
});
};
function commonFetch(url, options) {
var method = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'GET';
var timeOut = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 60000;
var headers = arguments.length > 4 ? arguments[4] : undefined;
if (method === 'GET') {
// 如果是GET请求,拼接url
return get(options, url, timeOut, headers).then(function (res) {
return res.data;
});
} else if (method === 'POST') {
return post(options, url, timeOut, headers).then(function (res) {
return res.data;
});
} else if (method === 'FROMDATA') {
var _headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
};
return post1(options, url, timeOut, _headers).then(function (res) {
return res.data;
});
}
}
/*
* @Author: your name
* @Date: 2020-08-28 17:06:45
* @LastEditTime: 2020-12-15 13:18:45
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \1705\zby_live_sdk\src\network\api.js
*/
function getImServerAddress(param) {
return commonFetch("".concat(getCloudApiDomain(), "/service/chat"), param, 'GET');
}
/**
* @function 从三方服务器获取时间戳
*/
function getNetworkTimestampApi() {
var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'taobao';
return commonFetch(timestampUrl[name], 'GET');
} // 获取云控参数
function getCloudData(param) {
return commonFetch("".concat(getApiCloudBaseUrl$1(), "/rtccloud/class/init"), param, 'GET', null, util.getVerifySign1());
} //获取初始化参数
function getInitParams(param) {
var types = {
student: '/v1/play/init',
teacher: '/v1/push/init',
assistant: '/v1/push/init'
};
var institutionId = param.institutionId,
userId = param.userId,
liveId = param.liveId,
role = param.role;
return commonFetch("".concat(getApiCloudBaseUrl$1()).concat(types[role]), {
institutionId: institutionId,
userId: userId,
liveId: liveId
}, 'GET');
} //获取新旧信道开关和地址
function getSwitchDomain(param) {
return commonFetch("".concat(getApiCloudBaseUrl$1(), "/v1/switch/domain"), param, 'GET');
}
function dabanDataReport(param) {
return commonFetch(getReportBaseUrl(), param, 'POST');
} //sdk切换(客户端直接调用) 根据上课情况手动操作,对单个组ID进行SDK切换
// export function changeSdkInRoom(param){
// return commonFetch(`${getApiChangeSdkUrl()}/rtccloud/sdk/set/room/client`, param, 'FROMDATA');
// }
function changeSdkInRoom(param) {
return commonFetch("".concat(getApiChangeSdkUrl(), "/rtccloud/sdk/set/lecture/client"), param, 'FROMDATA');
}
var getAndSetInitParams = async function getAndSetInitParams(args) {
var res = await getInitParams(args);
if (res && res.sdkInfo) {
console.log("\u4E91\u63A7\u8BF7\u6C42\u8FD4\u56DE\u53C2\u6570\u6B63\u5E38 ".concat(JSON.stringify(res), ", ").concat(JSON.stringify(res.sdkInfo)));
return res.sdkInfo[0].sdkName;
} else {
console.log("\u4E91\u63A7\u8BF7\u6C42\u8FD4\u56DE\u53C2\u6570\u9519\u8BEF ".concat(JSON.stringify(res)));
}
};
/**
* 第一阶段:请求主域名获取RTC Token
* @param {Object} args 请求参数
* @param {number} retries 当前重试次数
* @returns {Promise<string>} Token字符串 - 返回Promise对象
*/
var getRTCTokenPrimary = async function getRTCTokenPrimary(args) {
var retries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var onRetry = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
// 获取超时配置
var timeoutConfig = getRTCTokenTimeoutConfig();
var ts = Date.now(); // 构建HTTP请求头
var headers = {
'X-Auth-Sign': MD5("py_client&".concat(ts, "60439d96cfbecc2de2872641aea204f2")),
'traceid': util.uuid(),
'X-Auth-Appid': 'py_client',
'X-Auth-TimeStamp': '' + ts,
'Content-Type': 'application/json'
};
try {
// 发起HTTP请求,commonFetch是封装的HTTP请求函数
var res = await commonFetch(getRTCTokenUrl(), args, 'POST', timeoutConfig.primary.timeout, headers);
if (res.s === 10000) {
defaultApi$1.writeLog("Primary domain token success: ".concat(res.d.token), undefined, 'info');
return res.d.token;
} else {
defaultApi$1.writeLog("Primary domain token failed: ".concat(JSON.stringify(res)), undefined, 'error');
throw new Error("Primary domain response error: ".concat(res.s));
}
} catch (err) {
defaultApi$1.writeLog("Primary domain request failed: ".concat(JSON.stringify(err), ", retry times: ").concat(retries), undefined, 'error');
if (retries < timeoutConfig.primary.retries) {
if (typeof onRetry === 'function') onRetry();
return getRTCTokenPrimary(args, retries + 1, onRetry);
} else {
throw new Error('Primary domain exhausted all retries');
}
}
};
/**
* 第二阶段:请求备用域名获取RTC Token
* @param {Object} args 请求参数
* @param {number} retries 当前重试次数
* @returns {Promise<string>} Token字符串 - 返回Promise对象
*/
var getRTCTokenBackup = async function getRTCTokenBackup(args) {
var retries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var onRetry = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var timeoutConfig = getRTCTokenTimeoutConfig();
var ts = Date.now();
var headers = {
'X-Auth-Sign': MD5("py_client&".concat(ts, "60439d96cfbecc2de2872641aea204f2")),
'traceid': util.uuid(),
'X-Auth-Appid': 'py_client',
'X-Auth-TimeStamp': '' + ts,
'Content-Type': 'application/json'
};
try {
var currentTimeout = timeoutConfig.backup.timeouts[retries];
var res = await commonFetch(getRTCTokenBackupUrl(), args, 'POST', currentTimeout, headers);
if (res.s === 10000) {
defaultApi$1.writeLog("Backup domain token success: ".concat(res.d.token), undefined, 'info');
return res.d.token;
} else {
defaultApi$1.writeLog("Backup domain token failed: ".concat(JSON.stringify(res)), undefined, 'error');
throw new Error("Backup domain response error: ".concat(res.s));
}
} catch (err) {
defaultApi$1.writeLog("Backup domain request failed: ".concat(JSON.stringify(err), ", retry times: ").concat(retries), undefined, 'error');
if (retries < timeoutConfig.backup.retries) {
if (typeof onRetry === 'function') onRetry();
return getRTCTokenBackup(args, retries + 1, onRetry);
} else {
throw new Error('Backup domain exhausted all retries');
}
}
};
/**
* 第三阶段:回退到自研引擎(返回空Token)
* @returns {Promise<string>} 空字符串
*/
var getRTCTokenFallback = async function getRTCTokenFallback() {
defaultApi$1.writeLog('All remote token requests failed, falling back to self-developed engine', undefined, 'warn'); // 返回空字符串,表示没有远程token,使用本地引擎
return '';
};
/**
* 实现三阶段重试机制
* @param {Object} args 请求参数
* @param {Object} options 可选配置
* @returns {Promise<string>} Token字符串
*/
var getRTCToken = async function getRTCToken(args) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var _options$enableBackup = options.enableBackup,
enableBackup = _options$enableBackup === void 0 ? true : _options$enableBackup,
_options$enableFallba = options.enableFallback,
enableFallback = _options$enableFallba === void 0 ? true : _options$enableFallba,
_options$logPrefix = options.logPrefix,
logPrefix = _options$logPrefix === void 0 ? 'getRTCToken' : _options$logPrefix,
_options$onRetry = options.onRetry,
onRetry = _options$onRetry === void 0 ? null : _options$onRetry;
defaultApi$1.writeLog("".concat(logPrefix, ": Starting token acquisition process"), undefined, 'info');
try {
defaultApi$1.writeLog("".concat(logPrefix, ": Phase 1 - Primary domain"), undefined, 'info');
var primaryToken = await getRTCTokenPrimary(args, 0, onRetry);
if (primaryToken) {
defaultApi$1.writeLog("".concat(logPrefix, ": Primary domain success, token acquired"), undefined, 'info');
return primaryToken;
}
} catch (err) {
// 第一阶段失败:记录错误日志,但不抛出异常,这样可以让程序继续尝试后续阶段
defaultApi$1.writeLog("".concat(logPrefix, ": Phase 1 failed: ").concat(err.message), undefined, 'error');
} // 第二阶段:备用域名(如果启用)
if (enableBackup) {
try {
defaultApi$1.writeLog("".concat(logPrefix, ": Phase 2 - Backup domain"), undefined, 'info');
var backupToken = await getRTCTokenBackup(args, 0, onRetry);
if (backupToken) {
defaultApi$1.writeLog("".concat(logPrefix, ": Backup domain success, token acquired"), undefined, 'info');
return backupToken;
}
} catch (err) {
// 第二阶段失败:记录错误日志,但不抛出异常
defaultApi$1.writeLog("".concat(logPrefix, ": Phase 2 failed: ").concat(err.message), undefined, 'error');
}
} // 第三阶段:回退机制(如果启用)
if (enableFallback) {
defaultApi$1.writeLog("".concat(logPrefix, ": Phase 3 - Fallback to self-developed engine"), undefined, 'warn');
return await getRTCTokenFallback();
} // 所有阶段都失败,且没有启用回退机制
defaultApi$1.writeLog("".concat(logPrefix, ": All phases failed, no token available"), undefined, 'error');
throw new Error('All token acquisition phases failed');
}; // 保持向后兼容的旧版本函数(标记为废弃)
// 这个函数是为了保持与旧代码的兼容性而保留的
// @deprecated 已废弃,请使用新的getRTCToken函数
// @param {Object} args 请求参数
// @param {number} retries 当前重试次数
// @returns {Promise<string>} Token字符串或空字符串
var getRTCTokenLegacy = async function getRTCTokenLegacy(args) {
var retries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
console.warn('getRTCTokenLegacy is deprecated, use getRTCToken instead');
var ts = Date.now();
var headers = {
'X-Auth-Sign': MD5("py_client&".concat(ts, "60439d96cfbecc2de2872641aea204f2")),
'traceid': util.uuid(),
'X-Auth-Appid': 'py_client',
'X-Auth-TimeStamp': '' + ts,
'Content-Type': 'application/json'
};
return commonFetch(getRTCTokenUrl(), args, 'POST', 5000, headers).then(function (res) {
if (res.s === 10000) {
return res.d.token;
} else {
defaultApi$1.writeLog("get token failed: ".concat(JSON.stringify(res)), undefined, 'error');
throw new Error('get token failed');
}
}).catch(function (err) {
defaultApi$1.writeLog("get token failed: ".concat(JSON.stringify(err), ", retry times: ").concat(retries), undefined, 'error');
if (retries < 3) {
return getRTCTokenLegacy(args, retries + 1);
} else {
return '';
}
});
};
var util = {
// timestamp : 0,
// diffTime : 0,
/**
* run the callback unitl checkFlag return true
* @param {function | boolean} checkFlag
* @param {function} callback
* @param {*} param
*/
waitFlagToRun: function waitFlagToRun(checkFlag, callback, param, options) {
var _this = this;
var count = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
/**
* options
* { repeatTimes : 重试次数限制
* interval : 间隔时间,默认 100ms
* }
* */
if (options && options.repeatTimes && count > options.repeatTimes) return;
if (checkFlag()) {
callback(param);
return;
} else {
var interval = options && options.timer ? options.timer : 100;
setTimeout(function () {
_this.waitFlagToRun(checkFlag, callback, param, options, count + 1);
}, interval);
}
},
/**
* query字符串参数排序
* */
queryStringSort: function queryStringSort(param) {
return param.split('&').sort().join('&');
},
/**
* 生成签名相关
*/
getVerifySign: function getVerifySign(param) {
var saultKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '7qIdL2kdYQzecQJplq8QXfzpolOgUGOM';
//按照api要求,进行混合saultKey二次MD5处理
if (typeof param == 'string') {
return MD5(MD5(this.queryStringSort(param) + saultKey));
} else if (_typeof(param) == 'object') {
var arr = [];
for (var key in param) {
arr.push(key + '=' + param[key]);
}
var sortedQueryString = this.queryStringSort(arr.join('&'));
return MD5(MD5(sortedQueryString) + saultKey);
}
},
//根据值反查字典表中的键名
getMapKeyByValue: function getMapKeyByValue(map, value) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = map[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var item = _step.value;
if (map.get(item[0]) === value) {
return item[0];
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
},
uuid: function uuid() {
var s = [];
var hexDigits = '0123456789abcdef';
for (var i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
s[14] = '4';
s[19] = hexDigits.substr(s[19] & 0x3 | 0x8, 1);
s[8] = s[13] = s[18] = s[23] = '-';
var uuid = s.join('');
return uuid;
},
getVerifySign1: function getVerifySign1() {
var appId = '1002';
var key = 'OmAIqyYz0U1/guuFo4GH6nVGNVFeHAczwpsuXzMqKdw=';
var timestamp = new Date().getTime();
var RDM = this.uuid();
return {
appId: appId,
RDM: RDM,
timestamp: timestamp,
Authorization: sha256.hmacsha256(key, "".concat(appId, "&").concat(timestamp, "&").concat(RDM))
};
},
/**
*
* @param {String} idType id类型: userId, roomId, orgId
* @param {Strig} streamUrl 流地址id
*/
getDataFromStreamUrl: function getDataFromStreamUrl(idType, streamUrl) {
// streamUrl 格式
// '_orgId_roomId_userId_1'
//倒序
var obj = {
userId: 1,
roomId: 2,
orgId: 3
};
if (!streamUrl) {
return;
} else {
return streamUrl.split('_').reverse()[obj[idType]];
}
},
// getCurrentExtensionVersions(ext_id){
// if(EM){
// EM.GetExtensionVersions('zego_ext',
// function(ec, content) {
// console.log('GetExtensionVersions EC:' + ec + '\nContent:' + content);
// });
// }
// }
//转换一下用户角色的定义 用户角色 '1=teacher'/'2=student'/'3=assistant'/'4=parent'
translateRole: function translateRole(roleString) {
if (typeof roleString == 'string') {
if (roleString == 'teacher') {
return '1';
} else if (roleString == 'student') {
return '2';
} else if (roleString == 'assistant') {
return '3';
} else if (roleString == 'parent') {
return '4';
}
}
return roleString;
},
//转换一下用户角色的定义 用户角色 '1=teacher'/'2=student'/'3=assistant'/'4=parent'
translateRoleBack: function translateRoleBack(roleNumber) {
if (typeof roleNumber == 'string') {
if (roleNumber == '1') {
return 'teacher';
} else if (roleNumber == '2') {
return 'student';
} else if (roleNumber == '3') {
return 'assistant';
} else if (roleNumber == '4') {
return 'parent';
}
}
return '';
},
throttle: function throttle(fn, delay) {
var context = null,
timer = null,
args = null;
return function () {
context = this;
args = arguments;
if (timer) return;
timer = setTimeout(function () {
clearTimeout(timer);
timer = null;
fn.apply(context, args);
}, delay);
};
},
// 格式化当前时间
currentTimeString: function currentTimeString() {
var date = new Date();
var fmt = 'yyyy-MM-dd hh:mm:ss:S';
var o = {
'M+': date.getMonth() + 1,
//月份
'd+': date.getDate(),
//日
'h+': date.getHours(),
//小时
'm+': date.getMinutes(),
//分
's+': date.getSeconds(),
//秒
'q+': Math.floor((date.getMonth() + 3) / 3),
//季度
'S': date.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) ;
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
for (var k in o) {
if (new RegExp('(' + k + ')').test(fmt)) ;
fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));
}
return fmt;
},
//notice返回端上想要的uid
getUidByStreamId: function getUidByStreamId(streamId) {
if (streamId.split('_').length == 5) {
return streamId;
}
;
if (streamId && streamId.indexOf('_') > 0) {
return streamId.split('_')[2];
} else {
return streamId;
}
},
//数据上报返回真正的uid
getUidByStreamIdDr: function getUidByStreamIdDr(streamId) {
if (streamId && streamId.indexOf('_') > 0) {
return streamId.split('_')[2];
} else {
return streamId;
}
},
toFixed: function toFixed(num) {
var bit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
var backNum;
try {
backNum = parseFloat(num).toFixed(bit);
} catch (error) {
backNum = num;
}
return backNum;
},
getStreamId: function getStreamId(args) {
var institutionId = args.institutionId,
roomId = args.roomId,
userId = args.userId,
groupId = args.groupId;
return "".concat(institutionId, "_").concat(groupId || roomId, "_").concat(userId, "_1");
},
getConfId: function getConfId(institutionId, roomId) {
return "".concat(roomId, "_").concat(institutionId);
},
/**
* 深拷贝
* @param {*} obj 拷贝对象(object or array)
* @param {*} cache 缓存数组
*/
deepCopy: function (_deepCopy) {
function deepCopy(_x) {
return _deepCopy.apply(this, arguments);
}
deepCopy.toString = function () {
return _deepCopy.toString();
};
return deepCopy;
}(function (obj) {
var cache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
// typeof [] => 'object'
// typeof {} => 'object'
if (obj === null || _typeof(obj) !== 'object') {
return obj;
} // 如果传入的对象与缓存的相等, 则递归结束, 这样防止循环
/**
* 类似下面这种
* var a = {b:1}
* a.c = a
* 资料: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value
*/
var hit = cache.filter(function (c) {
return c.original === obj;
})[0];
if (hit) {
return hit.copy;
}
var copy = Array.isArray(obj) ? [] : {}; // 将copy首先放入cache, 因为我们需要在递归deepCopy的时候引用它
cache.push({
original: obj,
copy: copy
});
Object.keys(obj).forEach(function (key) {
copy[key] = deepCopy(obj[key], cache);
});
return copy;
}),
firstUpperCase: function firstUpperCase(key) {
if (!key) {
return key;
}
return key.charAt(0).toUpperCase() + key.slice(1);
},
getChromeVersion: function getChromeVersion() {
var chromeVersion = navigator.userAgent;
console.log('chromeVersion', chromeVersion);
var res = chromeVersion.search(/Chrome\/68/); // res == -1 ;//非68版本要升级
var isUpdateChromeVersion = res < 0 ? true : false;
return isUpdateChromeVersion;
},
sleep: function sleep(time) {
return new Promise(function (resolve) {
return setTimeout(resolve, time);
});
} // 获取网络时间戳
// async getNetworkTimeStamp() {
// let res;
// try {
// res = await getNetworkTimestampApi();
// } catch (e){
// console.log('getNetworkTimeStamp1',e);
// }
// const res1 = new Date().getTime();
// // let timestamp = 0;
// if (res && res.data.t) {
// this.timestamp = +res.data.t;
// this.diffTime = this.timestamp - res1;
// console.log('getNetworkTimeStamp10');
// } else {
// this.timestamp = new Date().getTime();
// this.diffTime = 0;
// console.log('getNetworkTimeStamp11');
// // const res1 = await getNetworkTimestampApi('suning');
// // if (res1.status === 200) {
// // timestamp = +res1.data.sysTime1 * 1000;
// // }
// }
// console.log('getNetworkTimeStamp2',this.timestamp,res1,this.diffTime);
// // await this.getDiffTime();
// // return this.timestamp;
// },
//防抖
// debounce(fn,wait){
// var timer = null;
// return function(){
// if(timer !== null){
// clearTimeout(timer);
// }
// timer = setTimeout(fn,wait);
// }
// }
};
var defaultApi$1 = {
logMap: {
debug: 0,
info: 1,
warnning: 2,
error: 3,
critical: 4
},
error: async function error(msg) {
return this.writeLog(msg, 'zby-live-sdk', 'error');
},
/**
* @function 写日志
* @param {string} msgbody 内容
* @param {string} productName 产品名称
* @param {string} msgtype 类型
* @return: void
*/
writeLog: async function writeLog(msgbody) {
var productName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'zby-live-sdk';
var msgtype = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'info';
var logMap = {
debug: 0,
info: 1,
warnning: 2,
error: 3,
critical: 4
};
msgbody = typeof msgbody === 'string' ? msgbody : JSON.stringify(msgbody);
var args = {
//日志级别,0:debug,1:info,2:warnning,3:error,4:critical
'type': logMap[msgtype],
'msg': "".concat(productName ? '[' + productName + ']--' : '', " ").concat(msgbody)
};
await BASSAPI.writeLog(args);
if (config.weblog === true) {
if (msgtype === 'info') {
console.log("%c [".concat(util.currentTimeString(), "]--").concat(args.msg), 'color:#60acfc');
} else {
console.log("%c [".concat(util.currentTimeString(), "]--").concat(args.msg), 'color:#f00');
}
}
}
};
/*
* @Author: why
* @Date: 2019-08-08 19:33:44
* @LastEditors: why
* @LastEditTime: 2019-09-09 15:02:54
* @Description:
*/
var EM$2 = window.EM; // 不需要写日志方法名集合
var noWriteLogNames = ['GetCurCpuMemInfo', 'WriteLog', 'IsStreamAudioMuted', 'IsStreamVideoMuted'];
var cb$1 = function cb(extName) {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$2) {
return function (name, args, sdkName) {
var argsStr = _typeof(args) === 'object' ? JSON.stringify(_objectSpread({}, args, {
classType: classType
})) : args;
return new Promise(function (resolve, reject) {
EM$2.CallMethod(extName, name, argsStr, function (code, msg) {
var msgbody = "".concat(extName, "--action: ").concat(sdkName || '', "--").concat(name || name.charAt(0).toLowerCase() + name.slice(1), " Code: ").concat(code, "\nMessage: ").concat(msg, "\nparams:").concat(JSON.stringify(args));
if (code === 0) {
!noWriteLogNames.includes(name) && defaultApi$1.writeLog && defaultApi$1.writeLog(msgbody, productName$1);
resolve({
code: code,
msg: msg && /\{|\}/g.test(msg) && JSON.parse(msg)
});
} else {
name !== 'WriteLog' && defaultApi$1.writeLog && defaultApi$1.writeLog(msgbody, productName$1, 'error');
resolve({
code: code,
msg: msg
});
}
});
}).catch(function () {
name !== 'WriteLog' && defaultApi$1.writeLog && defaultApi$1.writeLog("".concat(extName, "--action: ").concat(sdkName || '', "--").concat(name || name.charAt(0).toLowerCase() + name.slice(1), " Code: ").concat(code, "\nMessage: ").concat(msg, "\nparams:").concat(JSON.stringify(args)), productName$1, 'error');
});
};
}
};
/*
* @Author: why
* @Date: 2019-08-08 19:33:44
* @LastEditors: why
* @LastEditTime: 2019-09-10 17:05:31
* @Description:
*/
var callMethod$1 = cb$1(toolExt.name);
/*
* @Author: why
* @Date: 2019-08-08 19:33:44
* @LastEditors: Please set LastEditors
* @LastEditTime: 2021-05-24 16:47:40
* @Description:
*/
var EM$3 = window.EM;
var toolBaseApi = {
// 获取本地CPU内存占比
getCurCpuMemInfo: function getCurCpuMemInfo() {
return callMethod$1('GetCurCpuMemInfo', null, 'getCurCpuMemInfo');
},
// ping给定的拉流url,调取一次ping30s后返回延迟及丢包信息抛出事件
startLossDelayPing: function startLossDelayPing(args) {
return callMethod$1('GetLossDelayInfo', args, 'startLossDelayPing');
},
// ping给定的拉流url,调取一次ping30s后返回延迟及丢包信息抛出事件
startSocialLossDelayPing: function startSocialLossDelayPing(args) {
return callMethod$1('GetSocialLossDelayInfo', args, 'startSocialLossDelayPing');
},
// 获取上报公共字段信息
getCommonData: function getCommonData() {
return callMethod$1('GetCommonData', {
live_ext_ver: liveExt.version
}, 'getCommonData');
},
// 打开一个路径选择窗口,返回选择的路径信息
openDialog: function openDialog() {
return callMethod$1('OpenDialog', null, 'openDialog');
},
// 跳转到给定url
jumpPage: function jumpPage(url) {
return callMethod$1('JumpPage', {
url: url
}, 'jumpPage');
},
// 获取指定磁盘的总容量及剩余容量
getDiskSenseParameter: function getDiskSenseParameter(driver) {
return callMethod$1('GetDiskSenseParameter', {
driver: driver
}, 'getDiskSenseParameter');
},
// 获取系统信息(系统名称,本地时间等)
getSystemInformation: function getSystemInformation() {
return callMethod$1('GetSystemInformation', null, 'getSystemInformation');
},
// 获取学生端页面版本号
getPageVersion: function getPageVersion() {
return callMethod$1('GetPageVersion', null, 'getPageVersion');
},
stopLossDelayInfo: function stopLossDelayInfo() {
return callMethod$1('StopLossDelayInfo', null);
},
/**
* @function 保存图片至桌面
* @param { string } buf //base64编码图片数据
* @param { string } fileName //图片文件名(带格式后缀)
* @return: Promise
*/
saveImgToDesktop: function saveImgToDesktop(buf, fileName) {
return callMethod$1('SaveImgToDesktop', {
buf: buf,
fileName: fileName
});
},
// 初始化
init: function init() {
// 加载扩展
if (EM$3) {
// return new Promise(resolve => {
EM$3.Load(toolExt.name, toolExt.version, false, function () {
// resolve();
console.log('loadExt :zby_toolExt ......');
}); // });
}
}
};
/*
* @Author: your name
* @Date: 2020-07-09 17:07:08
* @LastEditTime: 2020-10-19 14:20:03
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \709\zby_live_sdk\src\tool\extend.js
*/
var api = {
// 打开对话框用于选取文件路径
openDialog: function openDialog() {
return toolBaseApi.openDialog();
},
// 跳转页面
jumpPage: function jumpPage(url) {
return toolBaseApi.jumpPage(url);
},
// 获取指定磁盘的总容量及剩余容量
getDiskSenseParameter: function getDiskSenseParameter(driver) {
return toolBaseApi.getDiskSenseParameter(driver);
},
// 获取系统信息(系统名称,本地时间等)
getSystemInformation: function getSystemInformation() {
return toolBaseApi.getSystemInformation();
},
// 获取cpu信息
getCurCpuMemInfo: function getCurCpuMemInfo() {
return toolBaseApi.getCurCpuMemInfo();
},
// 获取cpu信息
getPageVersion: function getPageVersion() {
return toolBaseApi.getPageVersion();
},
getCommonData: function getCommonData() {
return toolBaseApi.getCommonData();
},
saveImgToDesktop: function saveImgToDesktop(buf, fileName) {
return toolBaseApi.saveImgToDesktop(buf, fileName);
}
};
/*
* @Author: why
* @Date: 2019-08-08 19:33:44
* @LastEditors: why
* @LastEditTime: 2019-09-09 15:02:54
* @Description:
*/
var EM$4 = window.EM;
var hasAddListener = false;
var baseData1 = null;
var baseData2 = null;
var st = 2;
var timestamp = null;
var coreSDKVersion = null;
var realSDKType = '';
var addListener = function addListener() {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$4 && !hasAddListener) {
hasAddListener = true;
EM$4.AddListener('framework', function (event, data) {
// if (data && data.indexOf(extensionId) > -1) {
// try {
// EMListenerId = JSON.parse(data)[extensionId];
// defaultApi.writeLog(`ZEGO::addListener-- EMListenerId: ${EMListenerId}`);
// } catch (error) {}
// }
if (!event || !data) {
return;
} // console.log('framework',event,data);
var _data = JSON.parse(data);
switch (event) {
case 'SystemLocalTimeChange':
timestamp = Number(_data.server_time_diff);
console.log("SystemLocalTimeChange:: server_time_diff: ".concat(_data.server_time_diff, " ").concat(timestamp));
break;
}
;
});
}
};
addListener();
var getSystemInformation = function getSystemInformation() {
if (EM$4) {
return new Promise(function (resolve, reject) {
EM$4.system.GetSystemInformation(function (code, msg) {
defaultApi$1.writeLog("GetSystemInformation Code: ".concat(code, "\nMessage: ").concat(msg));
resolve({
code: code,
msg: msg
});
});
});
}
};
var ReportLog = function ReportLog() {
var logstore = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'live_log';
var args = arguments.length > 1 ? arguments[1] : undefined;
if (EM$4) {
// defaultApi.writeLog(`ReportLog event_name: ${args.lc.event_name}`);
return new Promise(function (resolve, reject) {
var logStr = JSON.stringify(args);
EM$4.system.ReportLog(logstore, logStr, function (code, msg) {
defaultApi$1.writeLog("ReportLog Code: ".concat(code, "\nMessage: ").concat(msg));
logstore = undefined;
logStr = undefined;
resolve({
code: code,
msg: msg
});
});
});
}
};
var dataReport$1 = async function dataReport(args) {
if (!window.zby_sdk_init_params) {
return false;
}
var _window$zby_sdk_init_ = window.zby_sdk_init_params,
userId = _window$zby_sdk_init_.userId,
institutionId = _window$zby_sdk_init_.institutionId,
projectId = _window$zby_sdk_init_.projectId,
userName = _window$zby_sdk_init_.userName,
role = _window$zby_sdk_init_.role,
roomId = _window$zby_sdk_init_.roomId,
teacherId = _window$zby_sdk_init_.teacherId,
liveId = _window$zby_sdk_init_.liveId,
serviceStatus = _window$zby_sdk_init_.serviceStatus,
classMode = _window$zby_sdk_init_.classMode,
liveType = _window$zby_sdk_init_.liveType;
if (!userId || !institutionId) {
return false;
}
if (timestamp == undefined) {
getSystemInformation().then(function (res) {
timestamp = Number(JSON.parse(res.msg).server_time_diff);
console.log('wolaile', timestamp);
}).catch(function (e) {
// timestamp = 0;
console.log('timestamp11', e, timestamp);
});
} else {
console.log('timestamp12', timestamp);
}
if (!baseData1) {
console.log('baseData11', baseData1);
api.getCommonData(liveExt.version).then(function (res) {
baseData1 = res.msg; // console.log('baseData12',baseData1);
}); // console.log('baseData13',baseData1);
}
if (!baseData2) {
baseData2 = await zbysdk$1.getSDKVersion();
}
if (!coreSDKVersion) {
coreSDKVersion = await zbysdk$1.getSDKCoreVersion();
}
if (args.event_name === 'live_quality_hb') {
Object.assign(args, {
service_status: serviceStatus
});
st = 5;
} else {
st = 2;
} // 公共字段
var args0 = {
bl: 1,
bt: 1,
ft: args.logstore ? '300' : liveType,
st: st,
tid: '-',
uid: userId,
pid: liveId,
log_ver: '1.0.1',
guid: '-' // js_version: version,
// class_type: 2
}; //基础信息
var args1 = {
role: role || 'student',
room_id: roomId,
js_version: version,
live_sdk_type: window.zbyAVSDK_init_sdk_type,
live_sdk_type_ex: realSDKType,
live_sdk_version: '-',
streamid: "".concat(institutionId, "_").concat(roomId, "_").concat(userId, "_1")
};
console.log('baseData14', baseData1);
if (baseData1) {
console.log('baseData15');
var _baseData = baseData1,
guid = _baseData.guid,
tm_ext_version = _baseData.tm_ext_version,
zego_ext_version = _baseData.zego_ext_version; // console.log('hsg_bbh',baseData1, tm_ext_version, zego_ext_version);
Object.assign(window.zby_sdk_init_params, {
guid: guid
});
Object.assign(args0, {
guid: guid
});
Object.assign(args1, {
live_sdk_version: window.zbyAVSDK_init_sdk_type == 'rtc' ? tm_ext_version : zego_ext_version
});
}
if (baseData2) {
// console.log('hsg_bbh',baseData2);
Object.assign(args1, {
media_sdk_version: baseData2,
media_core_sdk_version: coreSDKVersion
});
}
if (args.event_name === 'sdk_change') {
baseData1 = null;
baseData2 = null;
coreSDKVersion = null;
}
var reportData = _objectSpread({
// 其他
// sdk_type: window.zbyAVSDK_init_sdk_type,
lid: ++zbysdk$1.log_id,
stime: timestamp ? new Date().getTime() + timestamp : new Date().getTime()
}, args0, {
// ...args1,
// ...args2,
// lc:JSON.stringify({...args1,...args})
lc: _objectSpread({}, args1, args)
}); // defaultApi.writeLog(`dataReport--${JSON.stringify(reportData)}`);
defaultApi$1.writeLog("log_id--".concat(zbysdk$1.log_id, " event_name: ").concat(args.event_name));
console.debug("[".concat(util.currentTimeString(), "]--[zby-live-sdk]-- DataReport: ").concat(JSON.stringify(reportData)));
ReportLog(args.logstore, reportData); // dabanDataReport(reportData);
};
var dataReport$2 = {
timestamp: timestamp,
setRealSDKType: function setRealSDKType(type) {
realSDKType = type;
},
// 心跳
heartbeat: function heartbeat(args) {
dataReport$1({
event_name: 'live_quality_hb',
event_content: _objectSpread({}, args)
});
},
//设备检测(音视频)
// deviceTest(args){
// dataReport({
// event_name: 'device_test',
// event_content:{...args}
// });
// },
//直播切换线路
sdkChange: function sdkChange(args) {
dataReport$1({
event_name: 'sdk_change',
event_content: _objectSpread({}, args)
});
},
//老师静音/取消静音某学生
// toggleMic(args){
// dataReport({
// event_name: 'toggle_mic',
// ...args
// });
// },
//音视频连接
avConnect: function avConnect(args) {
dataReport$1({
event_name: 'av_connect',
event_content: _objectSpread({}, args)
});
},
//进入房间
joinRoom: function joinRoom(args) {
dataReport$1({
event_name: 'join_room',
event_content: _objectSpread({}, args)
});
},
//进入房间结果
joinRoomResult: function joinRoomResult(args) {
dataReport$1({
event_name: 'join_room_result',
event_content: _objectSpread({}, args)
});
},
//开始推流
startPublish: function startPublish(args) {
dataReport$1({
event_name: 'start_publish',
event_content: _objectSpread({}, args)
});
},
//推流结果
publishResult: function publishResult(args) {
dataReport$1({
event_name: 'publish_result',
event_content: _objectSpread({}, args)
});
},
//开始拉学生流
startPull: function startPull(args) {
dataReport$1({
event_name: 'start_pull',
event_content: _objectSpread({}, args)
});
},
//拉流结果
pullResult: function pullResult(args) {
dataReport$1({
event_name: 'pull_result',
event_content: _objectSpread({}, args)
});
},
//停止拉学生流
stopPull: function stopPull(args) {
dataReport$1({
event_name: 'stop_pull',
event_content: _objectSpread({}, args)
});
},
//停止推流
stopPublish: function stopPublish(args) {
dataReport$1({
event_name: 'stop_publish',
event_content: _objectSpread({}, args)
});
},
//退出教室
leaveRoom: function leaveRoom(args) {
dataReport$1({
event_name: 'leave_room',
event_content: _objectSpread({}, args)
});
},
splitState: function splitState(args) {
dataReport$1({
event_name: 'split_state',
event_content: _objectSpread({}, args)
});
},
//设备状态变化
deviceChange: function deviceChange(args) {
dataReport$1({
event_name: 'device_change',
event_content: _objectSpread({}, args)
});
},
//设备检测
setDevice: function setDevice(args) {
dataReport$1({
event_name: 'set_device',
event_content: _objectSpread({}, args)
});
},
firstVideoSize: function firstVideoSize(args) {
dataReport$1({
event_name: 'first_video',
event_content: _objectSpread({}, args)
});
},
firstAudioSize: function firstAudioSize(args) {
dataReport$1({
event_name: 'first_audio',
event_content: _objectSpread({}, args)
});
},
//学生按住发言按钮
startLianMai: function startLianMai(args) {
dataReport$1({
event_name: 'start_lianmai',
event_content: _objectSpread({}, args)
});
},
//学生取消发言按钮时上报
endLianMai: function endLianMai(args) {
dataReport$1({
event_name: 'end_lianmai',
event_content: _objectSpread({}, args)
});
},
//收到开麦消息上报
getStartLianMai: function getStartLianMai(args) {
dataReport$1({
event_name: 'get_start_lianmai',
event_content: _objectSpread({}, args)
});
},
//收到关麦消息上报
getEndLianMai: function getEndLianMai(args) {
dataReport$1({
event_name: 'get_end_lianmai',
event_content: _objectSpread({}, args)
});
},
setPullVoice: function setPullVoice(args) {
dataReport$1({
event_name: 'set_pull_voice',
event_content: _objectSpread({}, args)
});
},
// turnPushResult(args){
// dataReport({
// event_name: 'turn_push_result',
// event_content:{...args}
// });
// }
pomeloJoinRoom: function pomeloJoinRoom(args) {
dataReport$1({
logstore: 'online_class_log',
event_name: 'pomelo_join_room',
event_content: _objectSpread({}, args)
});
},
pomeloInitGate: function pomeloInitGate(args) {
dataReport$1({
logstore: 'online_class_log',
event_name: 'pomelo_init_gate',
event_content: _objectSpread({}, args)
});
},
pomeloInitChat: function pomeloInitChat(args) {
dataReport$1({
logstore: 'online_class_log',
event_name: 'pomelo_init_chat',
event_content: _objectSpread({}, args)
});
},
pomeloInitWebSocket: function pomeloInitWebSocket(args) {
dataReport$1({
logstore: 'online_class_log',
event_name: 'pomelo_init_websocket',
event_content: _objectSpread({}, args)
});
},
pomeloSendMsg: function pomeloSendMsg(args) {
dataReport$1({
logstore: 'online_class_log',
event_name: 'pomelo_send_msg',
event_content: _objectSpread({}, args)
});
},
pomeloRecvMsg: function pomeloRecvMsg(args) {
dataReport$1({
logstore: 'online_class_log',
event_name: 'pomelo_recv_msg',
event_content: _objectSpread({}, args)
});
},
initFinished: function initFinished(args) {
dataReport$1({
event_name: 'init_finished',
event_content: _objectSpread({}, args)
});
},
takeSnapShot: function takeSnapShot(args) {
dataReport$1({
event_name: 'take_snap_shot',
event_content: _objectSpread({}, args)
});
},
remoteNetworkQuality: function remoteNetworkQuality(args) {
dataReport$1({
event_name: 'remote_network_quality',
event_content: _objectSpread({}, args)
});
},
localNetworkQuality: function localNetworkQuality(args) {
dataReport$1({
event_name: 'local_network_quality',
event_content: _objectSpread({}, args)
});
},
localConnectStatus: function localConnectStatus(args) {
dataReport$1({
event_name: 'local_connect_status',
event_content: _objectSpread({}, args)
});
},
pushStreamError: function pushStreamError() {},
pushStreamWarning: function pushStreamWarning() {},
deviceError: function deviceError(args) {
dataReport$1({
event_name: 'device_error',
event_content: _objectSpread({}, args)
});
},
startRecord: function startRecord(args) {
dataReport$1({
event_name: 'zby_start_record',
event_content: _objectSpread({}, args)
});
},
stopRecord: function stopRecord(args) {
dataReport$1({
event_name: 'zby_stop_record',
event_content: _objectSpread({}, args)
});
},
/**
* @param {object} args
* @param {number} args.result - 取token结果 1:成功 -1:失败
* @param {number} args.error_count - 重试次数(不含首轮请求)
*/
getRtcToken: function getRtcToken(args) {
dataReport$1({
event_name: 'get_rtc_token',
event_content: _objectSpread({}, args)
});
},
joinRtcChannel: function joinRtcChannel(args) {
dataReport$1({
event_name: 'join_rtc_channel',
event_content: _objectSpread({}, args)
});
},
/**
* @param {object} args
* @param {number} args.state - pomelo连接状态 1:连接成功 2:连接中断 3:重连成功 4:重连失败
* @param {string} args.desc - 连接状态描述,字符串
*/
pomeloState: function pomeloState(args) {
dataReport$1({
event_name: 'pomelo_state',
event_content: _objectSpread({}, args)
});
}
};
var _sdkStatus$updateLoca;
var noWriteLogNoticeNames = ['playerVolumeChanged', 'volume_change', 'real_time_mic_volume', 'pull_quality', 'push_quality', 'push_loss_delay', 'play_loss_delay', 'mic_capture_data'];
setTimeout(function () {
zbysdk$1.noWriteLogNoticeNames = noWriteLogNoticeNames;
});
function notice(data) {
if (!noWriteLogNoticeNames.includes(data.type)) {
defaultApi$1.writeLog("NOTICE--".concat(JSON.stringify(data)));
}
try {
zbysdk$1.notice(data);
} catch (error) {
console.error('zby-live-sdk callback error', data, error);
}
}
var NOTICE = (_sdkStatus$updateLoca = {
// sdk状态相关
// 初始化前
sdkStatus: function sdkStatus(data) {
notice({
type: 'sdk_status',
data: data
});
},
// 切换sdk完成后返回本地预览地址
updateLocalPreview: function updateLocalPreview(data) {
notice({
type: 'update_local_preview',
data: data
});
},
// 设备热插拔
hotPlug: function hotPlug(data) {
notice({
type: 'plug_and_unplug',
data: data
});
},
// 设备检测出现问题
deviceError: function deviceError(data) {
notice({
type: 'device_error',
data: data
});
},
noDevice: function noDevice(data) {
notice({
type: 'no_device',
data: data
});
},
useredCamera: function useredCamera(data) {
notice({
type: 'usered_camera',
data: data
});
},
// 播放器音量变化
playerVolumeChanged: function playerVolumeChanged(data) {
notice({
type: 'playerVolumeChanged',
data: data
});
},
// 同playerVolumeChanged
volumeChange: function volumeChange(data) {
notice({
type: 'volume_change',
data: data
});
},
// 采集器麦克风音量变化
captureMicVolumeChanged: function captureMicVolumeChanged(data) {
notice({
type: 'real_time_mic_volume',
data: data
});
}
}, _defineProperty(_sdkStatus$updateLoca, "sdkStatus", function sdkStatus(data) {
notice({
type: 'sdk_status',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "speakerChanged", function speakerChanged(data) {
notice({
type: 'speaker_changed',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "defaultMicChanged", function defaultMicChanged(data) {
notice({
type: 'default_mic_changed',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "defaultSpeakerChanged", function defaultSpeakerChanged(data) {
notice({
type: 'default_speaker_changed',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "userJoin", function userJoin(data) {
notice({
type: 'user_join',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "deviceStatus", function deviceStatus(data) {
notice({
type: 'device_status',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "remoteVideoReady", function remoteVideoReady(data) {
notice({
type: 'remote_video_ready',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "remoteVideoRemoved", function remoteVideoRemoved(data) {
notice({
type: 'remote_video_removed',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "userResponse", function userResponse(data) {
notice({
type: 'userResponse',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "channelDisconnect", function channelDisconnect() {
notice({
type: 'channel_disconnect',
data: {
message: 'Channel disconnect'
}
});
}), _defineProperty(_sdkStatus$updateLoca, "channelReconnect", function channelReconnect() {
notice({
type: 'channel_reconnect',
data: {
message: 'Channel reconnect'
}
});
}), _defineProperty(_sdkStatus$updateLoca, "pushFlowSuccess", function pushFlowSuccess(data) {
notice({
type: 'pushFlowSuccess',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "pullFlowResult", function pullFlowResult(data) {
notice({
type: 'pullFlowResult',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "pullAudioFlowError", function pullAudioFlowError(data) {
notice({
type: 'pullAudioFlowError',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "playError", function playError(data) {
notice({
type: 'play_error',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "playErrorDetail", function playErrorDetail(data) {
notice(data);
}), _defineProperty(_sdkStatus$updateLoca, "firstVideoSize", function firstVideoSize(data) {
notice({
type: 'firstVideoSize',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "firstAudioSize", function firstAudioSize(data) {
notice({
type: 'firstAudioSize',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "overMaxConnect", function overMaxConnect(data) {
notice({
type: 'overMaxConnect',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "pullQuality", function pullQuality(data) {
notice({
type: 'pull_quality',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "pushQuality", function pushQuality(data) {
notice({
type: 'push_quality',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "pushLossAndDelay", function pushLossAndDelay(data) {
notice({
type: 'push_loss_delay',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "playLossAndDelay", function playLossAndDelay(data) {
notice({
type: 'play_loss_delay',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "updateLocalPreview", function updateLocalPreview(data) {
notice({
type: 'update_local_preview',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "networkError", function networkError() {
notice({
type: 'network_error',
data: {
message: 'Network error'
}
});
}), _defineProperty(_sdkStatus$updateLoca, "networkRecovery", function networkRecovery() {
notice({
type: 'network_recovery',
data: {
message: 'Network recovery'
}
});
}), _defineProperty(_sdkStatus$updateLoca, "recordResponse", function recordResponse(data) {
notice({
type: 'record_response',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "streamStatus", function streamStatus(data) {
notice({
type: 'stream_status',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "join", function join(data) {
notice({
type: 'user_join',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "joinAck", function joinAck(data) {
notice({
type: 'user_response',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "addStream", function addStream(data) {
notice({
type: 'remote_video_ready',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "removeStream", function removeStream(data) {
notice({
type: 'remote_video_removed',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "updateStreamDeviceStatus", function updateStreamDeviceStatus(data) {
notice({
type: 'device_status',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "leave", function leave(data) {
notice({
type: 'user_leave',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "channelDisconnect", function channelDisconnect() {
notice({
type: 'channel_disconnect',
data: {
message: 'Channel disconnect'
}
});
}), _defineProperty(_sdkStatus$updateLoca, "userDisconnect", function userDisconnect(data) {
notice({
type: 'user_disconnect',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "zegoRecoveryStart", function zegoRecoveryStart() {
notice({
type: 'zego_recovery_start',
data: {
message: 'zego is killed'
}
});
}), _defineProperty(_sdkStatus$updateLoca, "liveRecoveryStart", function liveRecoveryStart() {
notice({
type: 'live_recovery_start',
data: {
message: 'live is killed'
}
});
}), _defineProperty(_sdkStatus$updateLoca, "seiReceived", function seiReceived(data) {
notice({
type: 'sei_received',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "pushStreamError", function pushStreamError(data) {
notice({
type: 'push_stream_error',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "pushStreamWarning", function pushStreamWarning(data) {
notice({
type: 'push_stream_warning',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "pullStreamError", function pullStreamError(data) {
notice({
type: 'pull_stream_error',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "pullStreamWarning", function pullStreamWarning(data) {
notice({
type: 'pull_stream_warning',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "remoteNetworkQuality", function remoteNetworkQuality(data) {
notice({
type: 'remote_network_quality',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "localNetworkQuality", function localNetworkQuality(data) {
notice({
type: 'local_network_quality',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "recordStateUpdate", function recordStateUpdate(data) {
notice({
type: 'record_state_update',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "recordFinished", function recordFinished(data) {
notice({
type: 'record_finished',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "recordError", function recordError(data) {
notice({
type: 'record_error',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "recordBegin", function recordBegin(data) {
notice({
type: 'record_begin',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "recordEnd", function recordEnd(data) {
notice({
type: 'record_end',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "beautifyError", function beautifyError(data) {
notice({
type: 'beautify_error',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "onAiStatus", function onAiStatus(data) {
notice({
type: 'aiStatus',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "onAiTTSMessage", function onAiTTSMessage(data) {
notice({
type: 'aigcTTSMessage',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "onAiMessage", function onAiMessage(data) {
notice({
type: 'aiMessage',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "mutualKick", function mutualKick(data) {
notice({
type: 'mutual_kick',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "onRecvMediaSideInfo", function onRecvMediaSideInfo(data) {
notice({
type: 'recv_media_side_info',
data: data
});
}), _defineProperty(_sdkStatus$updateLoca, "micCaptureData", function micCaptureData(data) {
notice({
type: 'mic_capture_data',
data: data
});
}), _sdkStatus$updateLoca);
var extensionId = 'utilities_ext'; // rtc小班课=0;rtc大班课=1
var classType$1 = 0;
/**
* @function 调用端提供的回调方法
* @param name:String 回调方法名
* @param args 回调参数
* @return Promise | void
*/
var callMethod$2 = function callMethod(name, args) {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM) {
return new Promise(function (resolve, reject) {
EM.CallMethod(extensionId, name, JSON.stringify(_objectSpread({}, args, {
classType: classType$1
})), function (code, msg) {
defaultApi$1.writeLog("".concat(name, " Code: ").concat(code, "\nMessage: ").concat(msg, "\nParams: ").concat(JSON.stringify(_objectSpread({}, args, {
classType: classType$1
}))));
resolve({
code: code,
msg: msg
});
});
});
}
};
/**
* @function 加载 Zego 扩展
* @param extensionVersion:String 扩展版本号,必选
* @return Promise | void
*/
(function loadUtils() {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM) {
// return new Promise((resolve, reject) => {
EM.Load(extensionId, utilitiesExt.version, false, function (code, msg) {
defaultApi$1.writeLog("loadUtils Code: ".concat(code, "\nMessage: ").concat(msg));
console.log('loadExt :zby_utilsExt ......'); // resolve({
// code,
// msg
// });
}); // });
}
})();
/**
* @function 卸载 Zego 扩展
* @return Promise | void
*/
var unloadUtils = function unloadUtils() {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM) {
return new Promise(function (resolve, reject) {
EM.UnLoad(extensionId, function (code, msg) {
defaultApi$1.writeLog("unloadUtils Code: ".concat(code, "\nMessage: ").concat(msg));
resolve({
code: code,
msg: msg
});
});
});
}
};
var isAppleM1 = function isAppleM1() {
defaultApi$1.writeLog("\u83B7\u53D6\u8BBE\u5907\u662F\u5426\u662FM1\u8BBE\u5907: isAppleM1 --start");
return new Promise(function (resolve, reject) {
EM.system.IsAppleSilicon(function (code, msg) {
defaultApi$1.writeLog("\u83B7\u53D6\u8BBE\u5907\u662F\u5426\u662FM1\u8BBE\u5907: isAppleM1 code:".concat(code, " msg:").concat(msg));
var data = JSON.parse(msg);
resolve({
code: code,
data: data
});
});
});
};
var isWinX64 = function isWinX64() {
console.log('获取设备是否是WinX64设备: --start');
return new Promise(function (resolve, reject) {
if (!window.EM.GetClientArch) {
resolve(false);
return;
}
window.EM.GetClientArch(function (ec, content) {
if (String(ec) === '0') {
var statusObj = JSON.parse(content);
resolve(statusObj.client_arch === 'x64');
} else {
resolve(false);
}
});
});
};
/**
* @function 获取设备状态
* * @param { string } devicename //(设备名称,可为空)
* * @param { number } devicetype //(设备类型,1摄像头,2麦克风),3扬声器(mac端没有)
* @return: Promise
*/
var getDeviceState = function getDeviceState(devicename, devicetype) {
return callMethod$2('GetDeviceState', {
devicetype: devicetype,
devicename: devicename
});
}; //获取设备状态
var getDevicePermissionsFun = async function getDevicePermissionsFun(devicename, devicetype) {
defaultApi$1.writeLog("sdk action : getDevicePermissionsFun devicename: ".concat(devicename, " devicetype: ").concat(devicetype));
try {
var res = JSON.parse((await getDeviceState(devicename, devicetype)).msg).devicestate; // let codemsg = {
// '0':'有权限可用',
// '1':'没有询问是否开启权限',
// '2':'用户未授权',
// '3':'未授权,家长限制',
// '4':'未知权限类型',
// '5':'操作系统不支持权限管理',
// '6':'不可用(win10隐私关闭)',
// '7':'设备占用'
// };
// return codemsg[res];
console.log('getDevicePermissions_res', res);
return res;
} catch (error) {
console.log('getDevicePermissions_error', error);
return 'error';
}
;
};
var setMediaPermissionFun = function setMediaPermissionFun(enableVideo, enableMicrophone) {
return callMethod$2('SetMediaPermission', {
enableVideo: enableVideo,
enableMicrophone: enableMicrophone
});
};
var deviceListReport = {
cameraList: {},
micList: {},
speakerList: {}
};
var extensionId$1 = 'live'; // 端提供的 API 入口
var EM$5 = window.EM; // 维护的一份播放器的 rtcPlayerId 与 streamId 的映射
var streamIdToRtcPlayerId = {}; // let streamIdToBlobUrl = {};
var rtcPlayerIdToStreamId = {}; // 已经停止的播放器
var stopedRtcPlayers = []; // 播放器 id 缓存
var rtcPlayerIds = []; // rtc 当前正在使用的摄像头的设备 id
var rtcNowUseCamera = ''; // 是否执行麦克风音量回调的标记
var runMicVolumeCb = false; // 是否创建了用于设备检测的采集器的标记
var deviceCheckerCaptureInit = false; // 是否执行过 Rtc 的 AddListener 的标志
var hasAddListener$1 = false; // 是否在课中的标志
var isInRoom = false; // 是否处于网络错误状态中的标志
var hasNetWrong = false; // 是否加入/离开 rtc room 成功
var hasJoinRtcRoom = false;
var hasLeaveRtcRoom = false; // rtc 底层流媒体数据上报地址配置
var _confId = null; // rtc小班课=0;rtc大班课=1
var classType$2 = 0; // 监听id
var EMListenerId = 0; //静音推流时,音量值是否上抛上层标志 false=没有声音不往上层通知/true=有声音有上层通知
var isNoticeMicVolumeRtc = false;
var isNoticeCarVolumeRtc = false;
/*
1001--网络错误
1002--播放器内部错误
1003--调度服务器错误
1004--转发服务器错误
1005--无可用转发服务器
2003--对端尚未进入教室
2013–网络断开
*/
var rtcPlayerErrorCodes = ['1001', '1002', '1003', '1004', '1005', '2003', '2013', '2008', '1006'];
/*
2001-- 网络错误,通知业务层检查网络设置和推流地址, 对于直播, id与AddPushUrl返回值对应
2002-- 网络恢复, 对于直播, id与AddPushUrl返回值对应
2003--网络断开
2004--转发服务器错误
2005--调度服务器错误
2006--无可用转发服务器
2007--转发服务器能力不足
2008--摄像头视频宽高错误
2009--视频编码器初始化错误
2010--错误的摄像头ID
2011--错误的录音设备ID
2012--抓屏参数错误
2013--打开摄像头失败,一种可能是摄像头被其它进程占用
2014–-打开麦克风失败
2015--打开播放文件失败
3206--推流ID被占用
3309--只要 10 秒内和服务器无法建立连接就会触发一次且仅触发一次(仅互动流)
*/
var rtcCaptureErrorCodes = ['2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2012', '2013', '3206', '3309']; // 心跳
var heartBeatDataReportObj = {};
var heartBeatDataReportTimer = null;
var isFirstHeartBeatReport = false;
var streamIdRtcPlayerInfo = {};
var streamIdRtcPlayerInfo1 = {};
var rtcPlayerCodeToNames = {
'1002': 'err_core',
'1003': 'err_schedule_server',
'1004': 'err_relay_server',
'1005': 'err_no_available_relay_server',
'2003': 'st_streamNotReady',
'2013': 'network_disconnect'
}; //上报拼接状态
//window.zbyAVSDK_init_params
var paramInfo;
var captureBefore; //运控获取,一直不变(拼接前摄像头采集分辨率)
var captureEncodeBefore; //摄像头拼接前编码分辨率云控拿取
var screenEncodeBefore; //截屏窗拼接前编码分辨率 东奇提供
// let screenBefore;//拼接前截屏窗采集分辨率
var captureAfter; //一直不变(拼接前摄像头采集分辨率同上captureBefore)
var captureEncodeAfter; //摄像头拼接后编码分辨率
var screenEncodeAfter; //
// let screenAfter;//
var currStreamIdRtcPlayerInfo;
var stStreamNotReadyReport = {}; //记录底层推流回调的值
var dataRtcCapture = {};
/**
* @function 调用端提供的回调方法
* @param name:String 回调方法名,必选
* @param args:Object 回调参数,必选
* @return Promise | void
*/
var callMethod$3 = function callMethod(name, args) {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$5) {
return new Promise(function (resolve, reject) {
var noneCamera = name === 'SetCameraDevice' && !args.close && !args.deviceID;
var noneMicrophone = name === 'SetAudioDevice' && !args.deviceID;
var noneSpeaker = name === 'SetSpeakerDevice' && !args.speakId;
if (noneCamera || noneMicrophone || noneSpeaker) {
return resolve();
}
EM$5.CallMethod(extensionId$1, name, JSON.stringify(_objectSpread({}, args, {
classType: classType$2
})), function (code, msg) {
resolve({
code: code,
msg: msg
});
defaultApi$1.writeLog("".concat(name, " Code: ").concat(code, "\nParams: ").concat(JSON.stringify(_objectSpread({}, args, {
classType: classType$2
})), "\nMessage: ").concat(msg));
var _msg = msg && JSON.parse(msg); // 数据上报
switch (name) {
case 'SetAppId':
break;
case 'SetConfId':
break;
case 'SetAudioDevice':
if (code === 0 && _msg.ret === true) {
window.zbyAVSDK_device_checker_init.microphone.use = args.deviceID;
}
break;
case 'SetCameraDevice':
if (code === 0 && _msg.ret === true) {
window.zbyAVSDK_device_checker_init.camera.use = args.deviceID;
if (args.deviceID) {
rtcNowUseCamera = args.deviceID;
}
}
break;
case 'SetSpeakerDevice':
if (code === 0) {
window.zbyAVSDK_device_checker_init.speaker.use = args.speakId;
}
break;
case 'CreateRtcCapture':
if (code === 0 && args.renderid === 'deviceCheckerInit') {
deviceCheckerCaptureInit = true;
}
break;
}
});
});
}
};
/**
* @function 加载 Rtc 扩展
* @param extensionVersion:String 扩展版本号,必选
* @return Promise | void
*/
var loadRtc = function loadRtc(extensionVersion, cb) {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$5) {
return new Promise(function (resolve, reject) {
removerListener();
EM$5.Load(extensionId$1, extensionVersion, false, function (code, msg) {
defaultApi$1.writeLog("loadRtc Code: ".concat(code, "\nMessage: ").concat(msg));
addListener$1();
resolve();
});
});
}
};
/**
* @function 卸载 Rtc 扩展
* @return Promise | void
*/
var unloadRtc = function unloadRtc() {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$5) {
return new Promise(function (resolve, reject) {
EM$5.UnLoad(extensionId$1, function (code, msg) {
defaultApi$1.writeLog("unloadRtc Code: ".concat(code, "\nMessage: ").concat(msg));
resolve();
});
});
}
};
/**
* @function 添加扩展监听机制
* @return void
*/
var addListener$1 = function addListener() {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$5 && !hasAddListener$1) {
hasAddListener$1 = true;
EM$5.AddListener(extensionId$1, function (event, data) {
if (data && data.indexOf(extensionId$1) > -1) {
try {
var _data2 = JSON.parse(data);
if (_data2[extensionId$1] !== undefined && EMListenerId == 0) {
EMListenerId = _data2[extensionId$1];
defaultApi$1.writeLog("RTC::addListener-- EMListenerId: ".concat(EMListenerId));
}
} catch (error) {}
}
if (!event || !data) {
return;
}
var _d = JSON.parse(data);
var _e = JSON.parse(event);
if (_d && _d.classType === 1) {
return false;
}
if (_e.hasOwnProperty('event_name')) {
var name = _e.event_name;
currStreamIdRtcPlayerInfo = streamIdRtcPlayerInfo[_d.streamid];
switch (name) {
case 'deviceStateChanged':
{
var deviceType = _d.deviceType; // 0=添加设备 1=移除设备 string
var state = _d.deviceState;
var deviceNameCamera = '';
var deviceNameMic = '';
var deviceNameSpeak = '';
switch (deviceType) {
// 摄像头热插拔
case '1':
{
setCameraDevice({
deviceId: state == 1 ? '' : _d.deviceID,
close: false,
operationType: 'hotPlug',
deviceState: state,
changedDeviceId: _d.deviceID,
changedDeviceName: _d.deviceName
});
deviceNameCamera = _d.deviceName;
}
break;
// 麦克风热插拔
case '2':
{
setMicrophoneDevice({
deviceId: state == 1 ? '' : _d.deviceID,
operationType: 'hotPlug',
deviceState: state,
changedDeviceId: _d.deviceID,
changedDeviceName: _d.deviceName
});
deviceNameMic = _d.deviceName;
}
break;
// 扬声器热插拔,暂时不做处理
case '3':
{
// console.log('hsghsghsg扬声器热插拔',_d,state);
setSpeakerDevice({
speakId: state == 1 ? '' : _d.deviceID,
operationType: 'hotPlug',
deviceState: state,
changedDeviceId: _d.deviceID,
changedDeviceName: _d.deviceName
});
deviceNameSpeak = _d.deviceName;
}
break;
} // try {
// dataReport.deviceTest({
// device: deviceType,
// fore_state: state == '0' ? 1 : 2 ,
// camera_name: deviceNameCamera,
// microphone_name: deviceNameMic,
// speaker_name: deviceNameSpeak
// });
// } catch (e){
// };
}
break;
case 'rtcCaptureCycleDataReport':
//推流 fps、bitrate
{
var keys = Object.keys(_d);
if (isNoticeMicVolumeRtc) {
if (keys.indexOf('volum') > -1 && window.zbyAVSDK_init_sdk_type === 'rtc') {
NOTICE.captureMicVolumeChanged({
volume: +_d.volum
});
}
}
if (keys.indexOf('volum') > -1) {
// heartBeatDataReportObj.volume.push(_d.volum);
// console.log('声音回调',`${new Date().getMinutes()}:${new Date().getSeconds()}`,_d.volum);
heartBeatDataReportObj.volume = heartBeatDataReportObj.volume + _d.volum + ',';
}
}
// 拉流
case 'rtcPlayCycleDataReport':
{
if (_d.errorcode && _d.errorcode == 7000) {
NOTICE.playerVolumeChanged({
userId: util.getUidByStreamId(_d.streamid),
streamId: _d.streamid,
volume: _d.volume
}); // currStreamIdRtcPlayerInfo && currStreamIdRtcPlayerInfo.volume.push(_d.volume);
// streamIdRtcPlayerInfo[_d.streamid] && streamIdRtcPlayerInfo[_d.streamid].volume.push(_d.volume);
if (streamIdRtcPlayerInfo[_d.streamid]) {
streamIdRtcPlayerInfo[_d.streamid].volume = streamIdRtcPlayerInfo[_d.streamid].volume + _d.volume + ',';
}
}
;
if (_d.hasOwnProperty('codecBitRate')) {
if (name === 'rtcPlayCycleDataReport') {
NOTICE.pullQuality({
video: {
userId: util.getUidByStreamId(_d.streamid),
streamId: _d.streamid,
bitrate: Math.round(_d.codecBitRate),
fps: Math.round(_d.codecFrameRate),
volume: _d.volume,
realTimeVolume: _d.realTimeVolume
}
});
NOTICE.playLossAndDelay({
userId: util.getUidByStreamId(_d.streamid),
delay: _d.delay,
lostrate: _d.lostrate
});
}
if (name === 'rtcCaptureCycleDataReport') {
NOTICE.pushQuality({
video: {
bitrate: Math.round(_d.codecBitRate),
fps: Math.round(_d.codecFrameRate)
}
});
NOTICE.pushLossAndDelay({
userId: util.getUidByStreamId(_d.streamid),
delay: _d.delay,
lostrate: _d.lostrate
});
}
heartBeatDataReportCalc(name, _d);
}
if (_d.hasOwnProperty('realTimeVolume') || _d.hasOwnProperty('volume')) {
NOTICE.volumeChange({
userId: util.getUidByStreamId(_d.streamid),
streamId: _d.streamid,
volume: _d.volume
});
}
}
break;
case 'OnLiveCaptureEvent':
break;
case 'OnRtcCaptureEvent':
{
if (_d && _d.hasOwnProperty('errorcode')) {
var code = _d.errorcode;
switch (code) {
case '1003':
if (window.zbyAVSDK_init_params.rtc.isTurnPush) {
sendRecordingMsg({
cmd: 'start'
});
}
if (hasNetWrong) {
hasNetWrong = false;
NOTICE.networkRecovery({
message: 'Network recovery'
});
}
try {
dataReport$2.publishResult({
code: '0' // publish_streamid: window.zbyAVSDK_init_params.rtc.streamId,
});
NOTICE.pushFlowSuccess({
code: 0,
publish_streamid: _d.streamid
});
} catch (e) {}
;
break;
case '1005':
// 摄像头设备打开成功
// 大班数据上报
try {
dabanDataReport({
action: 'open_camera',
camera_status: 1,
uid: window.zbyAVSDK_init_params.rtc.userId
});
} catch (e) {}
break;
case '2011':
// 摄像头设备打开失败
// 大班数据上报
try {
dabanDataReport({
action: 'open_camera',
camera_status: 0,
uid: window.zbyAVSDK_init_params.rtc.userId
});
} catch (e) {}
break;
case '2008':
// 错误的摄像头ID
setCameraDevice({
deviceId: '',
close: false,
operationType: 'deviceError'
});
break;
case '1006':
// 麦克风设备打开成功
break;
case '2010': // 麦克风设备打开失败
case '2013': // 麦克风设备打开失败
case '2012': // 麦克风设备打开失败
case '2009':
// 错误的录音设备ID
setMicrophoneDevice({
deviceId: '',
operationType: 'deviceError'
});
break;
// 重试推流
case '2003':
case '2004':
case '2005':
case '2006':
case '2007':
// pushFlowExceptionHandler();
break;
case '2001':
hasNetWrong = true;
defaultApi$1.writeLog('error', 'Network error');
NOTICE.networkError({
message: 'Network error'
});
break;
}
if (rtcCaptureErrorCodes.includes(code)) {
try {
dataReport$2.publishResult({
code: code // publish_streamid: window.zbyAVSDK_init_params.rtc.streamId,
});
} catch (e) {}
;
}
}
}
break;
case 'OnSingleRecordResponse':
{
NOTICE.recordResponse(_d);
}
break;
case 'live_recovery_start':
{
console.log('live_recovery_start');
NOTICE.liveRecoveryStart();
}
break;
case 'recordingMsg':
{
if (_d.cmd === 0) {
var errorcode = _d.errorcode,
streamId = _d.streamId;
try {
dataReport$2.turnPushResult({
errorcode: errorcode,
case: 'turn push',
streamid: streamId
});
} catch (e) {}
;
}
}
break;
case 'OnRecvMediaSideInfo':
{
console.log('我是sei', _data);
NOTICE.seiReceived({
data: _data
});
}
break;
case 'VideoFrameInterval':
{
currStreamIdRtcPlayerInfo && (currStreamIdRtcPlayerInfo.video_ifg += _d.video_ifg);
}
break;
case 'AudioFrameInterval':
{
currStreamIdRtcPlayerInfo && (currStreamIdRtcPlayerInfo.audio_ifg += _d.audio_ifg);
}
break;
case 'OnRtcPlayError':
{
if (_d && _d.hasOwnProperty('errorcode')) {
var _code = _d.errorcode;
switch (_code) {
// 重试拉流
case '1002':
case '1003':
case '1004':
case '1005':
case '1006':
case '1007':
// pullFlowExceptionHandler(_d.streamid);
NOTICE.playError({
userId: util.getUidByStreamId(_d.streamid),
streamId: _d.streamid,
message: 'play error'
});
break;
case '1001':
hasNetWrong = true;
writeLog('error', 'Network error');
NOTICE.networkError({
message: 'Network error'
});
break;
}
if (rtcPlayerErrorCodes.includes(_code)) {
pullResultReport(_code, _d.streamid);
}
NOTICE.playErrorDetail({
type: rtcPlayerCodeToNames[_code],
data: {
userId: util.getUidByStreamId(_d.streamid),
streamId: _d.streamid,
allData: _d
}
});
}
}
break;
case 'OnRtcPlayStatus':
{
if (_d && _d.hasOwnProperty('errorcode')) {
var _code2 = _d.errorcode;
switch (_code2) {
case '2004':
if (window.zbyAVSDK_init_params.rtc.role === 'student') {
// 大班数据上报
try {
dabanDataReport({
action: 'interact_play',
teammate_streamid: _d.streamid,
uid: window.zbyAVSDK_init_params.rtc.userId
});
} catch (e) {}
}
try {
NOTICE.firstVideoSize({
userId: util.getUidByStreamId(_d.streamid),
streamId: _d.streamid,
allData: _d
});
dataReport$2.firstVideoSize({
pull_streamid: _d.streamid,
pull_uid: util.getUidByStreamIdDr(_d.streamid),
code: '0'
});
} catch (e) {}
;
pullResultReport(0, _d.streamid);
defaultApi$1.writeLog("RTC: pullStream success & haveFirstVideoSize streamId: ".concat(_d.streamid));
break;
case '2014':
try {
NOTICE.firstAudioSize({
userId: util.getUidByStreamId(_d.streamid),
streamId: _d.streamid,
allData: _d
});
dataReport$2.firstAudioSize({
pull_streamid: _d.streamid,
pull_uid: util.getUidByStreamIdDr(_d.streamid),
code: '0'
});
} catch (e) {}
;
break;
default:
break;
}
if (rtcPlayerErrorCodes.includes(_code2)) {
if (_code2 == 2003) {
//对端未推流
var first_time_marker = new Date().getTime();
if (!stStreamNotReadyReport.hasOwnProperty(_d.streamid)) {
stStreamNotReadyReport[_d.streamid] = new Date().getTime();
pullResultReport(_code2, _d.streamid);
} else {
if (first_time_marker - stStreamNotReadyReport[_d.streamid] >= 10 * 1000) {
pullResultReport(_code2, _d.streamid);
stStreamNotReadyReport[_d.streamid] = new Date().getTime();
}
}
} else {
pullResultReport(_code2, _d.streamid);
}
}
;
NOTICE.playErrorDetail({
type: rtcPlayerCodeToNames[_code2],
data: {
userId: util.getUidByStreamId(_d.streamid),
streamId: _d.streamid,
allData: _d
}
});
}
}
break;
case 'beforeCombineCapInfoMsg':
{
screenEncodeBefore = _d.width + '*' + _d.height;
try {
dataReport$2.splitState({
camera_split_start_resolution: captureBefore,
//云控取一直不变ok
camera_split_start_encode_resolution: captureEncodeBefore,
//摄像头拼接前编码分辨率云控拿取
screen_split_start_encode_resolution: screenEncodeBefore,
//截屏窗拼接前编码分辨率 东奇提供
screen_split_start_resolution: screenEncodeBefore,
//截屏窗拼接前采集分辨率
split: '开始拼接'
});
} catch (e) {}
;
}
break;
case 'afterCombineInfoMsg':
{
captureEncodeAfter = _d.head_width + '*' + _d.head_height;
screenEncodeAfter = _d.cap_width + '*' + _d.cap_height;
try {
dataReport$2.splitState({
camera_split_end_resolution: captureAfter,
//云控取一直不变ok
camera_split_end_encode_resolution: captureEncodeAfter,
//摄像头拼接后编码分辨率
screen_split_end_encode_resolution: screenEncodeAfter,
//截屏窗拼接后编码分辨率
screen_split_end_resolution: screenEncodeAfter,
//截屏窗拼接后采集分辨率
split: '拼接完成'
});
} catch (e) {}
;
}
break;
} // 去掉声音回调日志
if (zbysdk$1.openListenerLog) {
console.log("[zby-live-sdk]--RTC::Listener:: event: ".concat(name, ", data: ").concat(data));
}
}
});
}
}; //拉流上报
var pullResultReport = function pullResultReport(code, streamid) {
try {
dataReport$2.pullResult({
code: code,
pull_uid: util.getUidByStreamId(streamid),
pull_streamid: streamid
});
NOTICE.pullFlowResult({
code: code,
pull_streamid: streamid
});
} catch (e) {}
;
};
/**
* @function 添加扩展监听机制
* @return void
*/
var removerListener = function removerListener() {
hasAddListener$1 = false;
defaultApi$1.writeLog("RTC::action--removerListener EMListenerId:".concat(EMListenerId));
EM$5.RemoverListener(extensionId$1, EMListenerId, function (ec, content) {});
EMListenerId = 0;
};
/**
* @function 推流异常恢复
*/
var pushFlowExceptionHandler = async function pushFlowExceptionHandler() {
await new Promise(function (resolve, reject) {
setTimeout(function () {
resolve();
}, 1000);
});
defaultApi$1.writeLog('断网重推');
defaultApi$1.writeLog('avsdk RTC::try to pushFlow again');
await stopPush();
await startPush();
};
/**
* @function 拉流异常恢复
*/
var pullFlowExceptionHandler = async function pullFlowExceptionHandler(streamId) {
await new Promise(function (resolve, reject) {
setTimeout(function () {
resolve();
}, 1000);
});
defaultApi$1.writeLog('断网重拉');
defaultApi$1.writeLog("avsdk RTC::try to pullFlow again, streamId : ".concat(streamId));
await stop(streamId);
await play(streamId);
};
/**
* @function 设置 appId
* @param appId:String 长度不能大于 100,必选
* @return Promise | void
*/
var setAppId = function setAppId(appId) {
return callMethod$3('SetAppId', {
appId: appId
});
};
/**
* @function 设置用户名
* @param userName:String 用户名,必选
* @return Promise | void
*/
var setUserName = function setUserName(userName) {
return callMethod$3('SetUserName', {
userName: userName
});
};
/**
* @function 设置用户 id
* @param userId:Number 用户 id,必选
* @return Promise | void
*/
var setUserId = function setUserId(userId) {
return callMethod$3('SetUserId', {
userId: userId + ''
});
};
/**
* @function 设置课节 id
* @param confId:String 长度不能大于 100
* @return Promise | void
*/
var setConfId = function setConfId(confId) {
defaultApi$1.writeLog("RTC SetConfId: ".concat(confId));
_confId = confId;
return callMethod$3('SetConfId', {
confId: confId
});
};
/**
* @function 进入音视频房间
* @return Promise | void
*/
var joinRtcRoom = async function joinRtcRoom() {
await callMethod$3('JoinRoom', {});
return new Promise(function (resolve, reject) {
var timer = setInterval(function () {
if (hasJoinRtcRoom) {
clearInterval(timer);
resolve();
}
}, 50);
});
};
/**
* @function 退出音视频房间
* @return Promise | void
*/
var leaveRtcRoom = async function leaveRtcRoom() {
await callMethod$3('LeaveRoom', {});
return new Promise(function (resolve, reject) {
var timer = setInterval(function () {
if (hasLeaveRtcRoom) {
clearInterval(timer);
resolve();
}
}, 50);
});
};
/**
* @function 开始混流
* @param args:Object 混流设置信息
* @return Promise | void
* {
'sequence':x,//混流任务序列号
'inputStreams':[
{
'confId':'xxx',
'streamId':'xxxx',
'mediaControl':x,//0所有1音频2视频
'left':x,
'top':x,
'right':x,
'bottom':x
}
],
'outputStream':{
'pushType';x,
'rtmpUrls';'xxx',
'videoFps':x,//视频帧率
'videoRate':x,//视频码率
'audioRate':x,//音频码率
'videoWidth':x,//合成视频宽度
'videoHeight':x,//合成视频高度
'audioFormat':x,//音频格式,0aac
'audioChannels':x,//音频声道数目
'backgroudColor':x//背景色10进制?
}
}
*/
var startRoomMixRecord = function startRoomMixRecord(args) {
return callMethod$3('StartRoomMixRecord', args);
};
/**
* @function 开始混流 id
* @param args: Object 停止混流设置信息
* {'sequence':x}//混流任务序列号
* @return Promise | void
*/
var stopRoomMixRecord = function stopRoomMixRecord(args) {
return callMethod$3('StopRoomMixRecord', args);
};
/**
* @function 开始单路录制--暂停使用
* @param sequence: String
* @param streamId: String 流 id
* @return Promise | void
*/
var startSingleRecord = function startSingleRecord() {
var sequence = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var streamId = arguments.length > 1 ? arguments[1] : undefined;
return callMethod$3('StartSingleRecord', {
sequence: sequence,
streamId: streamId,
confId: _getConfId(streamId)
});
};
/**
* @function 停止单路录制--暂停使用
* @param streamId: String 停止混流设置信息
* @return Promise | void
*/
var stopSingleRecord = function stopSingleRecord(streamId) {
return callMethod$3('StopSingleRecord', {
streamId: streamId,
confId: _getConfId(streamId)
});
};
/**
* @function 创建 Rtc Capture对象
* @param renderId:String 采集器的渲染 id,必选
* @return Promise | void
*/
var createRtcCapture = function createRtcCapture(renderId) {
if (renderId === 'deviceCheckerInit' && deviceCheckerCaptureInit) {
return;
}
return callMethod$3('CreateRtcCapture', {
source: 'camera',
renderid: renderId
});
}; // 设置采集器配置
var setRtcCaptureParams = async function setRtcCaptureParams(args, from) {
if (!from) {
await setCaptureRenderID(args.streamId);
await setCaptureStreamId(args.streamId);
}
await setCameraParam(args.previewResolutionWidth, args.previewResolutionHeight, args.previewCaptureFps);
await setEncodeParam(args.encodedResolutionWidth, args.encodedResolutionHeight, args.encodeCaptureFps);
await setBitRate(args.encodeCaptureBitrate);
};
/**
* @function 加载采集插件的输入数据 //调用后,rtc 可以向采集插件传送摄像头数据,用于拼接
* @return: Promise
*/
var rtcLoadCollectionEntry = function rtcLoadCollectionEntry() {
return callMethod$3('RtcLoadCollectionEntry', {});
};
/**
* @function 加载采集插件的输出数据 //调用后,rtc 可以向采集插件传送学生流数据(加载截屏插件,获取截屏插件设置拉流头像回调函数)
* @param stream_ids array 设置需要拼接的学生头像流id,按数组顺序拼接
* @return: Promise
*/
var rtcLoadCollectionEntry2 = function rtcLoadCollectionEntry2(stream_ids) {
return callMethod$3('RtcLoadCollectionEntry2', {
stream_ids: stream_ids
});
};
/**
* @function 获取摄像头个数
* @return Promise | void
*/
var getCameraDeviceCount = function getCameraDeviceCount() {
return callMethod$3('GetCameraDeviceCount', {});
};
/**
* @function 获取摄像头列表
* @return Promise | void
*/
var getCameraDevice = async function getCameraDevice() {
var cameraListObject = JSON.parse((await callMethod$3('GetCameraDevice', {})).msg);
var cameraKeys = [];
if (cameraListObject) {
cameraKeys = Object.keys(cameraListObject);
}
var cameraList = [];
for (var i = 0, len = cameraKeys.length; i < len; i++) {
cameraList.push({
deviceId: cameraListObject[cameraKeys[i]].deviceID,
deviceName: cameraListObject[cameraKeys[i]].deviceName,
isDefault: cameraListObject[cameraKeys[i]].bDefault
});
deviceListReport.cameraList[cameraListObject[cameraKeys[i]].deviceID] = cameraListObject[cameraKeys[i]].deviceName; // console.log('hsghsghsg_9',deviceListReport.cameraList);
}
if (!window.zbyAVSDK_device_checker_init) {
window.zbyAVSDK_device_checker_init = {};
}
if (!window.zbyAVSDK_device_checker_init.camera) {
window.zbyAVSDK_device_checker_init.camera = {};
}
window.zbyAVSDK_device_checker_init.camera.hasTest = true;
window.zbyAVSDK_device_checker_init.camera.list = cameraList;
return cameraList;
};
/**
* @function 获取扬声器个数
* @return Promise | void
*/
var getSpeakerDeviceCount = function getSpeakerDeviceCount() {
return callMethod$3('GetSpeakerDeviceCount', {});
};
/**
* @function 获取扬声器列表
* @return Promise | void
*/
var getSpeakerDevice = async function getSpeakerDevice() {
var speakerListObject = JSON.parse((await callMethod$3('GetSpeakerDevice', {})).msg);
var speakerKeys = [];
if (speakerListObject) {
speakerKeys = Object.keys(speakerListObject);
}
var speakerList = [];
for (var i = 0, len = speakerKeys.length; i < len; i++) {
speakerList.push({
deviceId: speakerListObject[speakerKeys[i]].deviceID,
deviceName: speakerListObject[speakerKeys[i]].deviceName,
isDefault: speakerListObject[speakerKeys[i]].bDefault
});
deviceListReport.speakerList[speakerListObject[speakerKeys[i]].deviceID] = speakerListObject[speakerKeys[i]].deviceName; // console.log('hsghsghsg_8',deviceListReport.speakerList);
}
if (!window.zbyAVSDK_device_checker_init) {
window.zbyAVSDK_device_checker_init = {};
}
if (!window.zbyAVSDK_device_checker_init.speaker) {
window.zbyAVSDK_device_checker_init.speaker = {};
}
window.zbyAVSDK_device_checker_init.speaker.hasTest = true;
window.zbyAVSDK_device_checker_init.speaker.list = speakerList;
return speakerList;
};
/**
* @function 获取麦克风个数
* @return Promise | void
*/
var getMicrophoneDeviceCount = function getMicrophoneDeviceCount() {
return callMethod$3('GetMicrophoneDeviceCount', {});
};
/**
* @function 获取麦克风列表
* @return Promise | void
*/
var getMicrophoneDevice = async function getMicrophoneDevice() {
var microphoneListObject = JSON.parse((await callMethod$3('GetMicrophoneDevice', {})).msg);
var microphoneKeys = [];
if (microphoneListObject) {
microphoneKeys = Object.keys(microphoneListObject);
}
var microphoneList = [];
for (var i = 0, len = microphoneKeys.length; i < len; i++) {
microphoneList.push({
deviceId: microphoneListObject[microphoneKeys[i]].deviceID,
deviceName: microphoneListObject[microphoneKeys[i]].deviceName,
isDefault: microphoneListObject[microphoneKeys[i]].bDefault
});
deviceListReport.micList[microphoneListObject[microphoneKeys[i]].deviceID] = microphoneListObject[microphoneKeys[i]].deviceName;
}
if (!window.zbyAVSDK_device_checker_init) {
window.zbyAVSDK_device_checker_init = {};
}
if (!window.zbyAVSDK_device_checker_init.microphone) {
window.zbyAVSDK_device_checker_init.microphone = {};
}
window.zbyAVSDK_device_checker_init.microphone.hasTest = true;
window.zbyAVSDK_device_checker_init.microphone.list = microphoneList;
return microphoneList;
};
/**
* @function 指定麦克风设备
* @param deviceId:String 麦克风设备 id,必选
* @param operationType:String 操作类型,可选
* 'device_error' -> 设备出错处理,'plug_and_unplug' -> 热插拔处理,
* 不传即是普通的设置麦克风设备的行为
* @return Promise | void
*/
var setMicrophoneDevice = async function setMicrophoneDevice(args) {
var deviceId = args.deviceId,
operationType = args.operationType,
deviceState = args.deviceState,
changedDeviceId = args.changedDeviceId;
var deviceName = '';
var microPhoneData;
if (!deviceId) {
microPhoneData = await getMicrophoneDevice();
if (microPhoneData.length) {
var hasGetMicrophone = false;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = microPhoneData[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var item = _step.value;
if (item.isDefault) {
deviceId = item.deviceId;
deviceName = item.deviceName;
hasGetMicrophone = true;
break;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
if (!hasGetMicrophone) {
deviceId = microPhoneData[0].deviceId;
deviceName = microPhoneData[0].deviceName;
}
} else {
deviceId = '';
}
if (deviceId === '') {
NOTICE.noDevice({
deviceType: 'microphone'
});
}
}
try {
dataReport$2.setDevice({
device_type: 2,
device_id: deviceId,
device_name: deviceListReport.micList[deviceId],
operationType: operationType,
fore_state: operationType == 'hotPlug' ? +deviceState + 1 : '-'
});
window.zbyAVSDK_device_checker_init.microphone.name = deviceListReport.micList[deviceId];
} catch (e) {}
;
await callMethod$3('SetAudioDevice', {
deviceID: deviceId
});
if (operationType == 'hotPlug' || operationType == 'deviceError') {
if (!microPhoneData) {
microPhoneData = await getMicrophoneDevice();
deviceName = deviceListReport.micList[deviceId];
}
NOTICE[operationType]({
deviceType: 'microphone',
useDeviceId: deviceId,
useDeviceName: deviceName,
deviceList: microPhoneData,
deviceState: deviceState,
changedDeviceId: changedDeviceId
});
}
};
/**
* @function 获取麦克风音量
* @return Promise | void
*/
var getMicrophoneVolume = function getMicrophoneVolume() {
return callMethod$3('GetMicrophoneVolume', {});
};
/**
* @function 设置麦克风音量
* @param volume:Number 音量,必选
* @param bMuteDevice:Boolean 是否静音,可选
* 不传的话默认为 false 不静音
* @return Promise | void
*/
var setMicrophoneVolume = function setMicrophoneVolume(volume, bMuteDevice) {
if (typeof bMuteDevice === 'undefined') {
bMuteDevice = false;
}
return callMethod$3('SetMicrophoneVolume', {
bMuteDevice: bMuteDevice,
volume: volume
});
};
/**
* @function 开启/关闭麦克风音量回调
* @param open:Boolean true -> 开启,false -> 关闭,必选
* @return void
*/
var openMicVolumeCb = function openMicVolumeCb(open) {// if (open) {
// runMicVolumeCb = true;
// } else {
// runMicVolumeCb = false;
// }
};
/**
* @function 获取当前应用程序音量
* @return Promise | void
*/
var getCurrentAppSessionVolume = function getCurrentAppSessionVolume() {
return callMethod$3('GetCurrentAppSessionVolume', {});
};
/**
* @function 设置当前应用程序音量
* @param volume:Number 音量,必选
* @param mute:Boolean 是否静音,可选
* 不传的话默认为 false 不静音
* @return Promise | void
*/
var setCurrentAppSessionVolume = function setCurrentAppSessionVolume(volume, mute) {
if (typeof mute === 'undefined') {
mute = false;
}
return callMethod$3('SetCurrentAppSessionVolume', {
muted: mute,
volume: volume
});
};
/**
* @function 设置当前应用程序静音
* @param mute:Boolean 是否静音,必选
* @return Promise | void
*/
var setApplicationMute = function setApplicationMute(mute) {
return callMethod$3('SetApplicationMute', {
muted: mute
});
};
/**
* @function 设置预览窗口
* @param x:Number x 坐标,必选,推荐 0
* @param y:Number y 坐标,必选,推荐 0
* @param width:Number 宽,必选,推荐 300
* @param height:Number 高,必选,推荐 300
* @return Promise | void
*/
var setPreviewPos = function setPreviewPos(x, y, width, height) {
return callMethod$3('SetPreviewPos', {
x: x,
y: y,
width: width,
height: height
});
};
/**
* @function 指定摄像头设备
* @param deviceId:String 摄像头设备 id,必选
* @param close:Boolean true -> 关闭摄像头,false -> 不关闭摄像头
* Rtc 关闭摄像头是通过指定空的设备来实现的,因此需要做特化
* @param operationType:String 操作类型,可选
* 'device_error' -> 设备出错处理,'plug_and_unplug' -> 热插拔处理,
* 不传即是普通的设置摄像头设备的行为
* @return Promise | void
*/
var setCameraDevice = async function setCameraDevice(args) {
defaultApi$1.writeLog("sdk action : setCameraDevice args:".concat(JSON.stringify(args)));
var deviceId = args.deviceId,
close = args.close,
operationType = args.operationType,
deviceState = args.deviceState,
changedDeviceId = args.changedDeviceId;
var deviceName = '';
var cameraData;
if (!deviceId && !close) {
cameraData = await getCameraDevice();
if (cameraData.length) {
var hasGetCamare = false;
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = cameraData[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var item = _step2.value;
if (item.isDefault) {
deviceId = item.deviceId;
deviceName = item.deviceName;
hasGetCamare = true;
break;
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
if (!hasGetCamare) {
deviceId = cameraData[0].deviceId;
deviceName = cameraData[0].deviceName;
}
deviceId = cameraData[0].deviceId;
deviceName = cameraData[0].deviceName;
} else {
deviceId = '';
}
if (deviceId === '') {
NOTICE.noDevice({
deviceType: 'camera'
});
}
}
try {
dataReport$2.setDevice({
device_type: 1,
device_id: deviceId,
device_name: deviceListReport.cameraList[deviceId],
operationType: operationType,
fore_state: operationType == 'hotPlug' ? +deviceState + 1 : '-'
});
window.zbyAVSDK_device_checker_init.camera.name = deviceListReport.cameraList[deviceId];
} catch (e) {}
;
await callMethod$3('SetCameraDevice', {
deviceID: deviceId,
close: close
});
if (operationType == 'hotPlug' || operationType == 'deviceError') {
if (!cameraData) {
cameraData = await getCameraDevice();
deviceName = deviceListReport.cameraList[deviceId];
}
NOTICE[operationType]({
deviceType: 'camera',
useDeviceId: deviceId,
useDeviceName: deviceName,
deviceList: cameraData,
deviceState: deviceState,
changedDeviceId: changedDeviceId
});
}
try {
NOTICE.useredCamera({
deviceId: deviceId,
deviceName: deviceName
});
} catch (e) {}
;
};
/**
* @function 获取摄像头所支持的分辨率
* @param deviceId:String 设备id
* @return Promise | void
*/
var getCameraSupportedRes = function getCameraSupportedRes(deviceId) {
return callMethod$3('GetCameraSupportedResolution', {
deviceId: deviceId
});
};
/**
* @function 设置事件上报链接
* @param reportSvr:String 上报服务器链接,必选
* @return Promise | void
*/
var setEventReportSvr = function setEventReportSvr(reportSvr) {
return callMethod$3('SetEventReportSvr', {
reportSvr: reportSvr
});
};
/**
* @function 设置摄像头参数
* @param width:Number 分辨率宽,必选,推荐 1280
* @param height:Number 分辨率高,必选,推荐 720
* @param frameRate:Number 帧率,必选,推荐 15
* @return Promise | void
*/
var setCameraParam = function setCameraParam(width, height, frameRate) {
return callMethod$3('SetCameraParam', {
width: width,
height: height,
frameRate: frameRate
});
};
/**
* @function 指定扬声器
* @param speakId:String 扬声器 id,必选
* @return Promise | void
*/
var setSpeakerDevice = async function setSpeakerDevice(args) {
defaultApi$1.writeLog("sdk action : setSpeakerDevice args:".concat(JSON.stringify(args)));
var speakId = args.speakId,
operationType = args.operationType,
deviceState = args.deviceState,
changedDeviceId = args.changedDeviceId;
var deviceName = '';
var speakerData;
if (!speakId) {
speakerData = await getSpeakerDevice();
if (speakerData.length) {
var hasGetSpeaker = false;
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = speakerData[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var item = _step3.value;
if (item.isDefault) {
speakId = item.deviceId;
deviceName = item.deviceName;
hasGetSpeaker = true;
break;
}
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
if (!hasGetSpeaker) {
speakId = speakerData[0].deviceId;
deviceName = speakerData[0].deviceName;
}
} else {
speakId = '';
}
if (speakId === '') {
NOTICE.noDevice({
deviceType: 'speaker'
});
}
}
try {
dataReport$2.setDevice({
device_type: 3,
device_id: speakId,
device_name: deviceListReport.speakerList[speakId],
operationType: operationType,
fore_state: operationType == 'hotPlug' ? +deviceState + 1 : '-'
});
window.zbyAVSDK_device_checker_init.speaker.name = deviceListReport.speakerList[speakId];
} catch (e) {
console.error('error', e);
}
; // console.log('hsghsghsg3',speakId);
await callMethod$3('SetSpeakerDevice', {
speakId: speakId
});
if (operationType == 'hotPlug' || operationType == 'deviceError') {
if (!speakerData) {
speakerData = await getSpeakerDevice();
deviceName = deviceListReport.speakerList[speakId];
}
NOTICE[operationType]({
deviceType: 'speaker',
useDeviceId: speakId,
useDeviceName: deviceName,
deviceList: speakerData,
deviceState: deviceState,
changedDeviceId: changedDeviceId
});
}
};
/**
* @function 设置扬声器音量
* @param volume:Number 音量,必选
* @param muted:Boolean 是否静音,可选
* 不传的话就默认为 false 不静音
* @return Promise | void
*/
var setSpeakerVolume = function setSpeakerVolume(volume, muted) {
if (typeof muted === 'undefined') {
muted = false;
}
return callMethod$3('SetSpeakerVolume', {
muted: muted,
volume: volume
});
};
/**
* @function 设置扬声器静音
* @param mute:Boolean 是否静音,可选
* @return Promise | void
*/
var setSpeakerMute = function setSpeakerMute(mute) {
// try {
// dataReport.deviceChange({
// device: 3,
// device_state: mute ? 0 :1
// });
// } catch (e){};
return callMethod$3('SetSpeakerMute', {
muted: mute
});
};
/**
* @function 获取扬声器音量
* @return Promise | void
*/
var getSpeakerVolume = function getSpeakerVolume() {
return callMethod$3('GetSpeakerVolume', {});
};
/**
* @function 设置拉流的播放器静音
* @param streamId:String 被拉取的流的 id,必选
* @param mute:Boolean 是否静音,必选 true 静音| false不静音
* @return Promise | void
*/
var setMute = function setMute(streamId, mute) {
var rtcPlayerId = streamIdToRtcPlayerId[streamId];
return pullAudioFlow(rtcPlayerId, mute);
};
/**
* @function 是否拉取音频流--通过播放器id控制
* @param operation:Boolean,必选,true 静音| false不静音
* @param playerId:Number,必选,播放器id
* @return Promise | void
*/
var pullAudioFlow = function pullAudioFlow(playerId, operation, operator, streamid) {
defaultApi$1.writeLog("pullAudioFlow -- playerId ".concat(playerId, " operation ").concat(operation, " streamId ").concat(streamid));
if (streamid) {
if (streamIdToRtcPlayerId[streamid] == undefined) {
NOTICE.pullAudioFlowError({
streamid: streamid
});
return;
} else {
playerId = streamIdToRtcPlayerId[streamid];
console.log('pullAudioFlow-playerId', playerId, streamIdToPreviewId);
}
}
var streamId = rtcPlayerIdToStreamId[playerId];
try {
streamIdRtcPlayerInfo1[streamId].audio_type = !operation;
console.log('pullAudioFlow_rtc ::rtcPlayerIdToStreamId', streamId, rtcPlayerIdToStreamId);
console.log('pullAudioFlow_rtc ::streamIdRtcPlayerInfo1', streamId, streamIdRtcPlayerInfo1);
} catch (e) {
console.log('pullAudioFlow_rtc ::streamIdRtcPlayerInfo1--error', e);
}
; // console.log('hghghg',streamIdRtcPlayerInfo1[streamId]);
try {
if (operator) {
dataReport$2.setPullVoice({
code: +!operation,
pull_uid: util.getUidByStreamId(streamId),
pull_streamid: streamId,
playerId: playerId
});
}
} catch (e) {}
;
return callMethod$3('SetMute', {
muted: operation,
id: playerId
});
};
/**
* @function 控制只拉音频流
* @param streamId:String 被拉取的流的 id,必选
* @param audioOnly:Boolean 是否只拉音频流,必选,true -> 只拉音频流,false -> 音视频都拉
* @return Promise | void
*/
var controlPullAudioOnly = function controlPullAudioOnly(streamId, audioOnly) {
try {
streamIdRtcPlayerInfo1[streamId].video_type = !audioOnly;
console.log('controlPullAudioOnly_rtc ::streamIdRtcPlayerInfo1', streamId, streamIdRtcPlayerInfo1);
} catch (e) {
console.log('controlPullAudioOnly_rtc ::streamIdRtcPlayerInfo1--error', e);
}
var rtcPlayerId = streamIdToRtcPlayerId[streamId];
return callMethod$3('ControlPullAudioOnly', {
id: rtcPlayerId,
audioOnly: audioOnly
});
};
/**
* @function 启动摄像头
* @return Promise | void
*/
var startPreview = function startPreview() {
// try {
// dataReport.deviceChange({
// device: 1,
// device_state: 1
// });
// } catch (e){};
return callMethod$3('StartPreview', {});
};
/**
* @function 设置推流的编码参数
* @param width:Number 宽,必须,推荐 1280
* @param height:Number 高,必须,推荐 720
* @param frameRate:Number 码率,必须,推荐 15
* @return Promise | void
*/
var setEncodeParam = function setEncodeParam(width, height, frameRate) {
return callMethod$3('SetEncodeParam', {
width: width,
height: height,
frameRate: frameRate
});
};
/**
* @function 设置推流的比特率
* @param bps:Number 码率,必选,推荐 512000
* @return Promise | void
*/
var setBitRate = function setBitRate(bps) {
return callMethod$3('SetBitRate', {
bps: bps
});
};
/**
* @function 设置推流的的 streamId
* @param streamId:String 推流 id,必选,长度不能超过100个字符
* @return Promise | void
*/
var setCaptureStreamId = function setCaptureStreamId(streamId) {
return callMethod$3('SetCaptureStreamId', {
streamid: streamId
});
};
/**
* @function 设置本地摄像头采集器的渲染 id
* @param renderId:String 渲染 id,传入推流 id 即可,必选
* @return Promise | void
*/
var setCaptureRenderID = function setCaptureRenderID(renderId) {
return callMethod$3('SetCaptureRenderID', {
renderid: renderId
});
};
/**
* @function 开始推流到服务器
* 如果收到 error,SDK 回到 startPush 之前的状态,
* 应用程序需要重新设置正确的参数,并 startPush
* @return Promise | void
*/
var startPush = function startPush() {
if (!isFirstHeartBeatReport) {
isFirstHeartBeatReport = true;
heartBeatDataReport('start');
}
return callMethod$3('StartPush', {});
};
/**
* @function 停止推流
* @return Promise | void
*/
var stopPush = function stopPush() {
// try {
// dataReport.stopPublish({publish_streamid:window.zbyAVSDK_init_params.rtc.streamId});
// } catch (error) {
// }
return callMethod$3('StopPush', {});
};
/**
* @function 关闭摄像头
* @return Promise | void
*/
var stopPreview = function stopPreview() {
// try {
// dataReport.deviceChange({
// device: 1,
// device_state: 0
// });
// } catch (e){};
return callMethod$3('StopPreview', {});
};
/**
* @function 销毁采集器对象
* @return Promise | void
*/
var captureDestroy = async function captureDestroy() {
await stopPreview();
return callMethod$3('CaptureDestroy', {});
};
/**
* @function 销毁引擎
* @return Promise | void
*/
var destroyEngine = function destroyEngine() {
return callMethod$3('DestroyEngine', {});
};
/**
* @function 创建视频播放器
* @param pos:Object
* {
* x, // Number,x 坐标,必选,推荐 500
* y, // Number,y 坐标,必选,推荐 500
* width, // Number,宽,必选,推荐 300
* height // Number,高,必选,推荐 300
* }
* @param renderId:String,渲染 id,必选
* @return Promise | void
*/
var createRtcPlayer = function createRtcPlayer(pos, renderId) {
return callMethod$3('CreateRtcPlayer', {
pos: pos,
renderid: renderId
});
};
/**
* @function 设置被拉取的流的 id
* @param streamId:String 被拉取的流的 id,必选
* @return Promise | void
*/
var setPlayerStreamId = function setPlayerStreamId(rtcPlayerId, streamId) {
var args = {
streamid: streamId,
id: rtcPlayerId,
// 跨组拉流
confId: _getConfId(streamId)
};
defaultApi$1.writeLog("RTC::SetPlayerStreamId streamId: ".concat(streamId, " id: ").concat(rtcPlayerId, " confId:\n ").concat(util.getDataFromStreamUrl('roomId', streamId), "\n args : ").concat(JSON.stringify(args), "\n "));
return callMethod$3('SetPlayerStreamId', args);
};
/**
* @function 设置被拉取的流的渲染 id
* @param renderId:String 拉流的渲染 id,必选,传入被拉取的流的 id 即可
* @return Promise | void
*/
var setPlayRenderID = function setPlayRenderID(rtcPlayerId, renderId) {
defaultApi$1.writeLog("RTC::SetPlayRenderID streamId: ".concat(renderId, " id: ").concat(rtcPlayerId));
return callMethod$3('SetPlayRenderID', {
renderid: renderId,
id: rtcPlayerId
});
};
/**
* @function 关闭客户端
* @param streamId:String 被拉取的流的 id,必选
* @return Promise | void
*/
var playDestroy = function playDestroy(streamId) {
var rtcPlayerId = streamIdToRtcPlayerId[streamId];
defaultApi$1.writeLog("RTC::PlayDestroy streamId: ".concat(streamId, " id: ").concat(rtcPlayerId));
delete streamIdToRtcPlayerId[streamId];
delete streamIdRtcPlayerInfo[streamId];
return callMethod$3('PlayDestroy', {
id: rtcPlayerId
});
};
/**
* @function 开启本地或者远程的视频视图
* @param isLocal:Boolean 是否是本地的视频预览,必选
* @param streamId:String 要拉取的视频流的 id,可选,只有拉取远程的视频流的时候才是必选的
* @param domId:String <video> 标签的 id,可选
* 如果传了 domId,就把视频绑定到对应的 <video> 标签上
* @return Promise | void,可从 Promise 中获取 src,Promise.then((src) => {})
*/
var startLocalOrRemotePreview = async function startLocalOrRemotePreview(isLocal, streamId, domId, rtcPlayerId) {
defaultApi$1.writeLog("".concat(streamId, "----streamId-rtc----"));
var isUpdateChromeVersion = await util.getChromeVersion(); // 预览本地视频的话,流 id 从全局配置中获取
if (isLocal) {
streamId = isInRoom ? window.zbyAVSDK_init_params && window.zbyAVSDK_init_params.rtc.streamId : 'deviceCheckerInit';
}
var externalConstraints = {
audio: false,
video: {
mandatory: {
chromeMediaSource: 'external',
chromeMediaSourceId: "ems://TM/".concat(streamId)
}
}
};
return new Promise(function (resolve, reject) {
var handleExternalSuccess = function handleExternalSuccess(stream) {
defaultApi$1.writeLog("".concat(stream, "----stream-rtc----"));
stream.oninactive = function () {
defaultApi$1.writeLog('Stream inactive');
};
var src = isUpdateChromeVersion ? stream : window.URL.createObjectURL(stream);
console.log('内核升级', isUpdateChromeVersion);
if (domId && document.querySelector(domId)) {
if (isUpdateChromeVersion) {
console.log('内核升级1');
document.querySelector(domId).srcObject = src;
} else {
console.log('内核升级2');
document.querySelector(domId).src = src;
}
}
defaultApi$1.writeLog("setVidoeSrc, rtcPlayerId: ".concat(rtcPlayerId, ", streamId:").concat(streamId, ", domId: ").concat(domId, ", src: ").concat(src));
resolve(src);
};
var handleExternalError = function handleExternalError(error) {
if (error.name === 'ConstraintNotSatisfiedError') {
console.error('ConstraintNotSatisfiedError');
} else if (error.name === 'PermissionDeniedError') {
console.error('Permissions have not been granted to use your camera and ' + 'microphone, you need to allow the page access to your devices in ' + 'order for the demo to work.');
}
console.error("getUserMedia error: ".concat(error.name), error);
if (domId) {
document.querySelector(domId).src = '';
}
reject('');
};
if (navigator.webkitGetUserMedia) {
navigator.webkitGetUserMedia(externalConstraints, handleExternalSuccess, handleExternalError);
}
});
};
/**
* @function 初始化
* @param args:Object
* {
* extensionVersion, // String,扩展版本号,必选
* appId, // String,Rtc 秘钥,必选
* userName, // String,用户名,必选
* userId, // Number,用户 id,必选
* roomId, // String,房间 id,必选
* streamId // String,流 id,必选
* }
* @return Promise | void
*/
var init = async function init(args) {
var usedDevices = window.zbyAVSDK_device_checker_init;
var devices = args.devices;
args.devices = {
camera: devices && devices.camera || usedDevices && usedDevices.camera && usedDevices.camera.use || '',
microphone: devices && devices.microphone || usedDevices && usedDevices.microphone && usedDevices.microphone.use || '',
speaker: devices && devices.speaker || usedDevices && usedDevices.speaker && usedDevices.speaker.use || ''
};
await loadRtc(args.extensionVersion); // setStatisticsInterval(1000);
addListener$1();
await setAppId(args.appId);
await setUserName(args.userName);
await setUserId(args.userId);
await setConfId(args.confId); // await joinRtcRoom();
if (deviceCheckerCaptureInit) {
await captureDestroy();
deviceCheckerCaptureInit = false;
} // if (args.role === 'teacher' && args.classMode === 1) {
// await setUserRole(1);
// }
//小班课 需要加载采集插件的输入数据,为了拼接rtc头像
if (args.classMode === 1 || args.classMode === 2) {
rtcLoadCollectionEntry();
}
;
await createRtcCapture(args.streamId);
await setDefaultDevice(args.devices, 'default');
await setRtcCaptureParams(args);
await setPreviewMute(true);
await muteLocalVideo(true);
await startPreview();
isInRoom = true;
window.current_sdk_type = 'rtc';
defaultApi$1.writeLog('rtc init finished current_sdk_type : rtc');
paramInfo = window.zbyAVSDK_init_params.rtc;
captureBefore = paramInfo.encodedResolutionWidth + '*' + paramInfo.encodedResolutionHeight; //运控获取,一直不变(拼接前摄像头采集分辨率)
captureEncodeBefore = paramInfo.previewResolutionWidth + '*' + paramInfo.previewResolutionHeight; //摄像头拼接前编码分辨率云控拿取
captureAfter = captureBefore;
};
/**
* @function 恢复
*/
var recoverSdk = async function recoverSdk(args) {
addListener$1();
await setRtcCaptureParams(args);
await setPreviewMute(true);
_confId = args.confId;
var zby_sdk_rtcPlayerIds = localStorage.getItem('zby_sdk_rtcPlayerIds');
if (zby_sdk_rtcPlayerIds) {
rtcPlayerIds = zby_sdk_rtcPlayerIds.split(',').map(function (item) {
return +item;
});
defaultApi$1.writeLog("RTC sdk action : recoverSdk --> PlayDestroy --> rtcPlayerIds: ".concat(rtcPlayerIds));
if (rtcPlayerIds.length > 0) {
for (var i = 0, len = rtcPlayerIds.length; i < len; i++) {
await callMethod$3('PlayDestroy', {
id: rtcPlayerIds[i]
});
}
}
}
localStorage.removeItem('zby_sdk_rtcPlayerIds');
isInRoom = true;
window.current_sdk_type = 'rtc';
defaultApi$1.writeLog('rtc recoverSdk finished current_sdk_type : rtc');
};
var stopCheckDevice = function stopCheckDevice() {
deviceCheckerCaptureInit = false;
removerListener();
defaultApi$1.writeLog('rtc stopCheckDevice and removerListener and captureDestroy');
return captureDestroy();
}; //设置拉流质量监控周期
var setStatisticsInterval = function setStatisticsInterval(interval) {
return callMethod$3('SetStatisticsInterval', {
interval: interval
});
};
/**
* @function 设置默认的硬件设备,包括摄像头、麦克风以及扬声器
* @return Promise | void
*/
var setDefaultDevice = async function setDefaultDevice(devices, operationType) {
// 设置默认的摄像头
if (devices && devices.camera) {
await setCameraDevice({
deviceId: devices.camera,
operationType: "".concat(operationType, "_1")
});
} else {
var cameraData = await getCameraDevice();
if (cameraData.length) {
var hasSetCamera = false;
var _iteratorNormalCompletion4 = true;
var _didIteratorError4 = false;
var _iteratorError4 = undefined;
try {
for (var _iterator4 = cameraData[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
var item = _step4.value;
if (item.isDefault) {
await setCameraDevice({
deviceId: item.deviceId,
operationType: "".concat(operationType, "_2")
});
hasSetCamera = true;
break;
}
}
} catch (err) {
_didIteratorError4 = true;
_iteratorError4 = err;
} finally {
try {
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
_iterator4.return();
}
} finally {
if (_didIteratorError4) {
throw _iteratorError4;
}
}
}
if (!hasSetCamera) {
await setCameraDevice({
deviceId: cameraData[0].deviceId,
operationType: "".concat(operationType, "_3")
});
}
}
} // 设置默认的麦克风
if (devices && devices.microphone) {
await setMicrophoneDevice({
deviceId: devices.microphone,
operationType: "".concat(operationType, "_1")
});
} else {
var microPhoneData = await getMicrophoneDevice();
if (microPhoneData.length) {
var hasSetMicrophone = false;
var _iteratorNormalCompletion5 = true;
var _didIteratorError5 = false;
var _iteratorError5 = undefined;
try {
for (var _iterator5 = microPhoneData[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
var _item = _step5.value;
if (_item.isDefault) {
await setMicrophoneDevice({
deviceId: _item.deviceId,
operationType: "".concat(operationType, "_2")
});
hasSetMicrophone = true;
break;
}
}
} catch (err) {
_didIteratorError5 = true;
_iteratorError5 = err;
} finally {
try {
if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
_iterator5.return();
}
} finally {
if (_didIteratorError5) {
throw _iteratorError5;
}
}
}
if (!hasSetMicrophone) {
await setMicrophoneDevice({
deviceId: microPhoneData[0].deviceId,
operationType: "".concat(operationType, "_3")
});
}
}
} // 设置默认的扬声器
if (devices && devices.speaker) {
await setSpeakerDevice({
speakId: devices.speaker,
operationType: "".concat(operationType, "_1")
});
} else {
var speakerData = await getSpeakerDevice();
if (speakerData.length) {
var hasSetSpeaker = false;
var _iteratorNormalCompletion6 = true;
var _didIteratorError6 = false;
var _iteratorError6 = undefined;
try {
for (var _iterator6 = speakerData[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
var _item2 = _step6.value;
if (_item2.isDefault) {
await setSpeakerDevice({
speakId: _item2.deviceId,
operationType: "".concat(operationType, "_2")
});
hasSetSpeaker = true;
break;
}
}
} catch (err) {
_didIteratorError6 = true;
_iteratorError6 = err;
} finally {
try {
if (!_iteratorNormalCompletion6 && _iterator6.return != null) {
_iterator6.return();
}
} finally {
if (_didIteratorError6) {
throw _iteratorError6;
}
}
}
if (!hasSetSpeaker) {
await setSpeakerDevice({
speakId: speakerData[0].deviceId,
operationType: "".concat(operationType, "_3")
});
}
}
}
};
/**
* @function 设置是否只推音频流
* @param audioOnly:Boolean 必选
* @return Promise | void
*/
var controlPushAudioOnly = function controlPushAudioOnly(audioOnly) {
return callMethod$3('ControlPushAudioOnly', {
audioOnly: audioOnly
});
};
/**
* @function 设置用户角色,新小班独有逻辑
* @param {number} userRole 必选 用户角色 1=老师
* @return Promise | void
*/
var setUserRole = function setUserRole(userRole) {
return callMethod$3('SetUserRole', {
userRole: userRole
});
};
/**
* @function 开启或者关闭摄像头
* @param operation:Boolean 操作类型,false -> 关闭,true -> 打开,必选
* @return Promise | void
*/
var openOrCloseCamera = async function openOrCloseCamera(operation) {
// await controlPushAudioOnly(!operation);
// await muteStreamVideo(!operation);
isNoticeCarVolumeRtc = operation;
await muteLocalVideo(!operation);
if (operation) {
if (window.zbyAVSDK_init_params && window.zbyAVSDK_init_params.rtc) {
var rtc = window.zbyAVSDK_init_params.rtc;
await setRtcCaptureParams(rtc, 'deviceCheckerInit');
} // 打开原本正在使用的摄像头
if (rtcNowUseCamera) {
await setCameraDevice({
deviceId: rtcNowUseCamera
});
} else {
await setCameraDevice({});
} // await startPreview();
} // else {
// await setCameraDevice({deviceId: '', close: true});
// // await stopPreview();
// }
};
/**
* @function 开启或者关闭摄像头以及麦克风
* @param operation:Boolean 操作类型,false -> 关闭,true -> 打开,必选
* @return Promise | void
*/
var openOrCloseCameraAndMicrophone = async function openOrCloseCameraAndMicrophone(operation) {
if (operation) {
await startPreview();
} else {
await stopPreview();
}
};
/**
* @function 控制本地视频预览的声音,即播放自己麦克风录到的声音
* @param mute:Boolean 操作类型,false -> 不 mute,true -> mute,必选
* @return Promise | void
*/
var setPreviewMute = function setPreviewMute(mute) {
return callMethod$3('SetPreviewMute', {
mute: mute
});
};
/**
* @function 设置麦克风静音
* @param mute:Boolean false -> 不静音,true -> 静音,必选
* @return Promise | void
*/
var setRealTimeAudioMute = async function setRealTimeAudioMute(mute) {
isNoticeMicVolumeRtc = !mute; // await muteStreamAudio(mute);
await muteLocalAudio(mute); // return callMethod('SetRealTimeAudioMute', {
// mute
// });
};
/**
* @function 初始化拉流
* @param streamId:String 被拉取的流的 id,必选
* @param domId:String <video> 标签的 id,可选
* 如果传了就把视频绑定到对应的 <video> 标签上
* @return src:String 视频预览地址
*/
var initPullFlow = async function initPullFlow(streamId, domId, mute, renderId, notAutoPlay, audioOnly, needScale, scaleParams) {
defaultApi$1.writeLog("RTC:: initPullFlow_start ,streamId :".concat(streamId));
var rtcPlayerId;
var _renderId = renderId || streamId;
resetStreamIdRtcPlayerInfo1(streamId);
resetStreamIdRtcPlayerInfo(streamId);
try {
if (!isFirstHeartBeatReport) {
isFirstHeartBeatReport = true;
heartBeatDataReport('start');
}
} catch (error) {}
if (streamIdToRtcPlayerId[streamId] && !renderId) {
defaultApi$1.writeLog('RTC:: The streamId queue contains this streamId');
rtcPlayerId = streamIdToRtcPlayerId[streamId];
await stop(streamId);
resetStreamIdRtcPlayerInfo(streamId);
console.log('streamIdIsExitedRtc', rtcPlayerId, streamIdToRtcPlayerId[streamId]);
} else {
defaultApi$1.writeLog('RTC:: The streamId queue does not contain this streamId');
if (stopedRtcPlayers.length > 0) {
rtcPlayerId = stopedRtcPlayers.pop();
console.log('streamIdIsNoExitedRtc', rtcPlayerId, streamIdToRtcPlayerId[streamId]);
} else {
rtcPlayerId = JSON.parse((await createRtcPlayer({
x: 500,
y: 500,
width: 500,
height: 500
}, _renderId)).msg).id;
}
streamIdToRtcPlayerId[streamId] = rtcPlayerId;
}
if (rtcPlayerIds.indexOf(rtcPlayerId) < 0) {
rtcPlayerIds.push(rtcPlayerId);
localStorage.setItem('zby_sdk_rtcPlayerIds', rtcPlayerIds.join(','));
} // 判断是否创建或者获取窗口ID成功,不成功就删掉重试
if (!rtcPlayerId) {
delete streamIdToRtcPlayerId[streamId]; // delete streamIdToBlobUrl[streamId];
return initPullFlow(streamId, domId, mute, renderId);
}
if (needScale) {
setRtcXBScale(rtcPlayerId, scaleParams);
}
rtcPlayerIdToStreamId[rtcPlayerId] = streamId; // 静音拉流
await pullAudioFlow(rtcPlayerId, !!mute); // 只拉音频
await controlPullAudioOnly(streamId, !!audioOnly);
await setPlayRenderID(rtcPlayerId, _renderId);
await setPlayerStreamId(rtcPlayerId, streamId);
if (!notAutoPlay) {
await play(streamId);
}
var videoSrc = await startLocalOrRemotePreview(false, _renderId, domId, rtcPlayerId);
return {
videoSrc: videoSrc,
playerId: rtcPlayerId
};
};
/**
* @function 切换播放流
* @param streamId:String 需要被替换的流的 id,必选
* @param toStreamId:String 被拉取的流的 id,必选
* @param toDomId:String <video> 标签的 id,可选
* 如果传了就把视频绑定到对应的 <video> 标签上
* @return src:String 视频预览地址
*/
var changePullFlow = async function changePullFlow(streamId, toStreamId, toDomId) {
await stop(streamId, true);
return initPullFlow(toStreamId, toDomId);
};
/**
* @function 是否需要缩放
* @param { nunber } id 窗口id,必选
* @param { object } scaleParams
* @param { number } scaleParams.is_need_xb_scale 是否开启缩放
* @param { number } scaleParams.height 高
* @param { number } scaleParams.width 宽
* @return Promise | void
*/
var setRtcXBScale = async function setRtcXBScale(id, scaleParams) {
defaultApi$1.writeLog("RTC::SetRtcXBScale id: ".concat(id, " scaleParams: ").concat(JSON.stringify(scaleParams)));
await callMethod$3('SetRtcXBScale', _objectSpread({}, scaleParams, {
id: id
}));
};
/**
* @function 恢复拉指定的流
* @param streamId:String 被拉取的流的 id,必选
* @return Promise | void
*/
var play = async function play(streamId) {
var id = streamIdToRtcPlayerId[streamId];
defaultApi$1.writeLog("RTC::Play streamId: ".concat(streamId, " id: ").concat(id));
await callMethod$3('Play', {
streamId: streamId,
id: id
});
};
/**
* @function 停止拉指定的流
* @param streamId:String 被拉取的流的 id,必选
* @param recovery:Boolean 是否回收播放器, 可选
* @return Promise | void
*/
var stop = async function stop(streamId, recovery) {
currStreamIdRtcPlayerInfo && (currStreamIdRtcPlayerInfo.video_ifg = 0);
currStreamIdRtcPlayerInfo && (currStreamIdRtcPlayerInfo.audio_ifg = 0);
var id = streamIdToRtcPlayerId[streamId];
delete streamIdRtcPlayerInfo[streamId];
if (recovery && id && !stopedRtcPlayers.includes(id)) {
stopedRtcPlayers.push(id);
delete streamIdToRtcPlayerId[streamId]; // delete streamIdToBlobUrl[streamId];
}
return callMethod$3('Stop', {
id: id
});
};
/**
* @function 停止并回收所有拉流
* @return Promise | void
*/
var stopAllPullFlow = function stopAllPullFlow() {
var toRecoveryArr = [];
for (var streamId in streamIdToRtcPlayerId) {
if (streamIdToRtcPlayerId.hasOwnProperty(streamId)) {
var _id = streamIdToRtcPlayerId[streamId];
if (_id && !stopedRtcPlayers.includes(_id)) {
stopedRtcPlayers.push(_id);
toRecoveryArr.push(callMethod$3('Stop', {
id: _id
}));
}
}
}
streamIdToRtcPlayerId = {};
return Promise.all(toRecoveryArr);
};
/**
* @function 停止拉指定的流并销毁播放器
* @param streamId:String 被拉取的流的 id,必选
* @return Promise
*/
var stopPullFlow = async function stopPullFlow(streamId) {
await stop(streamId);
await playDestroy(streamId);
};
/**
* @function 发送转推命令
* @param args: Object
* {
* @param cmd:String 必选,'start' | 'stop' | 'pause' | 'resume'
* @param liveId:String 房间 id,可选,可从 window 的初始化参数中获取
* @param rtmpAddr:String 字符串(转推地址使用分号隔开),可选,sdk 可以内部拼接
* @param bSaveMp4:Boolean 是否保存为 mp4 文件,可选,默认为 false
* @param bPushRtmp:Boolean 是否推 rtmp 流,可选,默认为 true
* @param bPushAllRtmp:Boolean 是否全部推 rtmp 流,可选,默认为 false
* @param confId:String 分组id,可选,默认为 sdk初始化分组id
* }
* @return Promise | void
*/
var sendRecordingMsg = function sendRecordingMsg(args) {
var cmd = args.cmd,
liveId = args.liveId,
rtmpAddr = args.rtmpAddr,
bSaveMp4 = args.bSaveMp4,
bPushRtmp = args.bPushRtmp,
bPushAllRtmp = args.bPushAllRtmp,
confId = args.confId;
var rtc = window.zbyAVSDK_init_params.rtc;
if (typeof liveId === 'undefined') {
liveId = rtc.streamId;
}
if (typeof rtmpAddr === 'undefined') {
// 转推的流 id,从全局的初始化参数中获取
var sid = rtc.sid; // 拼接转推地址
rtmpAddr = rtc.recordUrl + '/' + sid;
}
if (typeof bSaveMp4 === 'undefined') {
bSaveMp4 = false;
}
if (typeof bPushRtmp === 'undefined') {
bPushRtmp = true;
}
if (typeof bPushAllRtmp === 'undefined') {
bPushAllRtmp = true;
}
var params = {
cmd: cmd,
liveId: liveId,
rtmpAddr: rtmpAddr,
bSaveMp4: bSaveMp4,
bPushRtmp: bPushRtmp,
bPushAllRtmp: bPushAllRtmp,
confId: confId
};
defaultApi$1.writeLog("SendRecordingMsg ".concat(JSON.stringify(params)));
return callMethod$3('SendRecordingMsg', params);
};
/**
* @function 退出房间
* @return Promise
*/
var leaveRoom = async function leaveRoom() {
await stopPush();
await captureDestroy();
for (var i = 0, len = rtcPlayerIds.length; i < len; i++) {
await callMethod$3('PlayDestroy', {
id: rtcPlayerIds[i]
});
}
removerListener();
heartBeatDataReport('stop');
isFirstHeartBeatReport = false;
rtcPlayerIds = [];
streamIdToRtcPlayerId = {};
rtcPlayerIdToStreamId = {};
streamIdRtcPlayerInfo = {};
streamIdRtcPlayerInfo1 = {}; // heartBeatDataReportObj = {};
stopedRtcPlayers = [];
isInRoom = false;
};
var hasStream = function hasStream(streamId) {
return Object.keys(streamIdToRtcPlayerId).includes(streamId);
};
function _getConfId(streamId) {
// 如果没有传streamId,取公共confId
if (!streamId) {
return _confId;
}
var institutionId = util.getDataFromStreamUrl('orgId', streamId);
var roomId = util.getDataFromStreamUrl('roomId', streamId); // 传入streamId,通过roomId_机构id拼接得到confId,用于跨组拉流
return util.getConfId(institutionId, roomId);
}
/**
* @function 开始本地视频录制
* @param enableRecord 开始/结束
* @param pathFile 录制路径
* @return Promise | void
*/
var localRecordVideo = async function localRecordVideo(enableRecord, pathFile) {
defaultApi$1.writeLog("avsdk RTC::localRecordVideo enableRecord: ".concat(enableRecord, ", storagePath: ").concat(pathFile));
if (enableRecord) {
await callMethod$3('SetRecordType', {
type: 'type.mp4',
bAudioOnly: false
});
await callMethod$3('SetRecordPathFile', {
pathFile: pathFile
});
return callMethod$3('StartRecord', {});
} else {
return callMethod$3('StopRecord', {});
}
};
/**
* @function 本地音频录制
* @param enableRecord 开始/结束
* @param storagePath 录制路径
* @return Promise | void
*/
var localRecordAudio = async function localRecordAudio(enableRecord, storagePath) {
defaultApi$1.writeLog("avsdk RTC::localRecordAudio enableRecord: ".concat(enableRecord, ", storagePath: ").concat(storagePath));
return callMethod$3('EnableSelectedAudioRecord', {
enable: true,
sampleRate: 16000,
channels: 1,
mode: 0,
samplesPerCall: 320,
enableRecord: enableRecord,
storagePath: storagePath
});
}; //推不推视频(是否推画面)
var muteStreamVideo = function muteStreamVideo() {
var mute = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
return callMethod$3('MuteStreamVideo', {
mute: mute
});
}; //推不推视频(是否采集,这个方法直接不采集画面)
var muteLocalVideo = function muteLocalVideo() {
var mute = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
return callMethod$3('MuteLocalVideo', {
mute: mute
});
}; //推不推声音 (是否推声音)
var muteStreamAudio = function muteStreamAudio() {
var mute = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
// try {
// dataReport.deviceChange({
// device: 2,
// device_state: mute ? 0 :1
// });
// } catch (e){};
return callMethod$3('MuteStreamAudio', {
mute: mute
});
}; //推不推声音 (是否采集,这个方法直接不采集声音)
var muteLocalAudio = function muteLocalAudio() {
var mute = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
return callMethod$3('MuteLocalAudio', {
mute: mute
});
};
/**
* @function 开始连麦
* @param mode:number 采集器默认, 默认0=站立 1=坐立
* @return Promise | void
*/
var teacherStartLinkMic = async function teacherStartLinkMic() {
var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
if (mode === 0) {
await muteStreamVideo(true);
await setMicrophoneDevice({}); // await muteStreamAudio(false);
await muteLocalAudio(false);
} else {
// await muteLocalVideo(false);
await muteLocalAudio(false);
}
};
/**
* @function 结束连麦
* @param mode:number 采集器默认, 默认0=站立 1=坐立
* @return Promise | void
*/
var teacherStopLinkMic = async function teacherStopLinkMic() {
var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
if (mode === 0) {
await muteStreamVideo(false);
await setMicrophoneDevice({
deviceId: ''
});
} // else {
// await muteLocalVideo(true);
// }
};
/**
* @function 设置采集扬声器声音(rtc)
* @param { string } deviceId 设备id
* @param {boolean} speaker 采集扬声器声音=true/不采集=false
* @return: Promise
*/
var setAudioSpeakerCapture = async function setAudioSpeakerCapture(deviceId, speaker) {
return callMethod$3('SetAudioSpeakerCapture', {
deviceID: deviceId,
bMixSpeaker: speaker
});
};
/**
* @function 设置混流和背景色
* @param { number } type 0=不拼接/1=截屏窗+背景图/2=截屏窗+背景图+头像
* @param { number } id 需要混合的采集器id
* @param { object } rgb
* @param { number } rgb.r
* @param { number } rgb.g
* @param { number } rgb.b
* @return: Promise
*/
var setMixStream = async function setMixStream(type, id, rgb) {
await callMethod$3('SetIsNeedCombineCap', {
isNeedCombine: type,
id: id
});
if (rgb) {
await callMethod$3('SetCombinePadRGB', rgb);
}
if (!type) {
try {
dataReport$2.splitState({
camera_split_start_resolution: captureAfter,
camera_split_start_encode_resolution: captureEncodeAfter,
//摄像头拼接前编码分辨率
camera_split_end_resolution: captureBefore,
camera_split_end_encode_resolution: captureEncodeBefore,
//摄像头拼接后编码分辨率
screen_split_start_encode_resolution: screenEncodeAfter,
//截屏窗拼接前编码分辨率
screen_split_start_resolution: screenEncodeAfter,
//截屏窗拼接前采集分辨率
screen_split_end_encode_resolution: screenEncodeBefore,
//截屏窗拼接后编码分辨率
screen_split_end_resolution: screenEncodeBefore,
//截屏窗拼接后采集分辨率
split: '结束拼接' //拼接状态 不拼接
});
} catch (e) {}
;
}
};
/**
* @function 采集器截图
* @param { string } fileName 文件名,需要后缀名。例如:333.jpg
* @return: Promise
*/
var captureSnapShot = function captureSnapShot(file_name) {
return callMethod$3('SnapShot', {
quality: 70,
file_name: file_name
});
};
/**
* @function 播放器截图
* @param { string } fileName 文件名,需要后缀名。例如:333.jpg
* @return: Promise
*/
var playerSnapShot = function playerSnapShot(id, file_name) {
return callMethod$3('PlayerSnapShot', {
id: id,
quality: 70,
file_name: file_name
});
};
/**
* @function 设置镜像状态(预览)
* @param { boolean } isMirror true=开启 false=关闭
* @return: Promise
*/
var setMirrorStatus = function setMirrorStatus(isMirror) {
return callMethod$3('SetRTCPreViewMirror', {
isMirror: isMirror
});
};
/**
* @function 设置推流镜像状态
* @param { boolean } id 采集器Id
* @param { boolean } mode 1=开启 0=关闭
* @return: Promise
*/
var setMirrorMode = function setMirrorMode(mode) {
var id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var realId = mode == 0 ? 0 : 2;
defaultApi$1.writeLog("RTC: setMirrorMode, mode: ".concat(mode, ", id:").concat(id, ", realId:").concat(realId));
return callMethod$3('SetMirrorMode', {
id: id,
mode: realId
});
};
/**
* @function 设置拉流镜像状态
* @param { boolean } isMirror true=开启 false=关闭
* @return: Promise
*/
var setRTCPlayViewMirror = function setRTCPlayViewMirror(isMirror, id) {
return callMethod$3('SetRTCPlayViewMirror', {
isMirror: isMirror,
id: id
});
}; //美颜相关
/**
* @function 开启美颜
* @return: Promise
*/
var startSenseMe = async function startSenseMe() {
return callMethod$3('StartSenseMe', {});
};
/**
* @function 设置美颜参数
* * @param { number } type //美颜类型,1、红润强度,3、磨皮强度,4、美白强度,5、大眼,6、瘦脸,7、小脸,8、对比度强度,9、饱和度强度
* * @param { number } value //美颜数值,有效值范围0~100
* @return: Promise
*/
var setBeautifyParam = async function setBeautifyParam(type, value) {
return callMethod$3('SetBeautifyParam', {
type: type,
value: value
});
};
/**
* @function 关闭美颜
* @return: Promise
*/
var endSenseMe = async function endSenseMe() {
return callMethod$3('EndSenseMe', {});
};
/**
* @function 发送SEI
* @return: Promise
*/
var sendMediaSideInfo = async function sendMediaSideInfo(text) {
return callMethod$3('SendMediaSideInfo', {
id: id,
text: text
});
}; // 获取TalMedia.dll版本号
var getSDKVersion = async function getSDKVersion() {
return callMethod$3('GetSDKVersion', {});
};
var heartBeatRealKeys = ['video_fps', 'video_bitrate', 'audio_fps', 'audio_bitrate'];
var _heartBeatDataReport = function _heartBeatDataReport() {
// let cpuRate = 0;
// let memRate = 0;
var rateCount = 0; // let appCpuRate = 0;
// let appMemUsed = 0;
var rateTimer = setInterval(async function () {
rateCount++; // let {cpu_rate, mem_rate, gpus, app_cpu_rate, app_mem_used} = (await toolApi.getCurCpuMemInfo()).msg;
// cpu_rate = cpu_rate < 0 ? 0 : cpu_rate;
// cpuRate += parseFloat(cpu_rate);
// memRate += parseFloat(mem_rate);
// if (window.zbyAVSDK_init_params.rtc.role === 'student') {
// appCpuRate += parseFloat(app_cpu_rate);
// appMemUsed += parseFloat(app_mem_used);
// }
if (rateCount >= 3) {
// heartBeatRealKeys.forEach(realKey => {
// if (heartBeatDataReportObj.hasOwnProperty(realKey) && heartBeatDataReportObj.count > 0) {
// heartBeatDataReportObj[realKey] = util.toFixed(heartBeatDataReportObj[realKey]/heartBeatDataReportObj.count);
// }
// });
// heartBeatDataReportObj.volume = heartBeatDataReportObj.volume.join(',');
var pullInfo = [];
Object.keys(streamIdRtcPlayerInfo).forEach(function (streamid) {
heartBeatRealKeys.forEach(function (realKey) {
if (!streamIdRtcPlayerInfo[streamid].hasOwnProperty(realKey)) {
streamIdRtcPlayerInfo[streamid][realKey] = [];
} // if (streamIdRtcPlayerInfo[streamid].count > 0) {
// streamIdRtcPlayerInfo[streamid][realKey] = util.toFixed(streamIdRtcPlayerInfo[streamid][realKey]/streamIdRtcPlayerInfo[streamid].count);
// }
}); //获取拉流类型,后期可写为函数提出去
if (streamIdRtcPlayerInfo1[streamid].audio_type && streamIdRtcPlayerInfo1[streamid].video_type) {
streamIdRtcPlayerInfo1[streamid].stream_type = 'both';
} else if (!streamIdRtcPlayerInfo1[streamid].audio_type && streamIdRtcPlayerInfo1[streamid].video_type) {
streamIdRtcPlayerInfo1[streamid].stream_type = 'video';
} else if (streamIdRtcPlayerInfo1[streamid].audio_type && !streamIdRtcPlayerInfo1[streamid].video_type) {
streamIdRtcPlayerInfo1[streamid].stream_type = 'audio';
} else {
streamIdRtcPlayerInfo1[streamid].stream_type = 'none';
} // console.log('hsghsghsg_type_type', streamIdRtcPlayerInfo1[streamid].stream_type);
// streamIdRtcPlayerInfo[streamid].volume = streamIdRtcPlayerInfo[streamid].volume.join(',');
// delete streamIdRtcPlayerInfo[streamid].count;
pullInfo.push(_objectSpread({
streamid: streamid
}, streamIdRtcPlayerInfo[streamid], {
pull_type: streamIdRtcPlayerInfo1[streamid].stream_type,
volume: streamIdRtcPlayerInfo[streamid].volume.slice(0, streamIdRtcPlayerInfo[streamid].volume.length - 1)
}));
resetStreamIdRtcPlayerInfo(streamid);
}); // delete heartBeatDataReportObj.count;
if (isFirstHeartBeatReport && rateCount > 0) {
try {
//静音推流时过滤掉音频帧率和码率,上报为0;
// if (!isNoticeMicVolumeRtc) {
// heartBeatDataReportObj['audio_fps'] = [];
// heartBeatDataReportObj['audio_bitrate'] = [];
// };
//获取推流类型,后期可写为函数提出去
if (zbysdk$1.deviceStatus.camera && zbysdk$1.deviceStatus.microphone) {
zbysdk$1.deviceStatus.stream_type = 'both';
} else if (!zbysdk$1.deviceStatus.camera && zbysdk$1.deviceStatus.microphone) {
zbysdk$1.deviceStatus.stream_type = 'audio';
} else if (zbysdk$1.deviceStatus.camera && !zbysdk$1.deviceStatus.microphone) {
zbysdk$1.deviceStatus.stream_type = 'video';
} else {
zbysdk$1.deviceStatus.stream_type = 'none';
}
;
defaultApi$1.writeLog("push_type_rtc zbysdk.deviceStatus.camera: ".concat(zbysdk$1.deviceStatus.camera, ",zbysdk.deviceStatus.microphone: ").concat(zbysdk$1.deviceStatus.microphone, ", type: ").concat(zbysdk$1.deviceStatus.stream_type));
defaultApi$1.writeLog("push_type_rtc carema: ".concat(isNoticeCarVolumeRtc, ",mic: ").concat(isNoticeMicVolumeRtc, ", a_fps: ").concat(dataRtcCapture.audioInputframes, ", a_bit: ").concat(dataRtcCapture.audioencoderate, ", v_fps: ").concat(dataRtcCapture.videoInputframes, ", v_bit: ").concat(dataRtcCapture.videoencoderate)); // if (window.zbyAVSDK_init_params.rtc.role === 'teacher') {
dataReport$2.heartbeat(_objectSpread({}, _objectSpread({}, heartBeatDataReportObj, {
push_type: zbysdk$1.deviceStatus.stream_type,
volume: heartBeatDataReportObj.volume.slice(0, heartBeatDataReportObj.volume.length - 1)
}), {
// pull_info: JSON.stringify(pullInfo),
pull_info: pullInfo // cpu_rate: util.toFixed(cpuRate/rateCount),
// mem_rate: util.toFixed(memRate/rateCount),
})); // } else {
// dataReport.heartbeat({
// ...heartBeatDataReportObj,
// pull_info: JSON.stringify(pullInfo),
// cpu_rate: util.toFixed(cpuRate/rateCount),
// mem_rate: util.toFixed(memRate/rateCount),
// app_cpu: util.toFixed(appCpuRate/rateCount),
// app_mem: util.toFixed(appMemUsed/rateCount),
// video_mem: gpus
// });
// }
} catch (e) {
console.error('hsghsg_error', e);
}
}
resetHeartBeatDataReportObj();
rateCount = 0; // cpuRate = 0;
// memRate = 0;
// appCpuRate = 0;
// appMemUsed = 0;
clearInterval(rateTimer);
}
}, 10 * 1000);
};
var heartBeatDataReport = function heartBeatDataReport(type) {
try {
if (type === 'start' && !heartBeatDataReportTimer) {
resetHeartBeatDataReportObj();
_heartBeatDataReport();
heartBeatDataReportTimer = setInterval(function () {
_heartBeatDataReport();
}, 30 * 1000);
}
if (type === 'stop') {
clearInterval(heartBeatDataReportTimer);
heartBeatDataReportTimer = null;
}
} catch (error) {
console.error(error);
}
};
var heartBeatDataReportCalc = function heartBeatDataReportCalc(name, _d) {
// 拉流
var pullKeys = ['videoRenderFrameRate', 'videoCodeRate', 'audioRenderFrameRate', 'audioCodeRate'];
if (name === 'rtcPlayCycleDataReport') {
// console.log('hsg_tdddd',_d);
if (streamIdRtcPlayerInfo && streamIdRtcPlayerInfo.hasOwnProperty(_d.streamid)) {
var isReport = true; // streamIdRtcPlayerInfo[_d.streamid].count++;
heartBeatRealKeys.forEach(function (realKey, index) {
if (_d.hasOwnProperty(pullKeys[index])) {
if (streamIdRtcPlayerInfo[_d.streamid][realKey] === undefined) {
streamIdRtcPlayerInfo[_d.streamid][realKey] = [];
isReport = false;
} // streamIdRtcPlayerInfo[_d.streamid][realKey].push(parseFloat(parseInt(_d[pullKeys[index]])));
}
});
if (isReport) {
var audio_fps_rtc_pull = 0;
var audio_bitrate_rtc_pull = 0;
var video_fps_rtc_pull = 0;
var video_bitrate_rtc_pull = 0;
if (streamIdRtcPlayerInfo1[_d.streamid].audio_type && streamIdRtcPlayerInfo1[_d.streamid].video_type) {
audio_fps_rtc_pull = parseFloat(parseInt(_d.audioRenderFrameRate));
audio_bitrate_rtc_pull = parseFloat(parseInt(_d.audioCodeRate));
video_fps_rtc_pull = parseFloat(parseInt(_d.videoRenderFrameRate));
video_bitrate_rtc_pull = parseFloat(parseInt(_d.videoCodeRate));
} else if (!streamIdRtcPlayerInfo1[_d.streamid].audio_type && streamIdRtcPlayerInfo1[_d.streamid].video_type) {
video_fps_rtc_pull = parseFloat(parseInt(_d.videoRenderFrameRate));
video_bitrate_rtc_pull = parseFloat(parseInt(_d.videoCodeRate));
} else if (streamIdRtcPlayerInfo1[_d.streamid].audio_type && !streamIdRtcPlayerInfo1[_d.streamid].video_type) {
audio_fps_rtc_pull = parseFloat(parseInt(_d.audioRenderFrameRate));
audio_bitrate_rtc_pull = parseFloat(parseInt(_d.audioCodeRate));
}
streamIdRtcPlayerInfo[_d.streamid].audio_fps.push(audio_fps_rtc_pull);
streamIdRtcPlayerInfo[_d.streamid].audio_bitrate.push(audio_bitrate_rtc_pull);
streamIdRtcPlayerInfo[_d.streamid].video_fps.push(video_fps_rtc_pull);
streamIdRtcPlayerInfo[_d.streamid].video_bitrate.push(video_bitrate_rtc_pull);
streamIdRtcPlayerInfo[_d.streamid].pull_loss.push(_d.lostrate);
streamIdRtcPlayerInfo[_d.streamid].pull_delay.push(_d.delay);
streamIdRtcPlayerInfo[_d.streamid].ctime.push(Math.round((new Date().getTime() + dataReport$2.timestamp) / 1000)); // console.log('hsg_tpull_keys',JSON.parse(JSON.stringify(streamIdRtcPlayerInfo[_d.streamid])));
} // streamIdRtcPlayerInfo[_d.streamid].ctime.push(Math.round((new Date().getTime()+util.diffTime)/1000).toString());
// console.log('hsg_tpull_keys',JSON.parse(JSON.stringify(streamIdRtcPlayerInfo[_d.streamid])));
}
} // 推流
var pushKeys = ['videoInputframes', 'videoencoderate', 'audioInputframes', 'audioencoderate'];
if (name === 'rtcCaptureCycleDataReport') {
var audio_fps_rtc_push = 0;
var audio_bitrate_rtc_push = 0;
var video_fps_rtc_push = 0;
var video_bitrate_rtc_push = 0;
dataRtcCapture = _d; // console.log('hsg_d5555',_d,isNoticeMicVolumeRtc,isNoticeCarVolumeRtc);
// heartBeatDataReportObj.count++;
// heartBeatRealKeys.forEach((realKey, index) => {
// if (!heartBeatDataReportObj.hasOwnProperty(realKey) && !_d.hasOwnProperty(pushKeys[index])) {
// heartBeatDataReportObj[realKey] += parseFloat(_d[pushKeys[index]]);
if (isNoticeMicVolumeRtc && isNoticeCarVolumeRtc) {
audio_fps_rtc_push = parseFloat(parseInt(_d.audioInputframes));
audio_bitrate_rtc_push = parseFloat(parseInt(_d.audioencoderate));
video_fps_rtc_push = parseFloat(parseInt(_d.videoInputframes));
video_bitrate_rtc_push = parseFloat(parseInt(_d.videoencoderate)); // heartBeatDataReportObj[realKey].push(parseFloat(parseInt(_d[pushKeys[index]])));
} else if (!isNoticeMicVolumeRtc && isNoticeCarVolumeRtc) {
video_fps_rtc_push = parseFloat(parseInt(_d.videoInputframes));
video_bitrate_rtc_push = parseFloat(parseInt(_d.videoencoderate)); // heartBeatDataReportObj.audio_fps.push(0);
// heartBeatDataReportObj.audio_bitrate.push(0);
// heartBeatDataReportObj.video_fps.push(parseFloat(parseInt(_d.videoInputframes)));
// heartBeatDataReportObj.video_bitrate.push(parseFloat(parseInt(_d.videoencoderate)));
} else if (!isNoticeCarVolumeRtc && isNoticeMicVolumeRtc) {
audio_fps_rtc_push = parseFloat(parseInt(_d.audioInputframes));
audio_bitrate_rtc_push = parseFloat(parseInt(_d.audioencoderate)); // heartBeatDataReportObj.audio_fps.push(parseFloat(parseInt(_d.videoInputframes)));
// heartBeatDataReportObj.audio_bitrate.push(parseFloat(parseInt(_d.videoInputframes)));
// heartBeatDataReportObj.video_fps.push(0);
// heartBeatDataReportObj.video_bitrate.push(0);
}
heartBeatDataReportObj.audio_fps.push(audio_fps_rtc_push);
heartBeatDataReportObj.audio_bitrate.push(audio_bitrate_rtc_push);
heartBeatDataReportObj.video_fps.push(video_fps_rtc_push);
heartBeatDataReportObj.video_bitrate.push(video_bitrate_rtc_push);
heartBeatDataReportObj.push_loss.push(_d.lostrate);
heartBeatDataReportObj.push_delay.push(_d.delay); // }
// });
//
heartBeatDataReportObj.ctime.push(Math.round((new Date().getTime() + dataReport$2.timestamp) / 1000)); // console.log('hsg_d6',JSON.parse(JSON.stringify(heartBeatDataReportObj)));
// console.log('hsg_push_keys',JSON.parse(JSON.stringify(heartBeatDataReportObj)));
}
}; //推流字段
var resetHeartBeatDataReportObj = function resetHeartBeatDataReportObj() {
// console.log('hsg_d55556重置');
heartBeatDataReportObj = {
ctime: [],
// push_type: zbysdk ? zbysdk.deviceStatus.stream_type : 'none',
push_type: 'none',
// video_fps: 0,
// video_bitrate: 0,
// audio_fps: 0,
// audio_bitrate: 0,
video_fps: [],
video_bitrate: [],
audio_fps: [],
audio_bitrate: [],
push_loss: [],
push_delay: [],
// count: 0,
volume: ''
};
}; //记录拉流类型,用作数据上报
var resetStreamIdRtcPlayerInfo1 = function resetStreamIdRtcPlayerInfo1(streamId) {
streamIdRtcPlayerInfo1[streamId] = {
audio_type: false,
video_type: false,
stream_type: 'none'
}; // console.log('hsgshgs_heartbeat',streamIdRtcPlayerInfo1);
};
resetHeartBeatDataReportObj(); //拉流字段
var resetStreamIdRtcPlayerInfo = function resetStreamIdRtcPlayerInfo(streamId) {
streamIdRtcPlayerInfo[streamId] = {
pull_uid: util.getUidByStreamId(streamId),
streamid: streamId,
ctime: [],
pull_type: streamIdRtcPlayerInfo1[streamId].stream_type,
volume: '',
// 平均值
// count: 0,
// video_fps: 0,
// video_bitrate: 0,
// audio_fps: 0,
// audio_bitrate: 0,
video_fps: [],
video_bitrate: [],
audio_fps: [],
audio_bitrate: [],
pull_loss: [],
pull_delay: [],
// 累加
audio_ifg: 0,
video_ifg: 0
};
};
var rtcsdk = {
loadRtc: loadRtc,
unloadRtc: unloadRtc,
setAppId: setAppId,
setUserName: setUserName,
setUserId: setUserId,
setConfId: setConfId,
createRtcCapture: createRtcCapture,
getCameraDeviceCount: getCameraDeviceCount,
getCameraDevice: getCameraDevice,
setCameraDevice: setCameraDevice,
getCameraSupportedRes: getCameraSupportedRes,
setCameraParam: setCameraParam,
setEventReportSvr: setEventReportSvr,
getSpeakerDeviceCount: getSpeakerDeviceCount,
getSpeakerDevice: getSpeakerDevice,
setSpeakerDevice: setSpeakerDevice,
setSpeakerVolume: setSpeakerVolume,
setSpeakerMute: setSpeakerMute,
getSpeakerVolume: getSpeakerVolume,
setMute: setMute,
pullAudioFlow: pullAudioFlow,
getMicrophoneDeviceCount: getMicrophoneDeviceCount,
getMicrophoneDevice: getMicrophoneDevice,
setMicrophoneDevice: setMicrophoneDevice,
getMicrophoneVolume: getMicrophoneVolume,
setMicrophoneVolume: setMicrophoneVolume,
setRealTimeAudioMute: setRealTimeAudioMute,
getCurrentAppSessionVolume: getCurrentAppSessionVolume,
setCurrentAppSessionVolume: setCurrentAppSessionVolume,
setApplicationMute: setApplicationMute,
setPreviewPos: setPreviewPos,
startPreview: startPreview,
setEncodeParam: setEncodeParam,
setBitRate: setBitRate,
setCaptureStreamId: setCaptureStreamId,
setCaptureRenderID: setCaptureRenderID,
startPush: startPush,
stopPush: stopPush,
stopPreview: stopPreview,
captureDestroy: captureDestroy,
createRtcPlayer: createRtcPlayer,
setPlayerStreamId: setPlayerStreamId,
setPlayRenderID: setPlayRenderID,
play: play,
stop: stop,
playDestroy: playDestroy,
startLocalOrRemotePreview: startLocalOrRemotePreview,
init: init,
setDefaultDevice: setDefaultDevice,
openOrCloseCamera: openOrCloseCamera,
setPreviewMute: setPreviewMute,
openOrCloseCameraAndMicrophone: openOrCloseCameraAndMicrophone,
initPullFlow: initPullFlow,
stopPullFlow: stopPullFlow,
stopAllPullFlow: stopAllPullFlow,
changePullFlow: changePullFlow,
leaveRoom: leaveRoom,
sendRecordingMsg: sendRecordingMsg,
controlPullAudioOnly: controlPullAudioOnly,
openMicVolumeCb: openMicVolumeCb,
startRoomMixRecord: startRoomMixRecord,
stopRoomMixRecord: stopRoomMixRecord,
startSingleRecord: startSingleRecord,
stopSingleRecord: stopSingleRecord,
hasStream: hasStream,
localRecordAudio: localRecordAudio,
localRecordVideo: localRecordVideo,
teacherStartLinkMic: teacherStartLinkMic,
teacherStopLinkMic: teacherStopLinkMic,
setAudioSpeakerCapture: setAudioSpeakerCapture,
setMixStream: setMixStream,
recoverSdk: recoverSdk,
captureSnapShot: captureSnapShot,
playerSnapShot: playerSnapShot,
setMirrorStatus: setMirrorStatus,
stopCheckDevice: stopCheckDevice,
startSenseMe: startSenseMe,
setBeautifyParam: setBeautifyParam,
endSenseMe: endSenseMe,
setRTCPlayViewMirror: setRTCPlayViewMirror,
muteStreamVideo: muteStreamVideo,
muteLocalVideo: muteLocalVideo,
muteStreamAudio: muteStreamAudio,
muteLocalAudio: muteLocalAudio,
getSDKVersion: getSDKVersion,
setMirrorMode: setMirrorMode,
destroyEngine: destroyEngine,
rtcLoadCollectionEntry2: rtcLoadCollectionEntry2,
sendMediaSideInfo: sendMediaSideInfo
};
/**
* @File: SessionStorage 的操作方法
* @Author: xuyuanrui
* @Email: raywhbxyr@163.com
* @Date: 2018-08-31 18:40:44
**/
var getS = function getS(name) {
return sessionStorage.getItem(name);
};
var setS = function setS(name, value) {
sessionStorage.setItem(name, value);
};
var compareS = function compareS(name, nowValue) {
if (sessionStorage.getItem(name) === nowValue) {
return true;
} else {
sessionStorage.setItem(name, nowValue);
return false;
}
};
var sessionStorage$1 = {
getS: getS,
setS: setS,
compareS: compareS
};
var DataStore =
/*#__PURE__*/
function (_Map) {
_inherits(DataStore, _Map);
/**
*
* @param {number} dataValidityPeriod 数据有效期,毫秒,默认1000ms
*/
function DataStore() {
var _this;
var dataValidityPeriod = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1000;
_classCallCheck(this, DataStore);
_this = _possibleConstructorReturn(this, _getPrototypeOf(DataStore).call(this));
_this.dataValidityPeriod = dataValidityPeriod;
defaultApi$1.writeLog("DataStore dataValidityPeriod: ".concat(dataValidityPeriod));
return _this;
}
_createClass(DataStore, [{
key: "setData",
value: function setData(key, data) {
var obj = this.get(key);
if (!obj) {
obj = {};
this.set(key, obj);
}
obj.timestamp = Date.now();
obj.data = data;
}
}, {
key: "getData",
value: function getData(key) {
var obj = this.get(key);
if (!obj) {
return null;
} // obj设置时的时间戳与当前时间戳的差值
var timeCost = Date.now() - obj.timestamp; // 没有data或者data已经超过有效期,返回空
if (timeCost > this.dataValidityPeriod) {
defaultApi$1.writeLog("DataStore getData key: ".concat(key, ", cost: ").concat(timeCost, ", dataValidityPeriod: ").concat(this.dataValidityPeriod, ", data: ").concat(obj.data));
this.delete(key);
return null;
} else {
return obj.data;
}
}
/**
* 检查数据是否过期
* @param {*} data
* @returns
*/
}, {
key: "checkData",
value: function checkData(data) {
if (!data || !data.timestamp) {
throw new Error('DataStore checkData data is null or data.timestamp is null');
}
var timeCost = Date.now() - data.timestamp;
if (timeCost > this.dataValidityPeriod) {
return false;
} else {
return true;
}
}
}, {
key: "restore",
value: function restore() {
this.clear();
}
/**
* 更新数据有效期
* @param {number} value
*/
}, {
key: "updateValidityPeriod",
value: function updateValidityPeriod(value) {
defaultApi$1.writeLog("DataStore updateValidityPeriod value: ".concat(value));
if (typeof value !== 'number') {
return;
}
this.dataValidityPeriod = value;
}
}]);
return DataStore;
}(_wrapNativeSuper(Map));
var userAndDeviceStatusInfo = {
microPhone: undefined,
camera: undefined,
isPushingFlow: undefined
}; // https://yach-doc-shimo.zhiyinlou.com/docs/loqeW4ME41ie1Anz/ 《学习报告在线时长优化》
var background = 0; // 0:否(默认值),1:转到后台
/**
* 设置前后台状态
* @param {boolean} isBackground
*/
var setBackgroundStatus = function setBackgroundStatus(isBackground) {
background = isBackground ? 1 : 0;
};
/**
* 获取前后台状态
* @returns {number} 0:否(默认值),1:转到后台
*/
var getBackgroundStatus = function getBackgroundStatus() {
return background;
};
var extensionId$2 = 'zego_ext'; // 端提供的 API 入口
var EM$6 = window.EM; // 维护的一份当前正在使用的音频设备的 deviceId 的列表
var usingAudioDeviceId = {
speaker: '',
microphone: ''
}; // 维护的一份拉流的 streamId 与本地预览通道的映射表
var streamIdToPreviewId$1 = {};
var previewIdToStreamId = {}; // const streamIdToBlobUrl = {};
// 拉流的播放通道初始化从 0 开始依次递增至44(共45路流),-1 为推流的本地视频预览
// const uiChnIndexs = new Array(50).fill(0).map((a, b) => b + 1).reverse();
var chnTotal = 48;
var uiChnIndexs = new Array(chnTotal).fill(2).map(function (a, b) {
return a + b;
}).reverse(); // 初始化是否完成的标志,0 为未完成,1 为完成
var isInitFinished = 0; // 设备检测初始化是否完成的标志,0 为未完成,1 为完成
var isDeviceCheckInitFinished = 0; // 进入房间是否成功
var hasLoginChannel = 0; // 是否已经推流
var hasPushFlow = 0; // 是否logoutChannel成功
var isAVEngineStopped = 0; // 上层透传的回调函数缓存
// let zegoCallback = null;
// 是否执行过 Zego 的 AddListener 的标志
var hasAddListener$2 = false; // 是否处于网络错误状态中的标志
var hasNetWrong$1 = false; // rtc小班课=0;rtc大班课=1
var classType$3 = 0; // 监听id
var EMListenerId$1 = 0;
var teacherId = null; //静音推流时,音量值是否上抛上层标志 false=没有声音不往上层通知/true=有声音有上层通知
var isNoticeMicVolumeZego = false; // 本地录制错误信息
var recordCodeMsg = {
0: '录制成功',
1: '路径太长',
2: '初始化avcontext失败',
3: '打开文件失败',
4: '写文件头失败',
5: '开始录制',
6: '停止录制',
7: '剩余空间不够',
8: '文件句柄异常',
9: 'IO异常'
}; // 心跳
var heartBeatDataReportObj$1 = {};
var heartBeatDataReportTimer$1 = null;
var isFirstHeartBeatReport$1 = false;
var streamIdRtcPlayerInfo$1 = {};
var streamIdRtcPlayerInfo1$1 = {};
var currStreamIdRtcPlayerInfo$1;
var lecturerStreamId = null;
var lecturerUid = null;
var heartBeatItemCount = 15;
var statsStore = new DataStore(5500);
var PullResult = {
PULL_STREAM_CODE_OK: 0,
// 成功
PULL_STREAM_CODE_STOP: 1,
// 停止
PULL_STREAM_CODE_FAIL: 12101000,
// 调用拉流Api时发生异常 - 是个笼统的错误码
PULL_STREAM_CODE_TIMEOUT: 12102003,
// 拉流超时
PULL_STREAM_CODE_RTC_SIGNAL_FAIL: 12200001,
// 加入房间失败
PULL_STREAM_CODE_RTC_MEDIA_FAIL: 12301011,
// 媒体链路建立失败
PULL_STREAM_CODE_NON_EXIST: 32001004 // 流不存在
};
var pullingStore = new DataStore(
/*一小时过期时间*/
60 * 60 * 1000);
var pullingStreamInterval = -1; //记录底层推流回调的值
var dataZegoCapture = {}; //记录当前角色
var currentRole = ''; //记录当前课态类型:小组课=0/小班课=1
var currentClassMode = null; //记录当前rtmp推流sdk类型
var currentGroupSdkType = ''; //主流ID
var localStreamId = ''; //屏幕流ID
var screenStreamId = '';
/**
* @function 调用端提供的回调方法
* @param name:String 回调方法名
* @param args 回调参数
* @return Promise | void
*/
var callMethod$4 = function callMethod(name, args) {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$6) {
return new Promise(function (resolve, reject) {
var noneCamera = name === 'SetVideoDevice' && !args.pszDeviceID;
var noneMicrophone = name === 'SetAudioDevice' && args.deviceType === 0 && !args.pszDeviceID;
var noneSpeaker = name === 'SetAudioDevice' && args.deviceType === 1 && !args.pszDeviceID;
if (noneCamera || noneMicrophone || noneSpeaker) {
return resolve();
}
defaultApi$1.writeLog("".concat(name, " Params: ").concat(JSON.stringify(args)));
EM$6.CallMethod(extensionId$2, name, JSON.stringify(_objectSpread({}, args, {
classType: classType$3
})), function (code, msg) {
defaultApi$1.writeLog("".concat(name, " Code: ").concat(code, " Message: ").concat(msg));
resolve({
code: code,
msg: msg
});
});
});
}
};
/** 带 10s 超时的单次调用,超时即结束返回,不重试 */
var CALL_TIMEOUT_MS = 10000;
var callMethodWithTimeout = async function callMethodWithTimeout(name, args) {
var timeoutMs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : CALL_TIMEOUT_MS;
var timeoutId;
try {
var timeoutPromise = new Promise(function (_, reject) {
timeoutId = setTimeout(function () {
return reject(new Error("".concat(name, " timeout ").concat(timeoutMs, "ms")));
}, timeoutMs);
});
return await Promise.race([callMethod$4(name, args), timeoutPromise]);
} finally {
if (timeoutId) clearTimeout(timeoutId);
}
}; // 按云控/初始化的分辨率构造边界,避免业务传入的水印超出画面
var getWaterMarkBounds = function getWaterMarkBounds() {
var config = window.zbyAVSDK_init_params && window.zbyAVSDK_init_params.zego ? window.zbyAVSDK_init_params.zego : {};
var toNumber = function toNumber(val) {
var num = Number(val);
return Number.isFinite(num) ? num : 0;
}; // 使用云控/初始化设置的编码与预览分辨率作为水印裁剪上限
defaultApi$1.writeLog("avsdk ZEGO::getWaterMarkBounds config params ,\n encodedResolutionWidth:".concat(toNumber(config.encodedResolutionWidth), ", encodedResolutionHeight:").concat(toNumber(config.encodedResolutionHeight), ", \n previewResolutionWidth:").concat(toNumber(config.previewResolutionWidth), ", previewResolutionHeight:").concat(toNumber(config.previewResolutionHeight)));
return {
publish: {
width: toNumber(config.encodedResolutionWidth),
height: toNumber(config.encodedResolutionHeight)
},
preview: {
width: toNumber(config.previewResolutionWidth),
height: toNumber(config.previewResolutionHeight)
}
};
}; // 构造水印矩形:起点取非负,宽高已在上层校验为正,同时做边界裁剪
var buildWaterMarkRect = function buildWaterMarkRect(x, y, w, h, bounds) {
var left = Math.max(0, x);
var top = Math.max(0, y);
var width = Math.max(0, w);
var height = Math.max(0, h);
var clamped = false; // 超出画面时压缩到边界,保证不越界
if (bounds && bounds.width > 0 && left > bounds.width) {
left = bounds.width;
clamped = true;
}
if (bounds && bounds.height > 0 && top > bounds.height) {
top = bounds.height;
clamped = true;
}
var right = width > 0 ? left + width : left;
var bottom = height > 0 ? top + height : top;
if (bounds && bounds.width > 0 && right > bounds.width) {
right = bounds.width;
clamped = true;
}
if (bounds && bounds.height > 0 && bottom > bounds.height) {
bottom = bounds.height;
clamped = true;
}
return {
left: left,
top: top,
right: right,
bottom: bottom,
clamped: clamped
};
};
/**
* 设置主通道(发布+预览)的水印图像及矩形区域
* @param {string} filePath path of watermark image
* @param {number} x 左
* @param {number} y 上
* @param {number} w 宽度,0/负数视为非法
* @param {number} h 高度,0/负数视为非法
* @param {string} streamId 主流标识(用于日志),Zego仍使用主通道
* @returns {Promise<boolean>} true if all zego calls succeed
*/
var setWaterMark = async function setWaterMark(filePath, x, y, w, h) {
var streamId = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '';
var idx = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;
var toInt = function toInt(val) {
var num = Number(val);
return Number.isFinite(num) ? Math.floor(num) : NaN;
};
if (!filePath || typeof filePath !== 'string') {
defaultApi$1.writeLog("avsdk ZEGO::setWaterMark invalid filePath ".concat(filePath));
return false;
} //再做一次整数化/校验能隔离不可信输入,避免传到原生接口时出现越界或类型错误。
var left = toInt(x);
var top = toInt(y);
var width = toInt(w);
var height = toInt(h);
if ([left, top, width, height].some(function (item) {
return Number.isNaN(item);
}) || left < 0 || top < 0 || width <= 0 || height <= 0) {
defaultApi$1.writeLog("avsdk ZEGO::setWaterMark invalid rect params x:".concat(x, ", y:").concat(y, ", w:").concat(w, ", h:").concat(h));
return false;
}
var bounds = getWaterMarkBounds();
var publishRect = buildWaterMarkRect(left, top, width, height, bounds.publish);
var canScale = bounds && bounds.publish && bounds.preview && bounds.publish.width > 0 && bounds.publish.height > 0 && bounds.preview.width > 0 && bounds.preview.height > 0;
var widthRate = canScale ? bounds.preview.width / bounds.publish.width : 1;
var heightRate = canScale ? bounds.preview.height / bounds.publish.height : 1;
var previewLeft = Math.max(0, Math.round(left * widthRate));
var previewTop = Math.max(0, Math.round(top * heightRate));
var previewWidth = Math.max(1, Math.round(width * widthRate));
var previewHeight = Math.max(1, Math.round(height * heightRate));
var previewRect = buildWaterMarkRect(previewLeft, previewTop, previewWidth, previewHeight, bounds.preview);
defaultApi$1.writeLog("avsdk ZEGO::setWaterMark path:".concat(filePath, ", publishRect:").concat(JSON.stringify(publishRect), ", previewRect:").concat(JSON.stringify(previewRect), ", idx:").concat(idx, ", streamId:").concat(streamId)); // 三步依次调用,任一步失败即视为配置失败
var steps = [{
name: 'SetWaterMarkImagePath',
args: {
filePath: filePath,
idx: idx
}
}, {
name: 'SetPublishWaterMarkRect',
args: {
left: publishRect.left,
top: publishRect.top,
right: publishRect.right,
bottom: publishRect.bottom,
idx: idx
}
}, {
name: 'SetPreviewWaterMarkRect',
args: {
left: previewRect.left,
top: previewRect.top,
right: previewRect.right,
bottom: previewRect.bottom,
idx: idx
}
}];
for (var _i = 0; _i < steps.length; _i++) {
var step = steps[_i];
var res = await callMethod$4(step.name, step.args);
var ok = res && res.code === 0;
if (!ok) {
defaultApi$1.writeLog("avsdk ZEGO::".concat(step.name, " failed, code:").concat(res && res.code, ", msg:").concat(res && res.msg));
return false;
}
}
return true;
};
/**
* @function 加载 Zego 扩展
* @param extensionVersion:String 扩展版本号,必选
* @return Promise | void
*/
var loadZego = function loadZego(extensionVersion) {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$6) {
return new Promise(function (resolve, reject) {
if (getS('zegoVersion')) {
if (compareS('zegoVersion', extensionVersion)) {
return resolve();
}
}
EM$6.Load(extensionId$2, extensionVersion, false, function (code, msg) {
defaultApi$1.writeLog("loadZego Code: ".concat(code, "\nMessage: ").concat(msg));
if (code === 0) {
setS('zegoVersion', extensionVersion);
}
resolve();
});
});
}
};
/**
* @function 卸载 Zego 扩展
* @return Promise | void
*/
var unloadZego = function unloadZego() {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$6) {
return new Promise(function (resolve, reject) {
EM$6.UnLoad(extensionId$2, function (code, msg) {
defaultApi$1.writeLog("unloadZego Code: ".concat(code, "\nMessage: ").concat(msg));
resolve();
});
});
}
};
/**
* @function 添加扩展监听机制
* @param userId:Number 用户 id,必选
* @param userName:String 用户名,必选
* @param roomId:String 频道(房间) id,必选
* @param nNetType:Number 网络类型,可选,默认为 1
* @return void
*/
var addListener$2 = function addListener(userId, userName, confId, nNetType, devices, role) {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$6 && !hasAddListener$2) {
hasAddListener$2 = true;
EM$6.AddListener(extensionId$2, function (event, data) {
if (data && data.indexOf(extensionId$2) > -1) {
try {
EMListenerId$1 = JSON.parse(data)[extensionId$2];
defaultApi$1.writeLog("ZEGO::addListener-- EMListenerId: ".concat(EMListenerId$1));
} catch (error) {}
}
if (!event || !data) {
return;
}
var _data = JSON.parse(data); // if (_data && _data.classType === 1) {
// return false;
// }
switch (event) {
case 'OnInitSDK':
// 只有 OnInitSDK 事件成功返回后才可以执行后续操作,比如 loginChannel
var status = JSON.parse(data).nError;
var nclassType = JSON.parse(data).nClassType;
defaultApi$1.writeLog("ZEGO::addListener-- OnInitSDK: ".concat(status, "--").concat(nclassType));
if (status === 0 && nclassType == 0) {
if (userId === 'deviceCheckerInit') {
deviceCheckerInitSDK();
} else {
afterInitSDK(userId, userName, confId, nNetType, devices, role);
}
}
break;
case 'OnLoginChannel':
var status = JSON.parse(data).uiErrorCode;
defaultApi$1.writeLog("ZEGO::addListener-- OnLoginChannel: ".concat(status));
if (status === 0) {
hasLoginChannel = 1;
}
break;
case 'OnPublishStateUpdate':
var res = JSON.parse(data);
var keys = Object.keys(res);
if (!window.zbyAVSDK_init_params || !window.zbyAVSDK_init_params.zego) {
return;
}
if (keys.indexOf('eState') > -1) {
switch (res.eState) {
case 0:
hasPushFlow = 1;
window.zegoHasPushFlow = 1;
try {
var ReportArgs = {};
if (_data.pszStreamID.split('_').length == 5) {
ReportArgs.publish_rtc_streamid = _data.pszStreamID;
}
dataReport$2.publishResult(_objectSpread({
code: '0'
}, ReportArgs));
NOTICE.pushFlowSuccess({
code: 0,
publish_streamid: _data.pszStreamID
});
} catch (e) {}
;
if (window.zbyAVSDK_init_params.zego.isTurnPush) {
singleRecord('start');
}
break;
case 1:
hasPushFlow = 0;
window.zegoHasPushFlow = 0;
break;
// 推流重试
case 6:
case 7:
case 105:
// pushFlowExceptionHandler();
try {
dataReport$2.publishResult({
code: res.eState // publish_streamid: window.zbyAVSDK_init_params.zego.streamId,
});
} catch (e) {}
;
break;
case 10:
if (!hasNetWrong$1) {
hasNetWrong$1 = true;
defaultApi$1.writeLog('error', 'Network error');
NOTICE.networkError({
message: 'Network error'
});
}
try {
dataReport$2.publishResult({
code: res.eState // publish_streamid: window.zbyAVSDK_init_params.zego.streamId,
});
} catch (e) {}
; // pushFlowExceptionHandler();
break;
default:
try {
dataReport$2.publishResult({
code: res.eState // publish_streamid: window.zbyAVSDK_init_params.zego.streamId,
});
} catch (e) {}
;
break;
}
}
break;
case 'OnPublishQualityUpdate':
if (_data.hasOwnProperty('pq') && _data.pszStreamID.split('_').length != 5) {
// 主辅两路质量回调,丢包延时只上抛一次,过滤掉辅路数据
_data.opt = 'quality';
_data.type = 'mediaupqos';
if (typeof _data.pq.kbps === 'number' && typeof _data.pq.fps === 'number') {
NOTICE.pushQuality({
video: {
streamId: _data.pszStreamID,
userId: util.getUidByStreamId(_data.pszStreamID),
bitrate: Math.round(_data.pq.kbps),
fps: Math.round(_data.pq.fps)
}
});
} // console.log('推流延迟丢包zego',_data);
NOTICE.pushLossAndDelay({
userId: util.getUidByStreamId(_data.pszStreamID),
delay: _data.pq.rtt,
lostrate: _data.pq.pktLostRate
}); // heartBeatDataReportCalc(event, _data.pq, _data.pszStreamID);
statsStore.setData(_data.pszStreamID, _data.pq);
}
break;
case 'OnCaptureSoundLevelUpdate':
if (isNoticeMicVolumeZego) {
NOTICE.captureMicVolumeChanged({
volume: Math.round(_data.pCaptureSoundLevel[0].soundLevel)
});
} // heartBeatDataReportObj.volume.push(Math.round(_data.pCaptureSoundLevel[0].soundLevel));
heartBeatDataReportObj$1.volume = heartBeatDataReportObj$1.volume + Math.round(_data.pCaptureSoundLevel[0].soundLevel) + ',';
break;
case 'OnSoundLevelUpdate':
_data.pSoundLevelList.forEach(function (item) {
var cbData = {
streamid: item.szStreamID,
userId: util.getUidByStreamId(item.szStreamID),
volume: Math.round(item.soundLevel)
};
NOTICE.playerVolumeChanged(cbData);
NOTICE.volumeChange(cbData); // currStreamIdRtcPlayerInfo && currStreamIdRtcPlayerInfo.volume.push(Math.round(item.soundLevel));
// streamIdRtcPlayerInfo[item.szStreamID] && streamIdRtcPlayerInfo[item.szStreamID].volume.push(Math.round(item.soundLevel));
if (streamIdRtcPlayerInfo$1[item.szStreamID]) {
streamIdRtcPlayerInfo$1[item.szStreamID].volume = streamIdRtcPlayerInfo$1[item.szStreamID].volume + Math.round(item.soundLevel) + ',';
}
});
break;
case 'OnPlayStateUpdate':
if (_data.hasOwnProperty('eState')) {
if (!window.zbyAVSDK_init_params || !window.zbyAVSDK_init_params.zego) {
return;
}
var code = _data.eState;
if (code === 3) {
defaultApi$1.writeLog('error', "ZEGO:: OnPlayStateUpdate eState: ".concat(code));
}
var normalCode = [0, 1, 3, 1011];
if (code === 10 && !hasNetWrong$1) {
hasNetWrong$1 = true;
defaultApi$1.writeLog('error', 'Network error');
NOTICE.networkError({
message: 'Network error'
});
dabanDataReport({
action: 'zby_live_sdk_player_network_error',
uid: window.zbyAVSDK_init_params.zego.userId,
streamid: _data.pszStreamID,
teacherId: window.zbyAVSDK_init_params.zego.teacherId,
errorcode: code,
sdktype: 'zego'
});
} // 拉流重试
if (normalCode.indexOf(code) === -1) {
setTimeout(function () {
// pullFlowExceptionHandler(_data.pszStreamID);
NOTICE.playError({
userId: util.getUidByStreamId(_data.pszStreamID),
message: 'play error'
});
dabanDataReport({
action: 'zby_live_sdk_player_play_error',
uid: window.zbyAVSDK_init_params.zego.userId,
streamid: _data.pszStreamID,
teacherId: window.zbyAVSDK_init_params.zego.teacherId,
errorcode: code,
sdktype: 'zego'
});
}, 1000);
}
;
try {
if (_data.pszStreamID.indexOf('ai') < 0) {
dataReport$2.pullResult({
code: code,
// pull_uid: _data.pszStreamID.split('_').length == 5 ? _data.pszStreamID : util.getUidByStreamId(_data.pszStreamID),
pull_uid: util.getUidByStreamId(_data.pszStreamID),
pull_streamid: _data.pszStreamID
});
pullingStore.delete(_data.pszStreamID);
NOTICE.pullFlowResult({
code: code,
pull_streamid: _data.pszStreamID
});
} // dataReport.pullResult({
// code: code,
// pull_uid: util.getUidByStreamId(_data.pszStreamID),
// pull_streamid: _data.pszStreamID
// });
} catch (e) {}
;
}
break;
case 'OnPlayQulityUpdate':
// 拉流
if (_data.hasOwnProperty('pq')) {
// console.log('拉流回调',`${new Date().getMinutes()}:${new Date().getSeconds()}`,_data);
_data.opt = 'quality';
_data.type = 'mediadownqos';
NOTICE.pullQuality({
video: {
streamId: _data.pszStreamID,
userId: util.getUidByStreamId(_data.pszStreamID),
bitrate: _data.pq.kbps,
fps: _data.pq.fps
}
}); // console.log('拉流延迟丢包zego',_data);
NOTICE.playLossAndDelay({
userId: util.getUidByStreamId(_data.pszStreamID),
delay: _data.pq.rtt,
lostrate: _data.pq.pktLostRate
});
currStreamIdRtcPlayerInfo$1 = streamIdRtcPlayerInfo$1[_data.pszStreamID]; // heartBeatDataReportCalc(event, _data.pq, _data.pszStreamID);
statsStore.setData(_data.pszStreamID, _data.pq);
}
break;
case 'OnVideoDeviceStateChanged':
// 视频设备状态变更
// _data.state 0=添加设备 1=移除设备
// console.log('hsghsghsg摄像头热插拔',_data);
setVideoDevice({
deviceId: _data.state == 1 ? '' : _data.deviceInfo.szDeviceId,
idx: 0,
operationType: 'hotPlug',
deviceState: _data.state,
changedDeviceId: _data.deviceInfo.szDeviceId
}); // try {
// dataReport.deviceTest({
// device: '1',
// fore_state: _data.state == 0 ? 1 : 2 ,
// camera_name: _data.deviceInfo && _data.deviceInfo.szDeviceName,
// });
// } catch (e){};
break;
case 'OnAudioDeviceStateChanged':
// 音频设备状态变更
// console.log('hsghsghsg扬声器热插拔1',_data);
if (_data.deviceType === 0) {
// _data.state 0=添加设备 1=移除设备
setMicrophoneDevice$1({
deviceId: _data.state == 1 ? '' : _data.deviceInfo.szDeviceId,
operationType: 'hotPlug',
deviceState: _data.state,
changedDeviceId: _data.deviceInfo.szDeviceId
});
}
if (_data.deviceType === 1) {
// console.log('hsghsghsg扬声器热插拔',_data);
setSpeakerDevice$1({
deviceId: _data.state == 1 ? '' : _data.deviceInfo.szDeviceId,
operationType: 'hotPlug',
deviceState: _data.state,
changedDeviceId: _data.deviceInfo.szDeviceId
});
} // try {
// dataReport.deviceTest({
// device: _data.deviceType === 0 ? '2' : '3',
// fore_state: _data.state == 0 ? 1 : 2 ,
// microphone_name: _data.deviceInfo && _data.deviceInfo.szDeviceName,
// speaker_name: _data.deviceInfo && _data.deviceInfo.szDeviceName
// });
// } catch (e){};
break;
case 'OnAudioDefaultDeviceStateChanged':
// 音频默认设备状态变更
if (_data.deviceType === 0) {
NOTICE.defaultMicChanged({
deviceId: _data.deviceId
});
} else if (_data.deviceType === 1) {
NOTICE.defaultSpeakerChanged({
deviceId: _data.deviceId
});
}
break;
case 'OnDeviceError':
//errorCode 无效设备ID (-2), 没有权限 (-3), 采集帧率为0 (-4), 设备被占用 (-5), 设备未插入 (-6), 需要重启系统 (-7), 媒体服务无法恢复 (-8), 设备被SIRI占用 (-9)
var codemsg = {
'-2': '无效设备ID',
'-3': '没有权限',
'-4': '采集帧率为0',
'-5': '设备被占用',
'-6': '设备未插入',
'-7': '需要重启系统',
'-8': '媒体服务无法恢复',
'-9': '设备被SIRI占用'
};
defaultApi$1.writeLog("avsdk ZEGO:: OnDeviceError ".concat(_data.deviceName, " ").concat(_data.errorCode));
dataReport$2.deviceError({
deviceName: _data.deviceName,
errorCode: _data.errorCode,
code: _data.errorCode
});
NOTICE.deviceError({
code: _data.errorCode,
msg: codemsg[_data.errorCode],
deviceId: _data.deviceId,
deviceName: _data.deviceName
}); // _data.deviceName === 'camera' ? setVideoDevice({deviceId: '', idx: 0, operationType: 'deviceError', deviceState: '', code: codemsg[_data.errorCode]}) : setMicrophoneDevice({deviceId: '', operationType: 'deviceError', deviceState: '', code: codemsg[_data.errorCode]});
break;
case 'OnAVKitEvent':
// defaultApi.writeLog('avsdk ZEGO:: OnAVKitEvent');
if (_data.event === 4 && hasNetWrong$1) {
hasNetWrong$1 = false;
NOTICE.networkRecovery({
message: 'Network recovery'
});
}
break;
case 'OnAVEngineStop':
isAVEngineStopped = 1;
defaultApi$1.writeLog('avsdk ZEGO:: listened AVEngineStop');
break;
case 'OnMixStream':
defaultApi$1.writeLog('avsdk ZEGO:: listened mix_stream_response');
break;
case 'OnVideoSizeChanged':
if (_data.nWidth > 0 && _data.nHeight > 0) {
try {
NOTICE.firstVideoSize({
streamId: _data.pStreamID,
// userId: _data.pszStreamID.split('_').length == 5 ? _data.pszStreamID : util.getUidByStreamId(_data.pszStreamID)
userId: util.getUidByStreamId(_data.pStreamID)
});
dataReport$2.firstVideoSize({
pull_streamid: _data.pStreamID,
pull_uid: util.getUidByStreamIdDr(_data.pStreamID),
code: '0'
});
} catch (e) {}
;
} else {
defaultApi$1.writeLog('avsdk ZEGO:: OnVideoSizeChanged - nWidth and nHeight is 0');
}
break;
case 'OnRenderRemoteVideoFirstFrame':
if (!window.zbyAVSDK_init_params || !window.zbyAVSDK_init_params.zego) {
return;
} // 大班数据上报
if (window.zbyAVSDK_init_params.zego.role === 'student') {
dabanDataReport({
action: 'interact_play',
teammate_streamid: _data.pszStreamID,
uid: window.zbyAVSDK_init_params.zego.userId
});
}
try {
NOTICE.firstVideoSize({
streamId: _data.pszStreamID,
// userId: _data.pszStreamID.split('_').length == 5 ? _data.pszStreamID : util.getUidByStreamId(_data.pszStreamID)
userId: util.getUidByStreamId(_data.pszStreamID)
});
dataReport$2.firstVideoSize({
pull_streamid: _data.pszStreamID,
pull_uid: util.getUidByStreamIdDr(_data.pszStreamID),
code: '0'
});
} catch (e) {}
;
defaultApi$1.writeLog("ZEGO: pullStream success & haveFirstVideoSize streamId: ".concat(_data.pszStreamID)); // try {
// dataReport.pullResult({
// status: 0,
// pull_uid: util.getUidByStreamId(_data.pszStreamID),
// pull_streamid: _data.pszStreamID
// });
// } catch (e) {};
break;
case 'OnRecvRemoteAudioFirstFrame':
try {
NOTICE.firstAudioSize({
streamId: _data.pszStreamID,
userId: util.getUidByStreamId(_data.pszStreamID)
});
dataReport$2.firstAudioSize({
pull_streamid: _data.pszStreamID,
pull_uid: util.getUidByStreamIdDr(_data.pszStreamID),
code: '0'
});
} catch (e) {}
;
break;
// 转推回调 0=转推停止 1=正在转推 2=正在重试
case 'onRecvMediaSideInfo':
defaultApi$1.writeLog("avsdk ZEGO:: onRecvMediaSideInfo, ".concat(JSON.stringify(_data)));
NOTICE.seiReceived({
data: _data
});
break;
case 'zego_recovery_start':
defaultApi$1.writeLog("avsdk ZEGO:: zego_recovery_start ".concat(JSON.stringify(_data)));
NOTICE.zegoRecoveryStart();
break;
case 'OnRelayCDNStateUpdate':
if (_data.statesInfo && _data.statesInfo[0] && _data.statesInfo[0].state === 1) {
NOTICE.recordResponse({
streamId: _data.streamID,
userId: util.getUidByStreamId(_data.streamID)
});
} // try {
// dataReport.turnPushResult({
// errorcode:_data.statesInfo[0].state,
// case: 'turn push',
// streamid: _data.streamID
// })
// } catch (e) {};
break;
case 'OnCaptureVideoFirstFrame':
if (!window.zbyAVSDK_init_params || !window.zbyAVSDK_init_params.zego) {
return;
} // 大班数据上报
dabanDataReport({
action: 'open_camera',
camera_status: 1,
uid: window.zbyAVSDK_init_params.zego.userId
});
break;
case 'OnKaDunEvent':
if (_data.event === 8) {
currStreamIdRtcPlayerInfo$1 && (currStreamIdRtcPlayerInfo$1.video_ifg += _data.kaDunTime);
}
if (_data.event === 10) {
currStreamIdRtcPlayerInfo$1 && (currStreamIdRtcPlayerInfo$1.audio_ifg += _data.kaDunTime);
}
break;
case 'OnMediaRecord':
NOTICE.recordStateUpdate(_data);
if (_data.errorCode === 0) {
NOTICE.recordFinished({
path: _data.storagePath,
idx: _data.channelIndex
});
} else if (_data.errorCode === 5) {
NOTICE.recordBegin({
idx: _data.channelIndex
});
} else if (_data.errorCode === 6) {
NOTICE.recordEnd({
idx: _data.channelIndex
});
} else {
NOTICE.recordError({
code: _data.errorCode,
idx: _data.channelIndex,
msg: recordCodeMsg[_data.errorCode]
});
}
break;
case 'onBeautifyEvent':
if (_data.code === 0) {
defaultApi$1.writeLog("avsdk ZEGO:: onBeautifyEvent success ".concat(JSON.stringify(_data)));
} else {
var message = ['', 'License错误', '渲染错误', '参数错误'];
NOTICE.beautifyError({
code: _data.code,
message: message[_data.code]
});
}
break;
case 'onJoinchannelError':
defaultApi$1.writeLog("ZEGO: event:: onJoinchannelError: ".concat(data));
dataReport$2.joinRtcChannel(_data);
break;
// rtc麦克风数据回调业务,每s回调一次
case 'OnMicCaptureData':
{
var base64Data = _data && _data.data;
if (base64Data) {
NOTICE.micCaptureData({
data: base64Data,
sampleRate: _data.sampleRate,
channels: _data.channels
});
}
break;
}
}
;
if (zbysdk$1.openListenerLog) {
defaultApi$1.writeLog("Zego::Listener:: event: ".concat(event, ", data: ").concat(JSON.stringify(data)));
}
});
}
};
var startPullingStreamObserver = function startPullingStreamObserver() {
pullingStore.restore();
if (pullingStreamInterval !== -1) {
clearInterval(pullingStreamInterval);
}
pullingStreamInterval = setInterval(function () {
pullingStore.forEach(function (value, key) {
try {
if (!pullingStore.checkData(value)) {
pullingStore.delete(key);
dataReport$2.pullResult({
code: PullResult.PULL_STREAM_CODE_TIMEOUT,
media_type: value.info,
pull_uid: util.getUidByStreamIdDr(key),
pull_streamid: key
});
}
} catch (e) {
defaultApi$1.writeLog("pullingStreamInterval error ".concat(e), undefined, 'error');
}
});
}, 500);
};
/**
* @function 添加扩展监听机制
* @return void
*/
var removerListener$1 = function removerListener() {
hasAddListener$2 = false;
defaultApi$1.writeLog("ZEGO::action--removerListener EMListenerId:".concat(EMListenerId$1));
EM$6.RemoverListener(extensionId$2, EMListenerId$1, function (ec, content) {});
EMListenerId$1 = 0;
};
/**
* @function 推流异常恢复
*/
var pushFlowExceptionHandler$1 = async function pushFlowExceptionHandler() {
await new Promise(function (resolve, reject) {
setTimeout(function () {
resolve();
}, 1000);
});
defaultApi$1.writeLog('断网重推');
defaultApi$1.writeLog('avsdk ZEGO::try to pushFlow again');
await stopPublish();
await startPublish2();
};
/**
* @function 拉流异常恢复
*/
var pullFlowExceptionHandler$1 = async function pullFlowExceptionHandler(streamId) {
await new Promise(function (resolve, reject) {
setTimeout(function () {
resolve();
}, 1000);
});
defaultApi$1.writeLog('断网重拉');
defaultApi$1.writeLog("avsdk ZEGO::try to pullFlow again \uFF0CstreamId : ".concat(streamId));
await stopPlayStream(streamId);
await playStream(streamId);
};
/**
* @function 初始化 Engine
* @param appId:String Zego 秘钥,必选
* @param appSignature:String 签名,必选
* @param businessType:Number 业务类型,可选,默认为 0
* @param videoRenderType:Number zego视频渲染类型,默认为2(只外部渲染),zego小组课需要设置为5(同时支持内部+外部渲染)
* @return Promise | void
*/
var startEngine = function startEngine(appId, appSignature, businessType) {
var videoRenderType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2;
if (typeof businessType === 'undefined') {
businessType = 0;
}
defaultApi$1.writeLog('avsdk ZEGO::StartEngine');
return callMethod$4('StartEngine', {
appId: appId,
appSignature: appSignature,
businessType: businessType,
videoRenderType: videoRenderType
});
}; //开启消除回声
var setEnableAEC = function setEnableAEC(bEnable) {
return callMethod$4('EnableAEC', {
bEnable: bEnable
});
}; //设置回声消除模式 mode :激进模式 =0/中等模式 =1/轻度模式 =2
var setAECMode = function setAECMode(mode) {
return callMethod$4('SetAECMode', {
mode: mode
});
}; //开启噪音消除
var setEnableNoiseSuppress = function setEnableNoiseSuppress(bEnable) {
return callMethod$4('EnableNoiseSuppress', {
bEnable: bEnable
});
}; //设置噪音消除模式 mode :0:低 1:中 2高
var setNoiseSuppressMode = function setNoiseSuppressMode(level) {
return callMethod$4('SetNoiseSuppressMode', {
level: level
});
}; //新增瞬时降噪接口 瞬时降噪 可以处理掉 敲键盘、敲桌子、敲门等瞬态噪声。非瞬态噪声,此接口无法处理,比如划桌子等摩擦噪音。
var enableTransientNoiseSuppress = function enableTransientNoiseSuppress(enable) {
return callMethod$4('EnableTransientNoiseSuppress', {
enable: enable
});
};
/**
* @function 加载采集插件的输入数据 //调用后,zego 可以向采集插件传送摄像头数据,用于拼接
* @return: Promise
*/
var loadCollectionInputEntry = function loadCollectionInputEntry() {
return callMethod$4('LoadCollectionInputEntry', {});
};
/**
* @function 加载采集插件的输出数据 //调用后,zego 可以向采集插件传送学生流数据(加载截屏插件,获取截屏插件设置拉流头像回调函数)
* @param stream_ids array 设置需要拼接的学生头像流id,按数组顺序拼接
* @return: Promise
*/
var loadCollectionInputEntry2 = function loadCollectionInputEntry2(stream_ids) {
return callMethod$4('LoadCollectionInputEntry2', {
stream_ids: stream_ids
});
};
/**
* @function 加载采集插件的输出数据 //调用后,zego 可以从采集插件获取拼接数据
* @return: Promise
*/
var loadCollectionOutputEntry = function loadCollectionOutputEntry() {
return callMethod$4('LoadCollectionOutputEntry', {});
};
/**
* @function 设置直推url //调用后,zego 可以从采集插件获取拼接数据
* @param pRtmpUrl:String 直推地址
* @param idx:Number 使用外部采集的通道idx,与StartEngine中channel_idx保持一致
* @return: Promise
*/
var setCDNPublishTarget = function setCDNPublishTarget(pRtmpUrl, idx) {
return callMethod$4('SetCDNPublishTarget', {
pRtmpUrl: pRtmpUrl,
idx: idx
});
};
/**
* @function 销毁引擎
* @return Promise | void
*/
var destroyEngine$1 = function destroyEngine() {
return callMethodWithTimeout('DestroyEngine', {}, CALL_TIMEOUT_MS);
};
/**
* @function 加入频道
* @param userId:Number 用户 id,必选
* @param userName:String 用户名,必选
* @param channelId:String 频道 id,必选
* @param nNetType:Number 网络类型,可选,默认为 1
* @return Promise | void
*/
var loginChannel = function loginChannel(userId, userName, channelId, nNetType) {
if (typeof nNetType === 'undefined') {
nNetType = 1;
}
return callMethod$4('LoginChannel', {
pszUserID: userId + '',
pszUserName: userName,
pszChannelID: channelId,
nNetType: nNetType
});
};
/**
* @function 退出直播频道
* @return Promise | void
*/
var logoutChannel = function logoutChannel() {
defaultApi$1.writeLog('avsdk ZEGO:: CallMethod : LogoutChannel');
return callMethod$4('LogoutChannel', {});
};
/**
* @function 云控时退出房间
* @return Promise
*/
var leaveRoomWithChangeSDK = async function leaveRoomWithChangeSDK() {
defaultApi$1.writeLog("leaveRoomWithChangeSDK--currentClassMode--currentGroupSdkType ".concat(currentClassMode, ", ").concat(currentGroupSdkType));
var needDestroyZegoEngine = true; //云控从zego切到其他sdk时,默认释放zego引擎。但是如果zego在推拉RTMP流,则不能释放
if (currentGroupSdkType == 'zego' || window.zby_isM1Type) {
switch (currentClassMode) {
case 0: // 小组
case 2:
// 组合小班
needDestroyZegoEngine = false;
break;
case 1:
// 小班
if (window.zby_sdk_init_params.role === 'teacher' || window.zby_sdk_init_params.role === 'assistant') {
needDestroyZegoEngine = false;
}
break;
}
}
await stopSoundLevelMonitor();
for (var key in streamIdToPreviewId$1) {
await stopPlayStream(key, true);
}
if (isZegoGroupClass() && (currentRole === 'teacher' || currentRole === 'assistant') || isZegoCombinationClass() && currentRole === 'assistant') {
// zego小组课,切RTC流云控后,授课端不能停止预览
console.log('zego小组课不可停止预览,会影响rtmp');
} else {
await stopPreview$1();
}
await stopPublish();
removerListener$1();
if (needDestroyZegoEngine === true) {
await destroyEngine$1();
}
if (window.zby_sdk_init_params.role === 'teacher' && window.zby_sdk_init_params.mode === 1) {
//坐立模式关闭外部采集器,站立关闭外部采集器
await setVideoCaptureFactory(false);
}
heartBeatDataReport$1('stop');
isFirstHeartBeatReport$1 = false;
streamIdToPreviewId$1 = {};
previewIdToStreamId = {};
streamIdRtcPlayerInfo$1 = {};
streamIdRtcPlayerInfo1$1 = {}; // heartBeatDataReportObj = {};
hasLoginChannel = 0;
hasPushFlow = 0;
isAVEngineStopped = 0;
window.zegoHasPushFlow = 0;
};
/**
* @function 退出房间
* @return Promise
*/
var leaveRoom$1 = async function leaveRoom(type) {
await stopSoundLevelMonitor();
for (var key in streamIdToPreviewId$1) {
await stopPlayStream(key, true);
}
await stopPublish();
removerListener$1(); // await logoutChannel();
// await new Promise((resolve, reject) => {
// let timer = setInterval(() => {
// if (isAVEngineStopped) {
// clearInterval(timer);
// resolve();
// }
// }, 300);
// });
if (type == 'reload') {
defaultApi$1.writeLog('leaveroom -- reload --小组课刷新不可销毁zego引擎');
} else {
await stopPreview$1();
await destroyEngine$1();
}
if (window.zby_sdk_init_params.role === 'teacher' && window.zby_sdk_init_params.mode === 1) {
//坐立模式关闭外部采集器,站立关闭外部采集器
await setVideoCaptureFactory(false);
}
heartBeatDataReport$1('stop');
isFirstHeartBeatReport$1 = false;
streamIdToPreviewId$1 = {};
previewIdToStreamId = {};
streamIdRtcPlayerInfo$1 = {};
streamIdRtcPlayerInfo1$1 = {}; // heartBeatDataReportObj = {};
hasLoginChannel = 0;
hasPushFlow = 0;
isAVEngineStopped = 0;
window.zegoHasPushFlow = 0;
};
var stopCheckDevice$1 = async function stopCheckDevice() {
removerListener$1();
await stopSoundLevelMonitor();
await stopPreview$1();
defaultApi$1.writeLog('rtc stopCheckDevice and removerListener and captureDestroy');
try {
return await callMethodWithTimeout('DestroyEngine', {}, CALL_TIMEOUT_MS);
} catch (e) {
var msg = String(e);
if (e && e.message) {
msg = e.message;
}
defaultApi$1.writeLog("stopCheckDevice DestroyEngine failed: ".concat(msg), undefined, 'error');
return {
code: -1,
msg: msg
};
}
};
/**
* @function 获取系统默认的音频设备
* @param deviceType:Number 音频设备类型,0 -> 麦克风,1 -> 扬声器,必选
* @return Promise | void
*/
var getDefaultAudioDeviceId = function getDefaultAudioDeviceId(deviceType) {
return callMethod$4('GetDefaultAudioDeviceId', {
deviceType: deviceType,
// 以下两个参数仅仅是为了向下向后兼容,使用 hardcore 即可
deviceId: '',
deviceIdLength: 0
});
};
/**
* @function 获取系统默认的麦克风设备 id
* @return Promise
*/
var getDefaultMicrophone = function getDefaultMicrophone() {
return getDefaultAudioDeviceId(0);
};
/**
* @function 获取系统默认的扬声器设备 id
* @return Promise
*/
var getDefaultSpeaker = function getDefaultSpeaker() {
return getDefaultAudioDeviceId(1);
};
/**
* @function 获取摄像头列表
* @return Promise | void
*/
var getVideoDeviceList = async function getVideoDeviceList() {
var videoListArr = JSON.parse((await callMethod$4('GetVideoDeviceList', {
// 这个参数是 C++ 要使用的引用参数,随便传个整型就行
device_count: 1
})).msg).ret;
var videoList = [];
for (var i = 0, len = videoListArr.length; i < len; i++) {
videoList.push({
deviceId: videoListArr[i].szDeviceId,
deviceName: videoListArr[i].szDeviceName,
isDefault: i === 0
});
deviceListReport.cameraList[videoListArr[i].szDeviceId] = videoListArr[i].szDeviceName;
}
if (!window.zbyAVSDK_device_checker_init) {
window.zbyAVSDK_device_checker_init = {};
}
if (!window.zbyAVSDK_device_checker_init.camera) {
window.zbyAVSDK_device_checker_init.camera = {};
}
window.zbyAVSDK_device_checker_init.camera.hasTest = true;
window.zbyAVSDK_device_checker_init.camera.list = videoList;
return videoList;
};
/**
* @function 指定使用的摄像头
* @param deviceId:String 摄像头 id,必选
* @param idx:Number 推流通道,可选,默认为 0
* @param operationType:String 操作类型,可选
* 'device_error' -> 设备出错处理,'plug_and_unplug' -> 热插拔处理,
* 不传即是普通的设置摄像头设备的行为
* @return Promise | void
*/
var setVideoDevice = async function setVideoDevice(args) {
defaultApi$1.writeLog("".concat(JSON.stringify(args), "----setVideoDevice-zego----"));
var deviceId = args.deviceId,
idx = args.idx,
operationType = args.operationType,
deviceState = args.deviceState,
code = args.code,
changedDeviceId = args.changedDeviceId;
var deviceName = '';
var cameraData = await getVideoDeviceList();
if (cameraData.length) {
var defaultDevice;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = cameraData[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var item = _step.value;
if (deviceId && item.deviceId === deviceId) {
deviceName = item.deviceName;
break;
}
if (item.isDefault) {
defaultDevice = item;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
if (!defaultDevice) {
defaultDevice = cameraData[0];
}
if (!deviceId || !deviceName) {
NOTICE.deviceError({
code: -2,
msg: '设备ID无效',
deviceId: deviceId,
deviceName: deviceName
});
deviceId = defaultDevice.deviceId;
deviceName = defaultDevice.deviceName;
}
} else {
deviceId = '';
}
if (deviceId === '') {
NOTICE.noDevice({
deviceType: 'camera'
});
}
window.zbyAVSDK_device_checker_init.camera.use = deviceId;
window.zbyAVSDK_device_checker_init.camera.name = deviceListReport.cameraList[deviceId];
if (typeof idx === 'undefined') {
idx = 0;
}
try {
dataReport$2.setDevice({
device_type: 1,
device_id: deviceId,
device_name: deviceListReport.cameraList[deviceId],
operationType: operationType,
fore_state: operationType == 'hotPlug' ? deviceState + 1 : '-'
});
} catch (e) {}
;
await callMethod$4('SetVideoDevice', {
pszDeviceID: deviceId,
idx: idx
});
if (operationType == 'hotPlug' || operationType == 'deviceError') {
if (!cameraData) {
cameraData = await getVideoDeviceList();
deviceName = deviceListReport.cameraList[deviceId];
}
NOTICE[operationType]({
deviceType: 'camera',
useDeviceId: deviceId,
useDeviceName: deviceName,
deviceList: cameraData,
messge: code,
deviceState: deviceState,
changedDeviceId: changedDeviceId
});
}
try {
NOTICE.useredCamera({
deviceId: deviceId,
deviceName: deviceName
});
} catch (e) {}
;
};
/**
* @function 开/关摄像头
* @param enable:Boolean false -> 关闭,true -> 打开,必选
* @param idx:Number 推流通道,可选,默认为 0
* @return Promise | void
*/
var enableCamera = function enableCamera(enable) {
var idx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
// try {
// dataReport.deviceChange({
// device: 1,
// device_state: enable? 1 : 0
// });
// } catch (e){};
return callMethod$4('EnableCamera', {
bEnable: enable,
idx: idx
});
};
/**
* @function 开/关麦克风
* @param bEnable:Boolean false -> 关闭,true -> 打开,必选
* @param idx:Number 推流通道,可选,默认为 0
* @return Promise | void
*/
var enableMic = async function enableMic(bEnable, idx) {
defaultApi$1.writeLog('enableMic --start');
isNoticeMicVolumeZego = bEnable; // if (bEnable) {
// await setMicDeviceMute(false);
// defaultApi.writeLog('openMic and muteFalse');
// }
if (typeof idx === 'undefined') {
idx = 0;
} // try {
// dataReport.deviceChange({
// device: 2,
// device_state: bEnable ? 1 : 0
// });
// } catch (e){};
return callMethod$4('EnableMic', {
bEnable: bEnable,
idx: idx
});
};
/**
* @function 是否推声音
* @param mute:Boolean true/不推声音,false/推声音,必选
* @return Promise | void
*/
var setMuteStreamAudio = function setMuteStreamAudio(mute) {
return callMethod$4('MuteStreamAudio', {
mute: mute
});
};
/**
* @function 是否推画面
* @param mute:Boolean true/不推画面,false/推画面,必选
* @return Promise | void
*/
var setMuteStreamVideo = function setMuteStreamVideo(mute) {
return callMethod$4('MuteStreamVideo', {
mute: mute
});
};
/**
* @function 获取音频设备
* @param deviceType:Number 音频设备类型,0 -> 麦克风,1 -> 扬声器,必选
* @return Promise | void
*/
var getAudioDeviceList = function getAudioDeviceList(deviceType) {
return callMethod$4('GetAudioDeviceList', {
deviceType: deviceType,
// 这个参数是 C++ 要使用的引用参数,随便传个整型就行
device_count: 0
});
};
/**
* @function 指定音频设备
* @param deviceType:Number 音频设备类型,0 -> 麦克风,1 -> 扬声器,必选
* @param deviceId:String 音频设备 id,必选
* @return Promise | void
*/
var setAudioDevice = function setAudioDevice(deviceType, deviceId) {
if (deviceType == 0) {
window.zbyAVSDK_device_checker_init.microphone.use = deviceId;
} else {
window.zbyAVSDK_device_checker_init.speaker.use = deviceId;
}
return callMethod$4('SetAudioDevice', {
deviceType: deviceType,
pszDeviceID: deviceId
}).then(function (result) {
if (deviceType == 1 && result.code === 0) {
NOTICE.speakerChanged({
deviceId: deviceId
});
}
return result;
});
};
/**
* 获取当前扬声器设备id
* @return {String} 当前扬声器设备id
*/
var getCurrentSpeakerDevice = function getCurrentSpeakerDevice() {
defaultApi$1.writeLog("avsdk ZEGO::getSpeakerDevice ".concat(usingAudioDeviceId.speaker));
return usingAudioDeviceId.speaker;
};
/**
* @function 获取扬声器列表
* @return Promise | void
*/
var getSpeakerDeviceList = async function getSpeakerDeviceList() {
var defaultSpeakerId = JSON.parse((await getDefaultSpeaker()).msg).ret.deviceId;
var speakerListArr = JSON.parse((await getAudioDeviceList(1)).msg).ret;
var speakerList = [];
for (var i = 0, len = speakerListArr.length; i < len; i++) {
speakerList.push({
deviceId: speakerListArr[i].szDeviceId,
deviceName: speakerListArr[i].szDeviceName,
isDefault: defaultSpeakerId === speakerListArr[i].szDeviceId
});
deviceListReport.speakerList[speakerListArr[i].szDeviceId] = speakerListArr[i].szDeviceName;
}
if (!window.zbyAVSDK_device_checker_init) {
window.zbyAVSDK_device_checker_init = {};
}
if (!window.zbyAVSDK_device_checker_init.speaker) {
window.zbyAVSDK_device_checker_init.speaker = {};
}
window.zbyAVSDK_device_checker_init.speaker.hasTest = true;
window.zbyAVSDK_device_checker_init.speaker.list = speakerList;
return speakerList;
};
/**
* @function 指定扬声器
* @param deviceId:String 扬声器 id,必选
* @param operationType:String 操作类型,可选
* 'device_error' -> 设备出错处理,'plug_and_unplug' -> 热插拔处理,
* 不传即是普通的设置扬声器设备的行为
* @return Promise | void
*/
var setSpeakerDevice$1 = async function setSpeakerDevice(args) {
defaultApi$1.writeLog("".concat(JSON.stringify(args), "----setSpeakerDevice-zego----")); // console.log('hsghsghsg999',args);
var deviceId = args.deviceId,
operationType = args.operationType,
deviceState = args.deviceState,
code = args.code,
changedDeviceId = args.changedDeviceId;
var deviceName = '';
var speakerData;
if (!deviceId) {
speakerData = await getSpeakerDeviceList(); // console.log('hsghsghsg0',speakerData.length);
if (speakerData.length) {
var hasGetSpeaker = false; // console.log('hsghsghsg1',hasGetSpeaker);
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = speakerData[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var item = _step2.value;
if (item.isDefault) {
deviceId = item.deviceId;
deviceName = item.deviceName;
hasGetSpeaker = true;
break;
}
} // console.log('hsghsghsg2',hasGetSpeaker);
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
if (!hasGetSpeaker) {
deviceId = speakerData[0].deviceId;
deviceName = speakerData[0].deviceName; // console.log('hsghsghsg91',deviceId);
}
} else {
deviceId = '';
}
if (deviceId === '') {
NOTICE.noDevice({
deviceType: 'speaker'
});
}
} // console.log('hsghsghsg999',deviceId);
try {
dataReport$2.setDevice({
device_type: 3,
device_id: deviceId,
device_name: deviceListReport.speakerList[deviceId],
operationType: operationType,
fore_state: operationType == 'hotPlug' ? deviceState + 1 : '-'
});
window.zbyAVSDK_device_checker_init.speaker.name = deviceListReport.speakerList[deviceId];
} catch (e) {}
;
usingAudioDeviceId.speaker = deviceId;
await setAudioDevice(1, deviceId);
if (operationType == 'hotPlug' || operationType == 'deviceError') {
if (!speakerData) {
speakerData = await getSpeakerDeviceList();
deviceName = deviceListReport.speakerList[deviceId];
}
NOTICE[operationType]({
deviceType: 'speaker',
useDeviceId: deviceId,
useDeviceName: deviceName,
deviceList: speakerData,
message: code,
deviceState: deviceState,
changedDeviceId: changedDeviceId
});
}
};
/**
* @function 获取扬声器音量
* @return Promise | void
*/
var getSpeakerDeviceVolume = function getSpeakerDeviceVolume() {
return callMethod$4('GetSpeakerDeviceVolume', {
deviceId: usingAudioDeviceId.speaker
});
};
/**
* @function 设置扬声器音量
* @param volume:Number 扬声器音量,必选
* @return Promise | void
*/
var setSpeakerDeviceVolume = function setSpeakerDeviceVolume(volume) {
return callMethod$4('SetSpeakerDeviceVolume', {
deviceId: usingAudioDeviceId.speaker,
volume: volume
});
};
/**
* @function 设置扬声器静音
* @param mute:Boolean 必选
* @return Promise | void
*/
var setSpeakerDeviceMute = function setSpeakerDeviceMute(mute) {
// try {
// dataReport.deviceChange({
// device: 3,
// device_state: mute ? 0 :1
// });
// } catch (e){};
return callMethod$4('SetSpeakerDeviceMute', {
deviceId: usingAudioDeviceId.speaker,
mute: mute
});
};
/**
* @function 获取麦克风列表
* @return Promise | void
*/
var getMicrophoneDeviceList = async function getMicrophoneDeviceList() {
var defaultMicrophoneId = JSON.parse((await getDefaultMicrophone()).msg).ret.deviceId;
var microphoneListArr = JSON.parse((await getAudioDeviceList(0)).msg).ret;
var microphoneList = [];
for (var i = 0, len = microphoneListArr.length; i < len; i++) {
microphoneList.push({
deviceId: microphoneListArr[i].szDeviceId,
deviceName: microphoneListArr[i].szDeviceName,
isDefault: defaultMicrophoneId === microphoneListArr[i].szDeviceId
});
deviceListReport.micList[microphoneListArr[i].szDeviceId] = microphoneListArr[i].szDeviceName;
}
if (!window.zbyAVSDK_device_checker_init) {
window.zbyAVSDK_device_checker_init = {};
}
if (!window.zbyAVSDK_device_checker_init.microphone) {
window.zbyAVSDK_device_checker_init.microphone = {};
}
window.zbyAVSDK_device_checker_init.microphone.hasTest = true;
window.zbyAVSDK_device_checker_init.microphone.list = microphoneList;
return microphoneList;
};
/**
* @function 指定麦克风
* @param deviceId:String 麦克风 id,必选
* @param operationType:String 操作类型,可选
* 'device_error' -> 设备出错处理,'plug_and_unplug' -> 热插拔处理,
* 不传即是普通的设置麦克风设备的行为
* @return Promise | void
*/
var setMicrophoneDevice$1 = async function setMicrophoneDevice(args) {
defaultApi$1.writeLog("".concat(JSON.stringify(args), "----setMicrophoneDevice-zego----"));
var deviceId = args.deviceId,
operationType = args.operationType,
deviceState = args.deviceState,
code = args.code,
changedDeviceId = args.changedDeviceId;
var deviceName = '';
var microPhoneData;
if (!deviceId) {
microPhoneData = await getMicrophoneDeviceList();
if (microPhoneData.length) {
var hasGetMicrophone = false;
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = microPhoneData[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var item = _step3.value;
if (item.isDefault) {
deviceId = item.deviceId;
deviceName = item.deviceName;
hasGetMicrophone = true;
break;
}
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
if (!hasGetMicrophone) {
deviceId = microPhoneData[0].deviceId;
deviceName = microPhoneData[0].deviceName;
}
} else {
deviceId = '';
}
if (deviceId === '') {
NOTICE.noDevice({
deviceType: 'microphone'
});
}
}
try {
dataReport$2.setDevice({
device_type: 2,
device_id: deviceId,
device_name: deviceListReport.micList[deviceId],
operationType: operationType,
fore_state: operationType == 'hotPlug' ? deviceState + 1 : '-'
});
window.zbyAVSDK_device_checker_init.microphone.name = deviceListReport.micList[deviceId];
} catch (e) {}
;
usingAudioDeviceId.microphone = deviceId;
await setAudioDevice(0, deviceId);
await setAudioVolumeNotify(0, deviceId);
if (operationType == 'hotPlug' || operationType == 'deviceError') {
if (!microPhoneData) {
microPhoneData = await getMicrophoneDeviceList();
deviceName = deviceListReport.micList[deviceId];
}
NOTICE[operationType]({
deviceType: 'microphone',
useDeviceId: deviceId,
useDeviceName: deviceName,
deviceList: microPhoneData,
message: code,
deviceState: deviceState,
changedDeviceId: changedDeviceId
});
}
};
/**
* @function 获取麦克风音量
* @return Promise | void
*/
var getMicDeviceVolume = function getMicDeviceVolume() {
return callMethod$4('GetMicDeviceVolume', {
deviceId: usingAudioDeviceId.microphone
});
};
/**
* @function 设置麦克风音量
* @param volume:Number 麦克风音量,必选
* @return Promise | void
*/
var setMicDeviceVolume = function setMicDeviceVolume(volume) {
return callMethod$4('SetMicDeviceVolume', {
deviceId: usingAudioDeviceId.microphone,
volume: volume
});
};
/**
* @function 设置麦克风静音
* @param mute:Boolean 必选
* @return Promise | void
*/
var setMicDeviceMute = function setMicDeviceMute(mute) {
return callMethod$4('SetMicDeviceMute', {
deviceId: usingAudioDeviceId.microphone,
mute: mute
});
}; //设置采集扬声器声音
var setAudioSpeakerCapture$1 = async function setAudioSpeakerCapture(bEnable) {
return callMethod$4('EnableMixSystemPlayout', {
bEnable: bEnable
});
}; // //采集扬声器
// export const setAudioSpeakerCapture2 = async (bEnable) => {
// return callMethod('MixEnginePlayout', {
// bEnable,
// });
// };
/**
* @function 获取当前应用程序音量
* @return Promise | void
*/
var getSpeakerSimpleVolume = function getSpeakerSimpleVolume() {
return callMethod$4('GetSpeakerSimpleVolume', {
deviceId: usingAudioDeviceId.speaker
});
};
/**
* @function 设置视频预览载体 view
* @param idx:Number 直播通道,可选,默认为 0
* @return Promise | void
*/
var setPreviewView = function setPreviewView(idx) {
if (typeof idx === 'undefined') {
idx = 0;
}
return callMethod$4('SetPreviewView', {
idx: idx
});
};
/**
* @function 设置本地预览视频视图的模式
* @param mode:Number 模式,必选,0 | 1 | 2
* 0:等比缩放,可能有黑边
* 1:等比缩放填充整View,可能有部分被裁减
* 2:填充整个View
* @param idx:Number 直播通道,可选,默认为 0
* @return Promise | void
*/
var setPreviewViewMode = function setPreviewViewMode(mode, idx) {
if (typeof idx === 'undefined') {
idx = 0;
}
return callMethod$4('SetPreviewViewMode', {
mode: mode,
idx: idx
});
};
/**
* @function 开启预览
* @param idx:Number 推流通道,可选,默认为 0
* @return Promise | void
*/
var startPreview$1 = function startPreview(idx) {
if (typeof idx === 'undefined') {
idx = 0;
}
return callMethod$4('StartPreview', {
idx: idx
});
};
/**
* @function 停止预览
* @param idx:Number 推流通道,可选,默认为 0
* @return Promise | void
*/
var stopPreview$1 = function stopPreview(idx) {
if (typeof idx === 'undefined') {
idx = 0;
}
return callMethod$4('StopPreview', {
idx: idx
});
};
/**
* @function 设置当前应用程序音量
* @param volume:Number 应用程序音量,必选
* @return Promise | void
*/
var setSpeakerSimpleVolume = function setSpeakerSimpleVolume(volume) {
return callMethod$4('SetSpeakerSimpleVolume', {
deviceId: usingAudioDeviceId.speaker,
volume: volume
});
};
/**
* @function 设置当前应用程序静音
* @param mute:Boolean 是否静音,必选
* @return Promise | void
*/
var setSpeakerSimpleMute = function setSpeakerSimpleMute(mute) {
return callMethod$4('SetSpeakerSimpleMute', {
deviceId: usingAudioDeviceId.speaker,
mute: mute
});
};
/**
* @function 开启本地或者远程的视频视图
* @param isLocal:Boolean 是否是本地的视频预览,必选
* @param streamId:String 要拉取的视频流的 id,可选,只有拉取远程的视频流的时候才是必选的
* @param domId:String <video> 标签的 id,可选
* 如果传了 domId,就把视频绑定到对应的 <video> 标签上
* @return Promise 可从 Promise 中获取 src,Promise.then((src) => {})
*/
var startLocalOrRemotePreview$1 = async function startLocalOrRemotePreview(isLocal, streamId, domId, isTeacherNewWindowPreview) {
defaultApi$1.writeLog("".concat(streamId, "----streamId-zego----"));
var playChannel = null;
var isUpdateChromeVersion = await util.getChromeVersion(); // zego 的本地视频预览必须使用 -1 通道,为了与远程的视频预览兼容使用,此处需要判断是否是本地预览
if (isLocal) {
playChannel = -1;
} else {
playChannel = streamIdToPreviewId$1[streamId];
}
var externalConstraints = {
audio: false,
video: {
mandatory: {
chromeMediaSource: 'external',
chromeMediaSourceId: "ems://zego/".concat(isLocal || isTeacherNewWindowPreview ? -1 : streamId),
maxWidth: 3840,
maxHeight: 2160,
minWidth: 240,
minHeight: 180
}
}
};
defaultApi$1.writeLog("avsdk ZEGO::startLocalOrRemotePreview streamId: ".concat(streamId, " uiChnIndex: ").concat(playChannel));
return new Promise(function (resolve, reject) {
var handleExternalSuccess = function handleExternalSuccess(stream) {
defaultApi$1.writeLog("".concat(stream, "----stream-zego----"));
stream.oninactive = function () {
defaultApi$1.writeLog('Stream inactive');
};
var src = isUpdateChromeVersion ? stream : window.URL.createObjectURL(stream);
if (domId && document.querySelector(domId)) {
if (isUpdateChromeVersion) {
document.querySelector(domId).srcObject = src;
} else {
document.querySelector(domId).src = src;
}
}
defaultApi$1.writeLog("setVidoeSrc, streamId:".concat(streamId, ", domId: ").concat(domId, ", src: ").concat(src));
resolve(src);
};
var handleExternalError = function handleExternalError(error) {
if (error.name === 'ConstraintNotSatisfiedError') {
console.error('ConstraintNotSatisfiedError');
} else if (error.name === 'PermissionDeniedError') {
console.error('Permissions have not been granted to use your camera and ' + 'microphone, you need to allow the page access to your devices in ' + 'order for the demo to work.');
}
console.error("getUserMedia error: ".concat(error.name), error);
if (domId) {
document.querySelector(domId).src = '';
}
reject('');
};
if (navigator.webkitGetUserMedia) {
navigator.webkitGetUserMedia(externalConstraints, handleExternalSuccess, handleExternalError);
}
});
};
/**
* @function 设置本地预览以及推流的视频帧率
* @param nFps:Number 帧率,必选
* @param idx:Number 推流通道,可选,默认为 0
* @return Promise | void
*/
var setVideoFPS = function setVideoFPS(nFps, idx) {
if (typeof idx === 'undefined') {
idx = 0;
}
return callMethod$4('SetVideoFPS', {
nFps: nFps,
idx: idx
});
};
/**
* @function 设置本地预览以及推流的视频码率
* @param nBitrate:Number 码率,必选
* @param idx:Number 推流通道,可选,默认为 0
* @return Promise | void
*/
var setVideoBitrate = function setVideoBitrate(nBitrate, idx) {
if (typeof idx === 'undefined') {
idx = 0;
}
return callMethod$4('SetVideoBitrate', {
nBitrate: nBitrate,
idx: idx
});
};
/**
* @function 设置本地预览以及推流的音频码率
* @param bitrate:Number 码率,必选
* @param idx:Number 推流通道,可选,默认为 0
* @return Promise | void
*/
var setAudioBitrate = function setAudioBitrate(bitrate, idx) {
if (typeof idx === 'undefined') {
idx = 0;
}
return callMethod$4('SetAudioBitrate', {
bitrate: bitrate,
idx: idx
});
};
/**
* @function 设置本地预览的视频分辨率
* @param nWidth:Number 分辨率宽,必选
* @param nHeight:Numnber 分辨率高,必选
* @param idx:Number 推流通道,可选,默认为 0
* @return Promise | void
*/
var setCameraParam$1 = async function setCameraParam(nWidth, nHeight, idx) {
defaultApi$1.writeLog("avsdk ZEGO::setCameraParam ".concat(nWidth, "--").concat(nHeight));
await enableCamera(false);
await setVideoCaptureResolution(nWidth, nHeight, idx);
return enableCamera(true);
};
/**
* @function 设置本地预览的视频分辨率
* @param nWidth:Number 分辨率宽,必选
* @param nHeight:Numnber 分辨率高,必选
* @param idx:Number 推流通道,可选,默认为 0
* @return Promise | void
*/
var setVideoCaptureResolution = async function setVideoCaptureResolution(nWidth, nHeight, idx) {
if (typeof idx === 'undefined') {
idx = 0;
}
await setCapturePipelineScaleMode();
return callMethod$4('SetVideoCaptureResolution', {
nWidth: nWidth,
nHeight: nHeight,
idx: idx
});
};
var setCapturePipelineScaleMode = function setCapturePipelineScaleMode() {
return callMethod$4('SetCapturePipelineScaleMode', {
scaleMode: 1
});
};
/**
* @function 设置推流的视频分辨率
* @param nWidth:Number 分辨率宽,必选
* @param nHeight:Numnber 分辨率高,必选
* @param idx:Number 推流通道,可选,默认为 0
* @return Promise | void
*/
var setVideoEncodeResolution = function setVideoEncodeResolution(nWidth, nHeight, idx) {
if (typeof idx === 'undefined') {
idx = 0;
}
return callMethod$4('SetVideoEncodeResolution', {
nWidth: nWidth,
nHeight: nHeight,
idx: idx
});
};
/**
* @function 初始化
* @param args:Object
* {
* extensionVersion, // String,扩展版本号,必选
* appId, // String,Zego 秘钥,必选
* appSignature, // String,签名,必选
* businessType, // Number,业务类型,必选
* userId, // Number,用户 id,必选
* userName, // String,用户名,必选
* roomId, // String,频道(房间) id,必选
* nNetType // Number,网络类型,可选,默认为 1
* }
* classMode 0:小组课及其他 1:小班课 2:组合小班课
* @return Promise
*/
var init$1 = async function init(args) {
defaultApi$1.writeLog("avsdk ZEGO::init ".concat(JSON.stringify(args)));
currentRole = args.role;
currentClassMode = args.classMode;
currentGroupSdkType = args.sdkTypeGroup;
localStreamId = args.streamId;
teacherId = args.teacherId;
lecturerStreamId = typeof args.lecturerStreamId === 'string' ? args.lecturerStreamId.toUpperCase() : null;
lecturerUid = typeof lecturerStreamId === 'string' ? lecturerStreamId.split('_')[2] : null;
dataReport$2.setRealSDKType('zego');
await loadZego(args.extensionVersion);
if (args.role === 'teacher' && args.mode === 1) {
//坐立模式开启外部采集器,站立关闭外部采集器,只有小组课坐立模式才会调用,通过这个把rtmp数据给到zego或者rtc(头像),开启了外部采集,zego不会再本地采集数据
await setVideoCaptureFactory(true);
} // if (args.classMode === 1 || args.classMode === 2){
// //如果是小班课保证关闭外部采集器,小组课上一步打开
// await setVideoCaptureFactory(false);
// };
// 注册回调
addListener$2(args.userId, args.userName, args.confId, args.nNetType, args.devices, args.role); //rtc同屏以及高光时刻,都开启音频外部采集,默认传1
if (args.role === 'teacher') {
defaultApi$1.writeLog('avsdk ZEGO::init_ open setAudioAuxSource');
if (args.classMode === 1 || args.classMode === 2) {
await setAudioAuxSource(1);
}
teacherId = null;
}
if (args.mode === 1 && (isZegoGroupClass() && (args.role === 'teacher' || args.role === 'assistant') || isZegoCombinationClass() && args.role === 'assistant')) {
//zego推拉RTMP小组课,授课端坐立模式、辅导端坐立模式 或 zego推拉RTMP组合小班辅导端坐立模式,需要将摄像头渲染模式设置为 内部渲染+外部渲染
await startEngine(args.appId, args.appSignature, args.businessType, 5); //5为摄像头内部渲染+外部渲染
} else {
await startEngine(args.appId, args.appSignature, args.businessType); //默认为摄像头外部渲染
} //小班课 需要加载采集插件的输入数据,为了拼接zego头像
if ((args.classMode === 1 || args.classMode === 2) && args.role === 'teacher') {
screenStreamId = "".concat(window.zby_sdk_init_params.institutionId, "_").concat(args.roomId, "_").concat(args.userId, "_").concat(args.live_id, "_1");
loadCollectionInputEntry();
}
;
if (args.noiseSuppressMode == -2) {
defaultApi$1.writeLog("noiseSuppressMode \u5173\u95ED\u566A\u58F0\u6D88\u9664 ".concat(args.noiseSuppressMod));
await setEnableNoiseSuppress(false);
} else if (args.noiseSuppressMode == -1) {
defaultApi$1.writeLog("noiseSuppressMode \u7531\u5E95\u5C42\u8FDB\u884C\u914D\u7F6E\uFF0Cjs\u5C42\u4E0D\u8FDB\u884C\u914D\u7F6E ".concat(args.noiseSuppressMode));
} else {
defaultApi$1.writeLog("noiseSuppressMode \u542F\u52A8\u566A\u97F3\u6D88\u9664,\u6A21\u5F0F\u4E3A\uFF1A ".concat(args.noiseSuppressMode));
await setEnableNoiseSuppress(true);
await setNoiseSuppressMode(+args.noiseSuppressMode);
await enableTransientNoiseSuppress(true);
}
; //aecMode为-1是关闭回音消除,云控下传
if (args.aecMode == -2) {
defaultApi$1.writeLog("aecMode \u5173\u95ED\u56DE\u97F3\u6D88\u9664 ".concat(args.aecMode));
await setEnableAEC(false);
} else if (args.aecMode == -1) {
defaultApi$1.writeLog("aecMode \u7531\u5E95\u5C42\u8FDB\u884C\u914D\u7F6E\uFF0Cjs\u5C42\u4E0D\u8FDB\u884C\u914D\u7F6E ".concat(args.aecMode));
} else {
defaultApi$1.writeLog("aecMode \u542F\u52A8\u56DE\u97F3\u6D88\u9664,\u6A21\u5F0F\u4E3A\uFF1A ".concat(args.aecMode));
await setEnableAEC(true);
await setAECMode(+args.aecMode);
}
;
await setVideoBitrate(args.encodeCaptureBitrate); // await setAudioBitrate(args.encodeCaptureBitrate);
await setVideoFPS(args.encodeCaptureFps);
await setVideoCaptureResolution(args.previewResolutionWidth, args.previewResolutionHeight);
await setVideoEncodeResolution(args.encodedResolutionWidth, args.encodedResolutionHeight);
if (isZegoGroupClass() && (args.role === 'teacher' || args.role === 'assistant') || isZegoCombinationClass() && args.role === 'assistant') {
defaultApi$1.writeLog('zego小组课或辅导端组合小班课,用第二路推RTMP流,在pyzx初始化采集参数');
} else {
await setVideoBitrate(args.screenSameBitrate, 1);
await setVideoFPS(args.screenSameFps, 1);
await setVideoCaptureResolution(args.screenSameResolutionWidth, args.screenSameResolutionHeight, 1);
await setVideoEncodeResolution(args.screenSameResolutionWidth, args.screenSameResolutionHeight, 1);
} // await setVideoBitrate(500000);
// await setAudioBitrate(500000);
// await setVideoFPS(15);
// await setVideoCaptureResolution(1280, 720);
// await setVideoEncodeResolution(1280, 720);
await setSoundLevelMonitorCycle(500);
startPullingStreamObserver();
if (isInitFinished) {
defaultApi$1.writeLog("avsdk ZEGO::init_isInitFinished ".concat(isInitFinished)); // await afterInitSDK(args.userId, args.userName, args.roomId, args.nNetType, JSON.parse(JSON.stringify(args.devices)));
isInitFinished = 0;
window.current_sdk_type = 'zego';
defaultApi$1.writeLog('zego init finished current_sdk_type : zego');
} else {
await new Promise(function (resolve, reject) {
var timer = null;
timer = setInterval(function () {
if (isInitFinished) {
isInitFinished = 0;
clearInterval(timer);
resolve();
}
}, 30);
});
window.current_sdk_type = 'zego';
defaultApi$1.writeLog('zego init finished current_sdk_type : zego');
}
};
/**
* @function 在OnInitSDK事件之后调用的初始化方法
* @param userId:Number 用户 id,必选
* @param userName:String 用户名,必选
* @param roomId:String 频道(房间) id,必选
* @param nNetType:Number 网络类型,可选,默认为 1
* @return Promise
*/
var afterInitSDK = async function afterInitSDK(userId, userName, confId, nNetType, devices, role, classMode) {
// 指定默认设备
var usedDevices = window.zbyAVSDK_device_checker_init;
var _devices = {
camera: devices && devices.camera || usedDevices && usedDevices.camera && usedDevices.camera.use || '',
microphone: devices && devices.microphone || usedDevices && usedDevices.microphone && usedDevices.microphone.use || '',
speaker: devices && devices.speaker || usedDevices && usedDevices.speaker && usedDevices.speaker.use || ''
};
defaultApi$1.writeLog('avsdk ZEGO::afterInitSDK');
await setDefaultDevice$1(_devices, 'default');
await loginChannel(userId, userName, confId, nNetType); //设置拉流质量监控周期
await setPlayQualityMoniterCycle(5000);
await setPublishQualityMoniterCycle(5000);
await setMediaSideFlags();
defaultApi$1.writeLog("test: isZegoGroupClass, ".concat(isZegoGroupClass()));
if (isZegoGroupClass() && (role === 'teacher' || role === 'assistant') || isZegoCombinationClass() && role === 'assistant') {
defaultApi$1.writeLog("avsdk ZEGO::afterInitSDK zegoRtmp, classMode: ".concat(classMode, " role: ").concat(role));
} else {
// 初始化的时候不打开摄像头
await enableCamera(false); // 只有调用了这个方法之后才开启关闭摄像头才有效
await startPreview$1();
} // 置为 1 表示初始化完成
isInitFinished = 1;
};
var deviceCheckerInitSDK = async function deviceCheckerInitSDK() {
defaultApi$1.writeLog('avsdk ZEGO::deviceCheckerInitSDK');
await enableCamera(false);
await startPreview$1();
isDeviceCheckInitFinished = 1;
};
var getDeviceCheckInitStatus = function getDeviceCheckInitStatus() {
return isDeviceCheckInitFinished;
};
var setDeviceCheckInitStatus = function setDeviceCheckInitStatus() {
isDeviceCheckInitFinished = 0;
}; //设置是否发送sei
var setMediaSideFlags = function setMediaSideFlags() {
var bStart = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
var bOnlyAudioPublish = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var mediaInfoType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 2;
var seiSendType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
var idx = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
return callMethod$4('SetMediaSideFlags', {
bStart: bStart,
bOnlyAudioPublish: bOnlyAudioPublish,
mediaInfoType: mediaInfoType,
seiSendType: seiSendType,
idx: idx
});
}; //设置拉流质量监控周期
var setPlayQualityMoniterCycle = function setPlayQualityMoniterCycle(timeInMS) {
return callMethod$4('SetPlayQualityMoniterCycle', {
timeInMS: timeInMS
});
}; //设置推流质量监控周期
var setPublishQualityMoniterCycle = function setPublishQualityMoniterCycle(timeInMS) {
return callMethod$4('SetPublishQualityMoniterCycle', {
timeInMS: timeInMS
});
};
/**
* @function 设置默认的硬件设备,包括摄像头、麦克风以及扬声器
* @return Promise
*/
var setDefaultDevice$1 = async function setDefaultDevice(devices, operationType) {
// 设置默认的摄像头
if (devices && devices.camera) {
if (zbyAVSDK_device_checker_init.camera.list.length == 0) {
await getVideoDeviceList();
}
await setVideoDevice({
deviceId: devices.camera,
operationType: "".concat(operationType, "_1")
});
} else {
var cameraData = await getVideoDeviceList();
if (cameraData.length) {
var hasSetCamera = false;
var _iteratorNormalCompletion4 = true;
var _didIteratorError4 = false;
var _iteratorError4 = undefined;
try {
for (var _iterator4 = cameraData[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
var item = _step4.value;
if (item.isDefault) {
await setVideoDevice({
deviceId: item.deviceId,
operationType: "".concat(operationType, "_2")
});
hasSetCamera = true;
break;
}
}
} catch (err) {
_didIteratorError4 = true;
_iteratorError4 = err;
} finally {
try {
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
_iterator4.return();
}
} finally {
if (_didIteratorError4) {
throw _iteratorError4;
}
}
}
if (!hasSetCamera) {
await setVideoDevice({
deviceId: cameraData[0].deviceId,
operationType: "".concat(operationType, "_3")
});
}
}
} // 设置默认的麦克风
if (devices && devices.microphone) {
if (zbyAVSDK_device_checker_init.microphone.list.length == 0) {
await getMicrophoneDeviceList();
}
await setMicrophoneDevice$1({
deviceId: devices.microphone,
operationType: "".concat(operationType, "_1")
});
} else {
var microPhoneData = await getMicrophoneDeviceList();
if (microPhoneData.length) {
var hasSetMicrophone = false;
var _iteratorNormalCompletion5 = true;
var _didIteratorError5 = false;
var _iteratorError5 = undefined;
try {
for (var _iterator5 = microPhoneData[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
var _item = _step5.value;
if (_item.isDefault) {
await setMicrophoneDevice$1({
deviceId: _item.deviceId,
operationType: "".concat(operationType, "_2")
});
hasSetMicrophone = true;
break;
}
}
} catch (err) {
_didIteratorError5 = true;
_iteratorError5 = err;
} finally {
try {
if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
_iterator5.return();
}
} finally {
if (_didIteratorError5) {
throw _iteratorError5;
}
}
}
if (!hasSetMicrophone) {
await setMicrophoneDevice$1({
deviceId: microPhoneData[0].deviceId,
operationType: "".concat(operationType, "_3")
});
}
}
} // 设置默认的扬声器
if (devices && devices.speaker) {
await setSpeakerDevice$1({
deviceId: devices.speaker,
operationType: "".concat(operationType, "_1")
});
} else {
var speakerData = await getSpeakerDeviceList();
if (speakerData.length) {
var hasSetSpeaker = false;
var _iteratorNormalCompletion6 = true;
var _didIteratorError6 = false;
var _iteratorError6 = undefined;
try {
for (var _iterator6 = speakerData[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
var _item2 = _step6.value;
if (_item2.isDefault) {
await setSpeakerDevice$1({
deviceId: _item2.deviceId,
operationType: "".concat(operationType, "_2")
});
hasSetSpeaker = true;
break;
}
}
} catch (err) {
_didIteratorError6 = true;
_iteratorError6 = err;
} finally {
try {
if (!_iteratorNormalCompletion6 && _iterator6.return != null) {
_iterator6.return();
}
} finally {
if (_didIteratorError6) {
throw _iteratorError6;
}
}
}
if (!hasSetSpeaker) {
await setSpeakerDevice$1({
deviceId: speakerData[0].deviceId,
operationType: "".concat(operationType, "_3")
});
}
}
}
};
/**
*
* @param {number} type 0:接管模式,输出头像视频;1:非接管模式,输出播放器视频
* @returns
*/
var setVideoCallback = function setVideoCallback(type) {
defaultApi$1.writeLog("avsdk ZEGO::setVideoCallback type: ".concat(type));
return callMethod$4('SetVideoCallback', {
type: type
});
};
/**
* @function 开始推流
* @param title:String 直播的名称,可选,默认为 ''
* @param flag:Number 直播属性,可选,默认为 0
* @param seq:Number 请求序号,可选,默认为 0
* @param idx:Number 推流通道,可选,默认为 0
* @return Promise | void
*/
var startPublish2 = async function startPublish2(streamid, idx, title, flag, seq) {
var streamId = streamid || window.zbyAVSDK_init_params.zego.streamId;
if (typeof title === 'undefined') {
title = 'none';
}
if (typeof flag === 'undefined') {
flag = 0;
}
if (typeof seq === 'undefined') {
seq = 0;
}
if (typeof idx === 'undefined') {
idx = 0;
}
await new Promise(function (resolve, reject) {
var timer = setInterval(function () {
if (hasLoginChannel) {
clearInterval(timer);
resolve();
}
}, 30);
});
var res = await callMethod$4('StartPublish2', {
pszStreamID: streamId,
pszTitle: title,
seq: seq,
idx: idx,
flag: flag
});
await startSoundLevelMonitor();
await new Promise(function (resolve, reject) {
var timer = setInterval(function () {
if (hasPushFlow) {
clearInterval(timer);
resolve();
}
}, 300);
}); // 心跳开始
if (!isFirstHeartBeatReport$1) {
isFirstHeartBeatReport$1 = true;
heartBeatDataReport$1('start');
}
return res;
};
/**
* @function 结束推流
* @param msg:String 自定义信息,server 对接流结束回调包含此字段内容,可选,默认为 'none'
* @param flag:Number 直播属性,可选,默认为 0
* @param idx:Number 推流通道,可选,默认为 0
* @return Promise | void
*/
var stopPublish = function stopPublish(idx, msg, flag) {
if (typeof msg === 'undefined') {
msg = 'none';
}
if (typeof flag === 'undefined') {
flag = 0;
}
if (typeof idx === 'undefined') {
idx = 0;
} // try {
// dataReport.stopPublish({publish_streamid:window.zbyAVSDK_init_params.zego.streamId});
// } catch (error) {}
return callMethod$4('StopPublish', {
pszMsg: msg,
flag: flag,
idx: idx
});
};
/**
* @function 初始化拉流
* @param streamId:String 从传来的信道消息中获取,必选
* @param domId:String <video> 标签的 id,可选
* 如果传了就把视频绑定到对应的 <video> 标签上
* @param pInfo:String 多媒体流附加信息,可选,默认为 'none'
* @return src:String 视频预览地址
*/
var initPullFlow$1 = async function initPullFlow(streamId, domId, mute, pInfo, notAutoPlay, audioOnly) {
defaultApi$1.writeLog("ZEGO:: initPullFlow_start ,streamId :".concat(streamId));
var playChannel;
resetStreamIdRtcPlayerInfo1$1(streamId);
resetStreamIdRtcPlayerInfo$1(streamId);
try {
if (!isFirstHeartBeatReport$1) {
isFirstHeartBeatReport$1 = true;
heartBeatDataReport$1('start');
}
} catch (error) {}
if (streamIdToPreviewId$1[streamId] == undefined) {
defaultApi$1.writeLog("ZEGO:: The streamId queue does not contain this streamId ".concat(uiChnIndexs));
var arr = streamId.split('_');
var _arr = _slicedToArray(arr, 3),
userId = _arr[2];
if (String(userId).toUpperCase() === String(lecturerUid)) {
playChannel = arr.length === 4 ? 0 : 1; // 主流使用0,辅流使用1
} else {
if (uiChnIndexs.length === 0) {
defaultApi$1.writeLog('error', "ZEGO:: all uiChnIndexs are used ".concat(uiChnIndexs));
delete streamIdRtcPlayerInfo$1[streamId];
NOTICE.overMaxConnect({
streamId: streamId,
message: 'reach max connect'
});
return {
videoSrc: '',
playerId: -2
};
}
playChannel = uiChnIndexs.pop();
}
streamIdToPreviewId$1[streamId] = playChannel;
defaultApi$1.writeLog("streamIdIsNoExited ".concat(playChannel, " ").concat(uiChnIndexs));
} else {
playChannel = streamIdToPreviewId$1[streamId];
defaultApi$1.writeLog("ZEGO:: The streamId queue contains this streamId ".concat(playChannel, " ").concat(uiChnIndexs));
await stopPlayStream(streamId);
resetStreamIdRtcPlayerInfo$1(streamId);
} // 判断是否创建或者获取播放通道成功,不成功就删掉重试
if (playChannel == undefined) {
delete streamIdToPreviewId$1[streamId];
defaultApi$1.writeLog('error', 'ZEGO:: uiChnIndex is not exist'); // delete streamIdToBlobUrl[streamId];
return initPullFlow(streamId, domId, mute, pInfo, notAutoPlay, audioOnly);
}
previewIdToStreamId[playChannel] = streamId; //是否拉取声音
activateAudioPlayStream(streamId, !!!mute); //是否拉取画面
activateVideoPlayStream(streamId, !!!audioOnly);
if (!notAutoPlay) {
await playStream(streamId, playChannel, pInfo);
}
var videoSrc = await startLocalOrRemotePreview$1(false, streamId, domId);
return {
videoSrc: videoSrc,
playerId: playChannel
};
};
/**
* @function 恢复拉指定的流
* @param streamId:String 被拉取的流的 id,必选
* @param uiChnIndex:Number 播放通道,可选
* @param pInfo:String 多媒体流附加信息,可选,默认为 'none'
* @return Promise | void
*/
var playStream = function playStream(streamId, uiChnIndex, pInfo) {
if (typeof uiChnIndex === 'undefined') {
uiChnIndex = streamIdToPreviewId$1[streamId];
}
if (typeof pInfo === 'undefined') {
pInfo = 'none';
}
defaultApi$1.writeLog("avsdk ZEGO::PlayStream streamId: ".concat(streamId, " uiChnIndex: ").concat(uiChnIndex));
pullingStore.setData(streamId, {
info: pInfo
});
return callMethod$4('PlayStream', {
pszStreamID: streamId,
uiChnIndex: uiChnIndex,
pInfo: pInfo
});
};
/**
* 判断是否回收通道
* @param {number} id
*/
var isCollectChannel = function isCollectChannel(id) {
return typeof id === 'number' && !uiChnIndexs.includes(id) && id !== 0 && // 主讲主流不回收
id !== 1; // 主讲辅流不回收
};
/**
* @function 停止拉指定的流
* @param streamId:String 被拉取的流的 id,必选
* @param recovery:Boolean 是否回收播放器, 可选
* @return Promise | void
*/
var stopPlayStream = async function stopPlayStream(streamId, recovery) {
var id = streamIdToPreviewId$1[streamId];
delete streamIdRtcPlayerInfo$1[streamId];
if (recovery && isCollectChannel(id)) {
uiChnIndexs.push(id);
defaultApi$1.writeLog("avsdk ZEGO::stopPlayStream streamId: ".concat(streamId, " id: ").concat(id, " uiChnIndexs: ").concat(uiChnIndexs));
delete streamIdToPreviewId$1[streamId]; // delete streamIdToBlobUrl[streamId];
}
pullingStore.delete(streamId);
return callMethod$4('StopPlayStream', {
pszStreamID: streamId
});
};
/**
* @function 停止并回收所有拉流
* @return Promise | void
*/
var stopAllPlayStream = function stopAllPlayStream() {
var toRecoveryArr = [];
for (var streamId in streamIdToPreviewId$1) {
if (streamIdToPreviewId$1.hasOwnProperty(streamId)) {
var id = streamIdToPreviewId$1[streamId];
if (isCollectChannel(id)) {
uiChnIndexs.push(id);
}
pullingStore.delete(streamId);
toRecoveryArr.push(callMethod$4('StopPlayStream', {
pszStreamID: streamId
}));
}
}
defaultApi$1.writeLog("avsdk ZEGO::stopAllPlayStream uiChnIndexs: ".concat(uiChnIndexs));
streamIdToPreviewId$1 = {};
return Promise.all(toRecoveryArr);
};
/**
* @function 切换播放流
* @param streamId:String 需要停止流的 id,必选
* @param toStreamId:String 被拉取的流的 id,必选
* @param toDomId:String <video> 标签的 id,可选
* @return Promise | void
*/
var changePullFlow$1 = async function changePullFlow(streamId, toStreamId, toDomId) {
await stopPlayStream(streamId, true);
return initPullFlow$1(toStreamId, toDomId);
};
/**
* @function 转推,录课
* @param type:String 必选,'start' | 'stop'
* @param seq:Number 可选,默认为 1
* @return Promise | void
*/
var mixStream = function mixStream(type, args, seq) {
if (!args) {
var zego = window.zbyAVSDK_init_params.zego;
var streamId = zego.streamId;
var sid = zego.sid;
var pInputStreamList;
var nInputStreamCount;
if (type === 'start') {
pInputStreamList = [{
szStreamID: streamId,
layout: {
top: 0,
right: zego.previewResolutionWidth,
bottom: zego.previewResolutionHeight,
left: 0
},
uSoundLevelID: 0,
nContentControl: 0
}];
nInputStreamCount = 1;
}
if (type === 'stop') {
pInputStreamList = [];
nInputStreamCount = 0;
}
if (typeof seq === 'undefined') {
seq = 1;
}
return callMethod$4('MixStream', {
config: {
szOutputStream: zego.recordUrl + '/' + sid,
bOutputIsUrl: true,
nOutputFps: zego.previewCaptureFps,
nOutputBitrate: zego.previewCaptureBitrate,
nOutputAudioBitrate: zego.previewCaptureBitrate,
nOutputWidth: zego.previewResolutionWidth,
nOutputHeight: zego.previewResolutionHeight,
nOutputAudioConfig: 1,
pInputStreamList: pInputStreamList,
nInputStreamCount: nInputStreamCount,
pUserData: '',
nLenOfUserData: 0,
nChannels: 0,
nOutputBackgroundColor: 0,
pOutputBackgroundImage: '',
bWithSoundLevel: false
},
seq: seq
});
} else {
return callMethod$4('MixStream', args);
}
};
/**
* @function 是否拉取音频流--通过流id控制
* @param streamId:String 被拉取的流的 id,必选
* @param bActive:Boolean true -> 拉取,false -> 不拉取,必选
* @return Promise | void
*/
var activateAudioPlayStream = function activateAudioPlayStream(streamId, bActive) {
streamIdRtcPlayerInfo1$1[streamId].audio_type = bActive;
return callMethod$4('ActivateAudioPlayStream', {
nChannelIdx: streamIdToPreviewId$1[streamId],
bActive: bActive
});
};
/**
* @function 是否拉取音频流--通过播放器id控制
* @param operation:Boolean,必选,true -> 拉取,false -> 不拉取,必选
* @param playerId:Number,必选,播放器id
* @return Promise | void
*/
var pullAudioFlow$1 = function pullAudioFlow(playerId, operation, streamid) {
defaultApi$1.writeLog("pullAudioFlow -- playerId ".concat(playerId, " operation ").concat(operation, " streamId ").concat(streamid));
if (streamid) {
if (streamIdToPreviewId$1[streamid] == undefined) {
NOTICE.pullAudioFlowError({
streamid: streamid
});
return;
} else {
playerId = streamIdToPreviewId$1[streamid];
defaultApi$1.writeLog("pullAudioFlow-playerId ".concat(playerId));
}
}
var streamId = previewIdToStreamId[playerId];
try {
streamIdRtcPlayerInfo1$1[streamId].audio_type = operation;
defaultApi$1.writeLog("pullAudioFlow ".concat(streamId));
} catch (e) {
defaultApi$1.writeLog("pullAudioFlow ".concat(streamId, " --error ").concat(JSON.stringify(e)), null, 'error');
}
try {
dataReport$2.setPullVoice({
code: +operation,
pull_uid: util.getUidByStreamId(streamId),
pull_streamid: streamId,
playerId: playerId // operator:'client'
});
} catch (e) {}
;
return callMethod$4('ActivateAudioPlayStream', {
bActive: operation,
nChannelIdx: playerId
});
};
/**
* @function 是否拉取画面流
* @param streamId:String 被拉取的流的 id,必选
* @param bActive:Boolean true -> 拉取,false -> 不拉取,必选
* @return Promise | void
*/
var activateVideoPlayStream = function activateVideoPlayStream(streamId, bActive) {
try {
streamIdRtcPlayerInfo1$1[streamId].video_type = bActive;
defaultApi$1.writeLog("activateVideoPlayStream ".concat(streamId));
} catch (e) {
defaultApi$1.writeLog("activateVideoPlayStream ".concat(streamId, " --error ").concat(JSON.stringify(e)), null, 'error');
}
return callMethod$4('ActivateVideoPlayStream', {
nChannelIdx: streamIdToPreviewId$1[streamId],
bActive: bActive
});
};
/**
* @function 开启/关闭麦克风音量回调
* @param open:Boolean true -> 开启,false -> 关闭,必选
* @return void
*/
var openMicVolumeCb$1 = function openMicVolumeCb(open) {// if (open) {
// runMicVolumeCb = true;
// } else {
// runMicVolumeCb = false;
// }
};
/**
* @function 监听设备的音量变化
* @param deviceType:Number 音频设备类型,0 -> 麦克风,1 -> 扬声器,必选
* @param deviceId:String 音频设备 id,必选
* @return Promise | void
*/
var setAudioVolumeNotify = function setAudioVolumeNotify(deviceType, deviceId) {
return callMethod$4('SetAudioVolumeNotify', {
deviceType: deviceType,
deviceId: deviceId
});
};
/**
* @function 关闭监听设备的音量变化
* @param deviceType:Number 音频设备类型,0 -> 麦克风,1 -> 扬声器,必选
* @param deviceId:String 音频设备 id,必选
* @return Promise | void
*/
var stopAudioVolumeNotify = function stopAudioVolumeNotify(deviceType, deviceId) {
return callMethod$4('StopAudioVolumeNotify', {
deviceType: deviceType,
deviceId: deviceId
});
};
/**
* @function 启动 soundLevel 监听
* StartSoundLevelMonitor 后一定要 StopSoundLevelMonitor
* @return Promise | void
*/
var startSoundLevelMonitor = function startSoundLevelMonitor() {
return callMethod$4('StartSoundLevelMonitor', {});
};
/**
* @function 停止 soundLevel 监听
* @return Promise | void
*/
var stopSoundLevelMonitor = function stopSoundLevelMonitor() {
return callMethod$4('StopSoundLevelMonitor', {});
};
/**
* @function 设置 soundLevel 的监控周期
* @param timeInMS:Number 时间周期,单位为毫秒,取值范围 [100, 3000],必选
* @return Promise | void
*/
var setSoundLevelMonitorCycle = function setSoundLevelMonitorCycle(timeInMS) {
return callMethod$4('SetSoundLevelMonitorCycle', {
timeInMS: timeInMS
});
};
/**
* @function 单路录制
* @param type:String start/stop,必选
* @param szOutputStream:转推地址(支持rtmp/avertp),必选
* @param szStreamID:推流ID,必选
* @return Promise | void
*/
/*export const singleRecord = async (type, szOutputStream, szStreamID, seq = 1) => {
defaultApi.writeLog(`avsdk ZEGO::singleRecord szStreamID: ${szStreamID} szOutputStream: ${szOutputStream} type: ${type}`);
const zego = window.zbyAVSDK_init_params.zego;
let pInputStreamList = [];
let nInputStreamCount = 0;
if (type === 'start') {
pInputStreamList = [{
szStreamID,
layout: {
top: 0,
right: zego.previewResolutionWidth,
bottom: zego.previewResolutionHeight,
left: 0
},
uSoundLevelID: 0,
nContentControl: 0
}];
nInputStreamCount = 1;
}
return callMethod('MixStream', {
config: {
szOutputStream,
bOutputIsUrl: true,
nOutputFps: zego.previewCaptureFps,
nOutputBitrate: zego.previewCaptureBitrate,
nOutputAudioBitrate: zego.previewCaptureBitrate,
nOutputWidth: zego.previewResolutionWidth,
nOutputHeight: zego.previewResolutionHeight,
nOutputAudioConfig: 1,
pInputStreamList,
nInputStreamCount,
pUserData: '',
nLenOfUserData: 0,
nChannels: 0,
nOutputBackgroundColor: 0,
pOutputBackgroundImage: '',
bWithSoundLevel: false
},
seq
});
};
*/
var hasStream$1 = function hasStream(streamId) {
return Object.keys(streamIdToPreviewId$1).includes(streamId);
};
/**
* @function 获取当前视频流的通道
* @param streamId 流 id
* @return channelIndex
*/
var getChannelIndex = function getChannelIndex(streamId) {
defaultApi$1.writeLog("ZEGO : getChannelIndex streamId: ".concat(streamId, " ").concat(JSON.stringify(streamIdToPreviewId$1)));
return streamIdToPreviewId$1[streamId];
};
/**
* @function 获取当前视频流所有的通道
* @param streamId 流 id
* @return channelIndex
*/
var getAllChannelIndex = function getAllChannelIndex() {
defaultApi$1.writeLog("ZEGO : getAllChannelIndex ".concat(JSON.stringify(streamIdToPreviewId$1)));
return streamIdToPreviewId$1;
};
/**
* @function 录制转推对外接口
* @param type:String start/stop,必选
* @param szOutputStream:转推地址(支持rtmp/avertp),必选
* @param szStreamID:推流ID,必选
* @return Promise | void
*/
var singleRecord = async function singleRecord(type, szOutputStream, szStreamID) {
defaultApi$1.writeLog("avsdk ZEGO::recordPublishTarget szStreamID: ".concat(szStreamID, " szOutputStream: ").concat(szOutputStream, " type: ").concat(type));
var zego = window.zbyAVSDK_init_params.zego;
if (!szOutputStream) {
var sid = zego.sid; // 拼接转推地址
szOutputStream = zego.recordUrl + '/' + sid;
}
if (!szStreamID) {
szStreamID = window.zbyAVSDK_init_params.zego.streamId;
}
if (type === 'start') {
return addPublishTarget(szOutputStream, szStreamID);
}
if (type === 'stop') {
return deletePublishTarget(szOutputStream, szStreamID);
}
};
/**
* @function 开始转推
* @param szTarget:转推地址(支持rtmp/avertp),必选
* @param szStreamID:推流ID,必选
* @return Promise | void
*/
var addPublishTarget = async function addPublishTarget(szTarget, szStreamID) {
defaultApi$1.writeLog("avsdk ZEGO::addPublishTarget szStreamID: ".concat(szStreamID, " szTarget: ").concat(szTarget));
var res = await callMethod$4('AddPublishTarget', {
strTarget: szTarget,
pszStreamID: szStreamID
});
try {
dataReport$2.turnPushResult({
errorcode: res == 0 ? 0 : 1,
case: 'turn push',
streamid: szStreamID
});
} catch (e) {}
;
return res;
};
/**
* @function 结束转推
* @param szTarget:转推地址(支持rtmp/avertp),必选
* @param szStreamID:推流ID,必选
* @param seqNum
* @return Promise | void
*/
var deletePublishTarget = async function deletePublishTarget(szTarget, szStreamID) {
defaultApi$1.writeLog("avsdk ZEGO::deletePublishTarget szStreamID: ".concat(szStreamID, " szTarget: ").concat(szTarget));
return callMethod$4('DeletePublishTarget', {
strTarget: szTarget,
pszStreamID: szStreamID
});
};
/**
* @function 开始本地视频录制
* @param enableRecord 开始/结束
* @param storagePath 录制路径
* @return Promise | void
*/
var localRecordVideo$1 = async function localRecordVideo(enableRecord, storagePath) {
defaultApi$1.writeLog("avsdk ZEGO::localRecordVideo enableRecord: ".concat(enableRecord, ", storagePath: ").concat(storagePath));
if (enableRecord) {
return callMethod$4('StartRecord', {
channelIndex: 0,
recordType: 3,
enableStatusCallback: true,
interval: 3000,
recordFormat: 2,
isFragment: false,
storagePath: storagePath
});
} else {
return callMethod$4('StopRecord', {
channelIndex: 0
});
}
};
/**
* @function 本地音频录制
* @param enableRecord 开始/结束
* @param storagePath 录制路径
* @return Promise | void
*/
var localRecordAudio$1 = async function localRecordAudio(enableRecord, storagePath) {
defaultApi$1.writeLog("avsdk ZEGO::localRecordAudio enableRecord: ".concat(enableRecord, ", storagePath: ").concat(storagePath));
return callMethod$4('EnableSelectedAudioRecord', {
uMask: 1,
nSampleRate: 16000,
nChannels: 1,
enableRecord: enableRecord,
storagePath: storagePath
});
};
var setRecordPath = async function setRecordPath() {
var idx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
var path = arguments.length > 1 ? arguments[1] : undefined;
defaultApi$1.writeLog("avsdk ZEGO::setRecordPath idx: ".concat(idx, ", path: ").concat(path));
return callMethod$4('SetRecordPath', {
idx: idx,
path: path
});
};
var getRecordPath = async function getRecordPath() {
var idx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
defaultApi$1.writeLog("avsdk ZEGO::getRecordPath idx: ".concat(idx));
return callMethod$4('GetRecordPath', {
idx: idx
});
};
var getDesktopPath = function getDesktopPath() {
defaultApi$1.writeLog('avsdk ZEGO::getDesktopPath');
return callMethod$4('GetDesktopPath', {});
};
/**
* @function 本地录制
* @param {string | undefined} fileName
* @param {number} fileType 1:flv 2:mp4
* @param {number} idx 0:主流 1:辅流 2:RTMP流
* @returns {Promise<any>}
*/
var startCaptureRecord = async function startCaptureRecord(fileName, fileType, idx, path) {
defaultApi$1.writeLog("avsdk ZEGO::startCaptureRecord fileName: ".concat(fileName, ", fileType: ").concat(fileType, ", idx: ").concat(idx, ", path: ").concat(path));
await setRecordPath(idx, path);
await startRecord(fileName, fileType, idx);
await startCapture(idx);
};
var stopCaptureRecord = async function stopCaptureRecord(idx) {
defaultApi$1.writeLog("avsdk ZEGO::stopCaptureRecord idx: ".concat(idx));
await stopCapture(idx);
await stopRecord(idx);
};
/**
* @function 本地录制
* @param {string | undefined} fileName
* @param {number} fileType 1:flv 2:mp4
* @param {number} idx 0:主流 1:辅流 2:RTMP流
* @returns {Promise<any>}
*/
var startRecord = async function startRecord(fileName, fileType, idx) {
defaultApi$1.writeLog("avsdk ZEGO::startRecord fileName: ".concat(fileName, ", fileType: ").concat(fileType, ", idx: ").concat(idx));
if (idx === 1 && !screenStreamId) {
defaultApi$1.writeLog('avsdk ZEGO::startRecord screenStreamId is null', null, 'error');
return;
}
if (!fileName) {
var fileNameMap = [localStreamId, screenStreamId, 'rtmp'];
var base = fileNameMap[idx] || "record-".concat(idx);
fileName = "".concat(base, "-").concat(util.currentTimeString().replace(/:/g, '-'));
}
dataReport$2.startRecord({
fileName: fileName,
fileType: fileType,
idx: idx
});
return callMethod$4('StartRecord2', {
idx: idx,
recordType: 3,
// 1:音频 2:视频 3:音视频
fileName: fileName,
recordFormat: fileType
});
};
/**
* 结束音视频录制 channelIndex(number) 录制通道 0主推流通道/ 1辅助推流通道/ 2辅助推流通道
* @param {number} idx 0 | 1 | 2
* @returns
*/
var stopRecord = async function stopRecord(idx) {
defaultApi$1.writeLog("avsdk ZEGO::stopRecord idx: ".concat(idx));
dataReport$2.stopRecord({
idx: idx
});
return callMethod$4('StopRecord', {
idx: idx
});
};
/**
* 开启外部音频采集(通知sdk)推流前,调用此接口,publish_channel,number类型,传2代表第三路流
* @param {number} idx 0 | 1 | 2
* @returns
*/
var startCapture = async function startCapture(idx) {
defaultApi$1.writeLog("avsdk ZEGO::startCapture idx: ".concat(idx));
return callMethod$4('StartCapture', {
publish_channel: idx
});
};
/**
* 结束外部音频采集(通知sdk)
* @param {number} idx 0 | 1 | 2
* @returns
*/
var stopCapture = async function stopCapture(idx) {
defaultApi$1.writeLog("avsdk ZEGO::stopCapture idx: ".concat(idx));
return callMethod$4('StopCapture', {
publish_channel: idx
});
};
/**
* @function 设置外部采集设备模块
* @param bUseVideoCapture 是否开启外部采集设备模块
* @attention 必须在 InitSDK 前调用,置空必须在UninitSDK之后
* @return Promise | void
*/
var setVideoCaptureFactory = function setVideoCaptureFactory() {
var bUseVideoCapture = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var streamChannel = arguments.length > 1 ? arguments[1] : undefined;
defaultApi$1.writeLog('info', 'avsdk ZEGO::setVideoCaptureFactory');
return callMethod$4('SetVideoCaptureFactory', {
bUseVideoCapture: bUseVideoCapture,
streamChannel: streamChannel
});
}; //设置音频数据来源
var setAudioAuxSource = function setAudioAuxSource(source) {
defaultApi$1.writeLog('info', 'avsdk ZEGO::setAudioAuxSource');
return callMethod$4('SetAudioAuxSource', {
source: source
});
};
var setVideoSource = function setVideoSource(idx, srcType) {
return callMethod$4('SetVideoSource', {
idx: idx,
srcType: srcType
});
}; //RTC同屏 辅助通道音频类型 0:静音 / 1:麦克风 / 2:拉流的声音 / 3:1+2 / 4:麦克风+扬声器 / 5:扬声器(不含拉流)
var setAUXAudioType = function setAUXAudioType(type) {
defaultApi$1.writeLog('info', 'avsdk ZEGO::SetAUXAudioType');
return callMethod$4('SetAUXAudioType', {
type: type
});
}; //录制通道音频类型 0:静音 / 1:麦克风 / 2:拉流的声音 / 4:1+2 / 8:麦克风+扬声器(不含拉流)
var setThirdAudioType = function setThirdAudioType(type) {
defaultApi$1.writeLog('info', 'avsdk ZEGO::SetThirdAudioType');
return callMethod$4('SetThirdAudioType', {
type: type
});
}; //开启音频外部采集 参数:channel 参数类型:int 通道(传1使用辅通道)
var startAudioExCapture = function startAudioExCapture(channel) {
defaultApi$1.writeLog('info', 'avsdk ZEGO::startAudioExCapture');
return callMethod$4('StartAudioExCapture', {
channel: channel
});
}; // 开关麦克风录制数据回调
// enable: 是否开启回调
// sampleRate: 采样率,默认 48000
// channels: 声道数,默认 1
var enableMicRecordDataCallback = function enableMicRecordDataCallback() {
var enable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var sampleRate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 48000;
var channels = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
if (typeof enable !== 'boolean') {
defaultApi$1.writeLog('avsdk ZEGO::enableMicRecordDataCallback enable type error', null, 'error');
return Promise.reject(new Error('enable should be boolean'));
}
if (!Number.isInteger(sampleRate) || sampleRate <= 0) {
defaultApi$1.writeLog('avsdk ZEGO::enableMicRecordDataCallback sampleRate type error', null, 'error');
return Promise.reject(new Error('sampleRate should be positive integer'));
}
if (!Number.isInteger(channels) || channels <= 0) {
defaultApi$1.writeLog('avsdk ZEGO::enableMicRecordDataCallback channels type error', null, 'error');
return Promise.reject(new Error('channels should be positive integer'));
}
defaultApi$1.writeLog('info', 'avsdk ZEGO::enableMicRecordDataCallback');
return callMethod$4('EnableMicRecordDataCallback', {
enable: enable,
sampleRate: sampleRate,
channels: channels
});
};
/**
* 第四路流类型设置
* @param {number} type 6: 视频:主流 音频:麦克风+扬声器 7: 外部音频源,外部视频源,数据来源player
* @returns
*/
var setFourthStreamType = function setFourthStreamType(type) {
return callMethod$4('SetFourthStreamType', {
type: type
});
}; //加载截屏插件
var LoadCollectionOutputEntry2 = function LoadCollectionOutputEntry2() {
defaultApi$1.writeLog('info', 'avsdk ZEGO::LoadCollectionOutputEntry2');
return callMethod$4('LoadCollectionOutputEntry2', {});
}; //开启同屏
var startMultiScreen = async function startMultiScreen() {
defaultApi$1.writeLog('info', 'avsdk ZEGO::startMultiScreen'); // await setVideoCaptureFactory(true,1);
await LoadCollectionOutputEntry2();
};
/**
* @function 设置推流时是否发送视频数据
* @param mute true不发送(仅预览),false 发送
* @param idx 推流通道索引 0表示主推流通道,默认;1表示第二路流推流通道,无法推出声音
* @return Promise | void (0代表设置成功,否则设置失败)
*/
var muteVideoPublish = function muteVideoPublish() {
var mute = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
var idx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
return callMethod$4('MuteVideoPublish', {
mute: mute,
idx: idx
});
};
/**
* @function 开始连麦
* @param mode:number 采集器默认, 默认0=站立 1=坐立
* @return Promise | void
*/
var teacherStartLinkMic$1 = async function teacherStartLinkMic() {
var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
if (mode === 0) {
await muteVideoPublish(true, 0);
await setMicrophoneDevice$1({});
await enableMic(true);
} else {
//开始连麦后,需要打开摄像头(开启外部采集器后,不会争抢摄像头),否则学生拉到的小班流会没有画面
await enableCamera(true);
await enableMic(true);
}
};
/**
* @function 结束连麦
* @param mode:number 采集器默认, 默认0=站立 1=坐立
* @return Promise | void
*/
var teacherStopLinkMic$1 = async function teacherStopLinkMic() {// if (mode === 0) {
// await muteVideoPublish(false,0);
// } else {
// await setVideoCaptureFactory(false);
// }
var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
};
/**
* @function 设置镜像状态(预览)
* @param { boolean } type true=开启 false=关闭
* @return: Promise
*/
var setMirrorStatus$1 = function setMirrorStatus(isMirror) {
// return callMethod('SetPreViewMirror', { isMirror });
return setVideoMirrorMode(isMirror >> 0);
};
/**
* @function 设置拉流镜像状态
* @param { boolean } type true=开启 false=关闭
* @return: Promise
*/
var setPlayViewMirror = function setPlayViewMirror(isMirror) {
return callMethod$4('SetPlayViewMirror', {
isMirror: isMirror
});
};
/**
* @function 设置推流镜像状态
* @param { boolean } id 采集器Id
* @param { 0 | 1 | 2 | 3 } mode 0: 预览启用镜像,推流不启用镜像; 1: 预览启用镜像,推流启用镜像; 2: 预览不启用镜像,推流不启用镜像; 3: 预览不启用镜像,推流启用镜像
* @return: Promise
*/
var setVideoMirrorMode = function setVideoMirrorMode(mode) {
var idx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var realId = mode == 0 ? 2 : 1;
defaultApi$1.writeLog("ZEGO: setVideoMirrorMode, mode: ".concat(mode, ", idx:").concat(idx, ", realId:").concat(realId));
return callMethod$4('SetVideoMirrorMode', {
idx: idx,
mode: realId
});
}; //美颜相关
/**
* @deprecated
* @function 开启美颜
* @return: Promise
*/
var startSenseMe$1 = async function startSenseMe() {
return callMethod$4('StartSenseMe', {});
};
/**
* @deprecated
* @function 设置美颜参数
* * @param { number } type //美颜类型,1、红润强度,3、磨皮强度,4、美白强度,5、大眼,6、瘦脸,7、小脸,8、对比度强度,9、饱和度强度
* * @param { number } value //美颜数值,有效值范围0~100
* @return: Promise
*/
var setBeautifyParam$1 = async function setBeautifyParam(type, value) {
return callMethod$4('SetBeautifyParam', {
type: type,
value: value
});
};
/**
* @deprecated
* @function 关闭美颜
* @return: Promise
*/
var endSenseMe$1 = async function endSenseMe() {
return callMethod$4('EndSenseMe', {});
};
var enableBeautify = function enableBeautify(enable) {
var streamId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : localStreamId;
var idx = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
defaultApi$1.writeLog("avsdk ZEGO::enableBeautify enable: ".concat(enable, " idx: ").concat(idx));
return callMethod$4('EnableBeautify', {
enable: enable,
streamId: streamId,
idx: idx
});
};
/**
*
* @param {number} mode 美颜类型 101:美白、103:磨皮、201:瘦脸、605:背景虚化、901:自定义背景、202:大眼、603:锐化
* @param {number} subMode 美白模式【0,2,3】,当前选项:0,
磨皮:【1,2】,当前选项:1
瘦脸:【0】,
背景虚化:【0,1】、当前选项:1
自定义背景:【0】、
大眼:【0】
锐化:【0】
* @param {number} value 美白: 默认30 ,0表示不美白;
磨皮:默认 74, 0表示不磨皮;
瘦脸:默认 11, 0表示不瘦脸
背景虚化:默认值 0, 0表示不虚化
自定义背景:默认值0;非0表示设置背景(当前设计不支持用户自定义背景,)
大眼:默认值13,0表示不做大眼
锐化:默认值0,0表示不锐化
* @param {string} streamId 流id
* @param {string | undefined} image 自定义背景图片地址
* @returns
*/
var setBeautifyParam2 = function setBeautifyParam2(mode, subMode, value) {
var streamId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : localStreamId;
var idx = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
var image = arguments.length > 5 ? arguments[5] : undefined;
defaultApi$1.writeLog("avsdk ZEGO::setBeautifyParam param: ".concat(JSON.stringify({
mode: mode,
subMode: subMode,
value: value,
streamId: streamId,
idx: idx,
image: image
})));
return callMethod$4('SetBeautifyParam', {
mode: mode,
subMode: subMode,
value: value,
streamId: streamId,
idx: idx,
image: image
});
};
/**
*
* @param {'UseLoopbackDefault' | 'UseDefaultDevice'} key
* @param {'enable'} value
* @returns
*/
var setEngineConfig = function setEngineConfig(key, value) {
defaultApi$1.writeLog("avsdk ZEGO::setEngineConfig key: ".concat(key, ", value: ").concat(value));
return callMethod$4('SetEngineConfig', {
key: key,
value: value
});
};
/**
* @function zego40路拉流混音接口
* * @param { number } mixMode //混流模式 0=关闭混流 1=开启混流
* * @param { array } streamIdArr //表示要突出声音的channel
* * @param { number } mixNum //表示要突出channel的个数, 需要与参数'channels'的数组大小相同
* @return: Promise
*/
var setAudioMixMode = async function setAudioMixMode(mixMode, streamIdArr) {
var channelsArr = [];
if (streamIdArr.length > 0) {
streamIdArr.forEach(function (item) {
channelsArr.push(getChannelIndex(item));
});
}
return callMethod$4('SetAudioMixMode', {
mixMode: mixMode,
channels: channelsArr,
num: channelsArr.length
});
}; // 获取TalMedia.dll版本号
var getSDKVersion$1 = async function getSDKVersion() {
return callMethod$4('GetSDKVersion', {}).then(function (e) {
return JSON.parse(e.msg).ret;
});
};
/**
* @function 获取摄像头所支持的分辨率
* @param deviceId:String 设备id
* @return Promise | void
*/
var getCameraSupportedRes$1 = function getCameraSupportedRes(deviceId) {
return callMethod$4('GetCameraSupportedResolution', {
deviceId: deviceId
});
};
/**
* @function 发送SEI
* @param inData: String 需要传输的音视频次要信息数据,外部输入。
* @param dataLen: Number 数据长度,不能超过 4096 bytes
* @param bPacket: Bool 是否采用外部打包好的包头,填写 false。
* @param idx:Number 推流通道 index
* 调用频率不能超过帧率,假设推流采用默认帧率15 fps,即调用频率不能超过 1000/15=66.7 ms/次。
*/
var sendMediaSideInfo$1 = function sendMediaSideInfo(info) {
return callMethod$4('SendMediaSideInfo', {
inData: info,
dataLen: info.length,
bPacket: false,
idx: 0
});
}; //判断当前课型是否为zego推拉RTMP小组课
var isZegoGroupClass = function isZegoGroupClass() {
defaultApi$1.writeLog("test: isZegoGroupClass--currentClassMode--currentGroupSdkType', ".concat(currentClassMode, ", ").concat(currentGroupSdkType));
return currentClassMode == 0 && currentGroupSdkType == 'zego'
/*rtmp流为zego*/
;
}; //判断当前课型是否为zego推拉RTMP组合小班课
var isZegoCombinationClass = function isZegoCombinationClass() {
console.log('test: isZegoCombinationClass--currentClassMode--currentGroupSdkType', currentClassMode, currentGroupSdkType);
return currentClassMode == 2 && currentGroupSdkType == 'zego'
/*rtmp流为zego*/
;
}; //判断推流类型是否为音频流
var isStreamAudioMuted = function isStreamAudioMuted() {
return callMethod$4('IsStreamAudioMuted', {});
}; //判断推流类型是否为视频流
var isStreamVideoMuted = function isStreamVideoMuted() {
return callMethod$4('IsStreamVideoMuted', {});
};
/**
* 获取麦克风响度
* @returns {Promise<number>}
*/
var getMicrophoneLoudness = function getMicrophoneLoudness() {
return callMethod$4('GetMicrophonLoudness', {});
};
/**
* 获取默认扬声器id
* @returns {Promise<string | null>}
*/
var getCurrentSpeakerId = function getCurrentSpeakerId() {
return callMethod$4('GetCurrentSpeakerId', {}).then(function (e) {
if (e.code === 0) {
return JSON.parse(e.msg).speakerCurId;
} else {
return null;
}
});
};
/**
* 获取默认麦克风id
* @returns {Promise<string | null>}
*/
var getCurrentMicrophoneId = function getCurrentMicrophoneId() {
return callMethod$4('GetCurrentMicrophoneId', {}).then(function (e) {
if (e.code === 0) {
return JSON.parse(e.msg).microphoneCurId;
} else {
return null;
}
});
};
/**
* 获取默认摄像头id
* @returns {Promise<string | null>}
*/
var getCurrentCameraId = function getCurrentCameraId() {
return callMethod$4('GetCurrentCameraId', {}).then(function (e) {
if (e.code === 0) {
return JSON.parse(e.msg).cameraCurId;
} else {
return null;
}
});
};
var takeLocalSnapShot = function takeLocalSnapShot() {
var streamId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : localStreamId;
var idx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
return callMethod$4('takeLocalSnapShot', {
streamId: streamId,
idx: idx
});
};
var takeRemoteSnapShot = function takeRemoteSnapShot(streamId) {
return callMethod$4('takeRemoteSnapShot', {
streamId: streamId
});
};
var getStreamType = async function getStreamType() {
try {
var pushAudio = JSON.parse((await isStreamAudioMuted()).msg).ret;
var pushVideo = JSON.parse((await isStreamVideoMuted()).msg).ret;
var stream_type = 'both';
if (pushAudio && !pushVideo) {
stream_type = 'video';
}
if (!pushAudio && pushVideo) {
stream_type = 'audio';
}
if (pushAudio && pushVideo) {
stream_type = 'none';
}
return stream_type;
} catch (e) {
var _stream_type = 'none';
return _stream_type;
}
};
var heartBeatRealKeys$1 = ['video_fps', 'video_bitrate', 'audio_fps', 'audio_bitrate'];
var _heartBeatDataReport$1 = function _heartBeatDataReport() {
var pullInfo = [];
Object.keys(streamIdRtcPlayerInfo$1).forEach(function (streamid) {
heartBeatRealKeys$1.forEach(function (realKey) {
if (!streamIdRtcPlayerInfo$1[streamid].hasOwnProperty(realKey)) {
streamIdRtcPlayerInfo$1[streamid][realKey] = [];
}
}); //获取拉流类型,后期可写为函数提出去
if (streamIdRtcPlayerInfo1$1[streamid].audio_type && streamIdRtcPlayerInfo1$1[streamid].video_type) {
streamIdRtcPlayerInfo1$1[streamid].stream_type = 'both';
} else if (!streamIdRtcPlayerInfo1$1[streamid].audio_type && streamIdRtcPlayerInfo1$1[streamid].video_type) {
streamIdRtcPlayerInfo1$1[streamid].stream_type = 'video';
} else if (streamIdRtcPlayerInfo1$1[streamid].audio_type && !streamIdRtcPlayerInfo1$1[streamid].video_type) {
streamIdRtcPlayerInfo1$1[streamid].stream_type = 'audio';
} else {
streamIdRtcPlayerInfo1$1[streamid].stream_type = 'none';
}
pullInfo.push(_objectSpread({
streamid: streamid
}, streamIdRtcPlayerInfo$1[streamid], {
pull_type: streamIdRtcPlayerInfo1$1[streamid].stream_type,
volume: streamIdRtcPlayerInfo$1[streamid].volume.slice(0, streamIdRtcPlayerInfo$1[streamid].volume.length - 1)
}));
resetStreamIdRtcPlayerInfo$1(streamid);
});
if (isFirstHeartBeatReport$1) {
try {
//获取推流类型,后期可写为函数提出去
if (zbysdk$1.deviceStatus.camera && zbysdk$1.deviceStatus.microphone) {
zbysdk$1.deviceStatus.stream_type = 'both';
} else if (!zbysdk$1.deviceStatus.camera && zbysdk$1.deviceStatus.microphone) {
zbysdk$1.deviceStatus.stream_type = 'audio';
} else if (zbysdk$1.deviceStatus.camera && !zbysdk$1.deviceStatus.microphone) {
zbysdk$1.deviceStatus.stream_type = 'video';
} else {
zbysdk$1.deviceStatus.stream_type = 'none';
}
;
defaultApi$1.writeLog("push_type_zego,camera: ".concat(zbysdk$1.deviceStatus.camera, ",microphone: ").concat(zbysdk$1.deviceStatus.microphone, ",type: ").concat(zbysdk$1.deviceStatus.stream_type, ",a_fps: ").concat(dataZegoCapture.afps, ", a_bit: ").concat(dataZegoCapture.akbps, ", v_fps: ").concat(dataZegoCapture.fps, ", v_bit: ").concat(dataZegoCapture.kbps));
dataReport$2.heartbeat(_objectSpread({}, _objectSpread({}, heartBeatDataReportObj$1, {
push_type: zbysdk$1.deviceStatus.stream_type,
volume: heartBeatDataReportObj$1.volume.slice(0, heartBeatDataReportObj$1.volume.length - 1)
}), {
pull_info: pullInfo
}));
} catch (e) {
console.log(e);
}
}
resetHeartBeatDataReportObj$1();
};
var pointer = 0;
var runHeartBeatCalc = function runHeartBeatCalc() {
Object.keys(streamIdToPreviewId$1).forEach(function (streamId) {
var data = statsStore.getData(streamId) || {};
heartBeatDataReportCalc$1('OnPlayQulityUpdate', data, streamId);
});
var data = statsStore.getData(localStreamId) || {};
heartBeatDataReportCalc$1('OnPublishQualityUpdate', data, localStreamId);
++pointer;
if (pointer === heartBeatItemCount) {
pointer = 0;
_heartBeatDataReport$1();
}
};
var heartBeatDataReport$1 = function heartBeatDataReport(type) {
try {
if (type === 'start' && !heartBeatDataReportTimer$1) {
runHeartBeatCalc();
heartBeatDataReportTimer$1 = setInterval(function () {
runHeartBeatCalc();
}, 2 * 1000);
}
if (type === 'stop') {
statsStore.clear();
clearInterval(heartBeatDataReportTimer$1);
heartBeatDataReportTimer$1 = null;
}
} catch (error) {
console.error(error);
}
};
var heartBeatDataReportCalc$1 = function heartBeatDataReportCalc(name, _d, streamid) {
var ctime = Math.round((new Date().getTime() + dataReport$2.timestamp) / 1000); // 拉流
var pullKeys = ['fps', 'kbps', 'afps', 'akbps'];
if (name === 'OnPlayQulityUpdate') {
if (streamIdRtcPlayerInfo$1 && streamIdRtcPlayerInfo$1.hasOwnProperty(streamid)) {
var isReport = true; // streamIdRtcPlayerInfo[streamid].count++;
heartBeatRealKeys$1.forEach(function (realKey, index) {
if (_d.hasOwnProperty(pullKeys[index])) {
if (streamIdRtcPlayerInfo$1[streamid][realKey] === undefined) {
streamIdRtcPlayerInfo$1[streamid][realKey] = [];
isReport = false;
} // streamIdRtcPlayerInfo[streamid][realKey].push(parseFloat(parseInt(_d[pullKeys[index]])));
}
});
if (isReport) {
var audio_fps_zego_pull = 0;
var audio_bitrate_zego_pull = 0;
var video_fps_zego_pull = 0;
var video_bitrate_zego_pull = 0;
var pull_type = 'none';
if (streamIdRtcPlayerInfo1$1[streamid].audio_type && streamIdRtcPlayerInfo1$1[streamid].video_type) {
audio_fps_zego_pull = parseFloat(parseInt(_d.afps || 0));
audio_bitrate_zego_pull = parseFloat(parseInt(_d.akbps || 0));
video_fps_zego_pull = parseFloat(parseInt(_d.fps || 0));
video_bitrate_zego_pull = parseFloat(parseInt(_d.kbps || 0));
pull_type = 'both';
} else if (!streamIdRtcPlayerInfo1$1[streamid].audio_type && streamIdRtcPlayerInfo1$1[streamid].video_type) {
video_fps_zego_pull = parseFloat(parseInt(_d.fps || 0));
video_bitrate_zego_pull = parseFloat(parseInt(_d.kbps || 0));
pull_type = 'video';
} else if (streamIdRtcPlayerInfo1$1[streamid].audio_type && !streamIdRtcPlayerInfo1$1[streamid].video_type) {
audio_fps_zego_pull = parseFloat(parseInt(_d.afps || 0));
audio_bitrate_zego_pull = parseFloat(parseInt(_d.akbps || 0));
pull_type = 'audio';
}
streamIdRtcPlayerInfo$1[streamid].audio_fps[pointer] = audio_fps_zego_pull;
streamIdRtcPlayerInfo$1[streamid].audio_bitrate[pointer] = audio_bitrate_zego_pull;
streamIdRtcPlayerInfo$1[streamid].video_fps[pointer] = video_fps_zego_pull;
streamIdRtcPlayerInfo$1[streamid].video_bitrate[pointer] = video_bitrate_zego_pull;
streamIdRtcPlayerInfo$1[streamid].ctime[pointer] = ctime;
streamIdRtcPlayerInfo$1[streamid].avtimestampdiff[pointer] = _d.avTimestampDiff || 0;
streamIdRtcPlayerInfo$1[streamid].pull_loss[pointer] = _d.pktLostRate || 0;
streamIdRtcPlayerInfo$1[streamid].pull_delay[pointer] = _d.rtt || 0;
streamIdRtcPlayerInfo$1[streamid].pull_type_ex[pointer] = pull_type;
}
}
} // 推流
var pushKeys = ['fps', 'kbps', 'afps', 'akbps'];
if (name === 'OnPublishQualityUpdate') {
// heartBeatDataReportObj.count++;
// heartBeatRealKeys.forEach((realKey, index) => {
// if (heartBeatDataReportObj.hasOwnProperty(realKey) && _d.hasOwnProperty(pushKeys[index])) {
// heartBeatDataReportObj[realKey].push(parseFloat(parseInt(_d[pushKeys[index]])));
// }
// });
var audio_fps_zego_push = 0;
var audio_bitrate_zego_push = 0;
var video_fps_zego_push = 0;
var video_bitrate_zego_push = 0;
var push_type = 'none';
dataZegoCapture = _d;
if (userAndDeviceStatusInfo.isPushingFlow) {
if (zbysdk$1.deviceStatus.camera && zbysdk$1.deviceStatus.microphone) {
audio_fps_zego_push = parseFloat(parseInt(_d.afps || 0));
audio_bitrate_zego_push = parseFloat(parseInt(_d.akbps || 0));
video_fps_zego_push = parseFloat(parseInt(_d.fps || 0));
video_bitrate_zego_push = parseFloat(parseInt(_d.kbps || 0));
push_type = 'both';
} else if (!zbysdk$1.deviceStatus.camera && zbysdk$1.deviceStatus.microphone) {
audio_fps_zego_push = parseFloat(parseInt(_d.afps || 0));
audio_bitrate_zego_push = parseFloat(parseInt(_d.akbps || 0));
push_type = 'audio';
} else if (zbysdk$1.deviceStatus.camera && !zbysdk$1.deviceStatus.microphone) {
video_fps_zego_push = parseFloat(parseInt(_d.fps || 0));
video_bitrate_zego_push = parseFloat(parseInt(_d.kbps || 0));
push_type = 'video';
}
}
heartBeatDataReportObj$1.audio_fps[pointer] = audio_fps_zego_push;
heartBeatDataReportObj$1.audio_bitrate[pointer] = audio_bitrate_zego_push;
heartBeatDataReportObj$1.video_fps[pointer] = video_fps_zego_push;
heartBeatDataReportObj$1.video_bitrate[pointer] = video_bitrate_zego_push;
heartBeatDataReportObj$1.push_loss[pointer] = _d.pktLostRate || 0;
heartBeatDataReportObj$1.push_delay[pointer] = _d.rtt || 0;
heartBeatDataReportObj$1.push_type_ex[pointer] = push_type;
heartBeatDataReportObj$1.type_backend[pointer] = getBackgroundStatus();
heartBeatDataReportObj$1.ctime[pointer] = ctime;
}
}; //推流字段
var resetHeartBeatDataReportObj$1 = function resetHeartBeatDataReportObj() {
heartBeatDataReportObj$1 = {
ctime: new Array(heartBeatItemCount).fill(0),
push_type: 'none',
video_fps: new Array(heartBeatItemCount).fill(0),
video_bitrate: new Array(heartBeatItemCount).fill(0),
audio_fps: new Array(heartBeatItemCount).fill(0),
audio_bitrate: new Array(heartBeatItemCount).fill(0),
push_loss: new Array(heartBeatItemCount).fill(0),
push_delay: new Array(heartBeatItemCount).fill(0),
push_type_ex: new Array(heartBeatItemCount).fill('none'),
type_backend: new Array(heartBeatItemCount).fill(0),
volume: ''
};
}; //记录拉流类型,用作数据上报
var resetStreamIdRtcPlayerInfo1$1 = function resetStreamIdRtcPlayerInfo1(streamId) {
streamIdRtcPlayerInfo1$1[streamId] = {
audio_type: false,
video_type: false,
stream_type: 'none'
};
};
resetHeartBeatDataReportObj$1(); //拉流字段
var resetStreamIdRtcPlayerInfo$1 = function resetStreamIdRtcPlayerInfo(streamId) {
streamIdRtcPlayerInfo$1[streamId] = {
pull_uid: util.getUidByStreamId(streamId),
streamid: streamId,
ctime: new Array(heartBeatItemCount).fill(0),
pull_type: streamIdRtcPlayerInfo1$1[streamId].stream_type,
volume: '',
video_fps: new Array(heartBeatItemCount).fill(0),
video_bitrate: new Array(heartBeatItemCount).fill(0),
audio_fps: new Array(heartBeatItemCount).fill(0),
audio_bitrate: new Array(heartBeatItemCount).fill(0),
pull_loss: new Array(heartBeatItemCount).fill(0),
pull_delay: new Array(heartBeatItemCount).fill(0),
pull_type_ex: new Array(heartBeatItemCount).fill('none'),
//音画不同步字段
avtimestampdiff: new Array(heartBeatItemCount).fill(0),
// 累加
audio_ifg: 0,
video_ifg: 0
};
}; // AIGC 相关函数
var startAigc = function startAigc(config) {
// ZEGO SDK 暂不支持 AIGC 功能,返回错误
return Promise.reject(new Error('ZEGO SDK does not support AIGC functionality'));
};
var stopAigc = function stopAigc() {
// ZEGO SDK 暂不支持 AIGC 功能,返回错误
return Promise.reject(new Error('ZEGO SDK does not support AIGC functionality'));
};
var sendAigcMessage = function sendAigcMessage(messageInfo) {
// ZEGO SDK 暂不支持 AIGC 功能,返回错误
return Promise.reject(new Error('ZEGO SDK does not support AIGC functionality'));
};
var zegosdk = {
loadZego: loadZego,
unloadZego: unloadZego,
startEngine: startEngine,
destroyEngine: destroyEngine$1,
loginChannel: loginChannel,
logoutChannel: logoutChannel,
setDefaultDevice: setDefaultDevice$1,
getVideoDeviceList: getVideoDeviceList,
setVideoDevice: setVideoDevice,
enableCamera: enableCamera,
enableMic: enableMic,
setAudioSpeakerCapture: setAudioSpeakerCapture$1,
getAudioDeviceList: getAudioDeviceList,
setAudioDevice: setAudioDevice,
getSpeakerDeviceList: getSpeakerDeviceList,
setSpeakerDevice: setSpeakerDevice$1,
getCurrentSpeakerDevice: getCurrentSpeakerDevice,
getSpeakerDeviceVolume: getSpeakerDeviceVolume,
setSpeakerDeviceVolume: setSpeakerDeviceVolume,
setSpeakerDeviceMute: setSpeakerDeviceMute,
getMicrophoneDeviceList: getMicrophoneDeviceList,
setMicrophoneDevice: setMicrophoneDevice$1,
getMicDeviceVolume: getMicDeviceVolume,
setMicDeviceVolume: setMicDeviceVolume,
setMicDeviceMute: setMicDeviceMute,
getSpeakerSimpleVolume: getSpeakerSimpleVolume,
setSpeakerSimpleVolume: setSpeakerSimpleVolume,
setSpeakerSimpleMute: setSpeakerSimpleMute,
setPreviewView: setPreviewView,
startPreview: startPreview$1,
startLocalOrRemotePreview: startLocalOrRemotePreview$1,
setVideoFPS: setVideoFPS,
setVideoBitrate: setVideoBitrate,
setAudioBitrate: setAudioBitrate,
setVideoCaptureResolution: setVideoCaptureResolution,
setCameraParam: setCameraParam$1,
setVideoEncodeResolution: setVideoEncodeResolution,
init: init$1,
setVideoCallback: setVideoCallback,
startPublish2: startPublish2,
stopPublish: stopPublish,
initPullFlow: initPullFlow$1,
playStream: playStream,
stopPlayStream: stopPlayStream,
stopAllPlayStream: stopAllPlayStream,
changePullFlow: changePullFlow$1,
mixStream: mixStream,
leaveRoomWithChangeSDK: leaveRoomWithChangeSDK,
leaveRoom: leaveRoom$1,
isZegoGroupClass: isZegoGroupClass,
isZegoCombinationClass: isZegoCombinationClass,
activateAudioPlayStream: activateAudioPlayStream,
pullAudioFlow: pullAudioFlow$1,
activateVideoPlayStream: activateVideoPlayStream,
setAudioVolumeNotify: setAudioVolumeNotify,
stopAudioVolumeNotify: stopAudioVolumeNotify,
openMicVolumeCb: openMicVolumeCb$1,
startSoundLevelMonitor: startSoundLevelMonitor,
stopSoundLevelMonitor: stopSoundLevelMonitor,
setSoundLevelMonitorCycle: setSoundLevelMonitorCycle,
singleRecord: singleRecord,
hasStream: hasStream$1,
getChannelIndex: getChannelIndex,
addPublishTarget: addPublishTarget,
deletePublishTarget: deletePublishTarget,
localRecordVideo: localRecordVideo$1,
localRecordAudio: localRecordAudio$1,
startCaptureRecord: startCaptureRecord,
stopCaptureRecord: stopCaptureRecord,
setMirrorStatus: setMirrorStatus$1,
getStreamType: getStreamType,
startSenseMe: startSenseMe$1,
setBeautifyParam: setBeautifyParam$1,
endSenseMe: endSenseMe$1,
enableBeautify: enableBeautify,
setBeautifyParam2: setBeautifyParam2,
setEngineConfig: setEngineConfig,
setWaterMark: setWaterMark,
setPlayViewMirror: setPlayViewMirror,
setMuteStreamAudio: setMuteStreamAudio,
setMuteStreamVideo: setMuteStreamVideo,
teacherStartLinkMic: teacherStartLinkMic$1,
teacherStopLinkMic: teacherStopLinkMic$1,
getSDKVersion: getSDKVersion$1,
getCameraSupportedRes: getCameraSupportedRes$1,
setAudioMixMode: setAudioMixMode,
setVideoMirrorMode: setVideoMirrorMode,
startMultiScreen: startMultiScreen,
getAllChannelIndex: getAllChannelIndex,
startAudioExCapture: startAudioExCapture,
setFourthStreamType: setFourthStreamType,
sendMediaSideInfo: sendMediaSideInfo$1,
setVideoSource: setVideoSource,
setAUXAudioType: setAUXAudioType,
setThirdAudioType: setThirdAudioType,
loadCollectionInputEntry2: loadCollectionInputEntry2,
stopCheckDevice: stopCheckDevice$1,
addListener: addListener$2,
getDeviceCheckInitStatus: getDeviceCheckInitStatus,
setDeviceCheckInitStatus: setDeviceCheckInitStatus,
setRecordPath: setRecordPath,
getRecordPath: getRecordPath,
getDesktopPath: getDesktopPath,
getMicrophoneLoudness: getMicrophoneLoudness,
getCurrentSpeakerId: getCurrentSpeakerId,
getCurrentMicrophoneId: getCurrentMicrophoneId,
getCurrentCameraId: getCurrentCameraId,
takeLocalSnapShot: takeLocalSnapShot,
takeRemoteSnapShot: takeRemoteSnapShot,
startAigc: startAigc,
stopAigc: stopAigc,
sendAigcMessage: sendAigcMessage,
enableMicRecordDataCallback: enableMicRecordDataCallback
};
var extensionId$3 = 'talrtc_ext'; // 端提供的 API 入口
var EM$7 = window.EM; // 是否执行过 TALRTC 的 AddListener 的标志
var hasAddListener$3 = false; // 监听id
var EMListenerId$2 = 0; // rtc小班课=0;rtc大班课=1
var classType$4 = 0; // 0: 小组课 1: 小班课 2: 新小班课
var classMode = 0; // 心跳
var heartBeatDataReportObj$2 = {};
var isFirstHeartBeatReport$2 = false; // 维护的一份拉流的 streamId 与本地预览通道的映射表
var streamIdToPreviewId$2 = {};
var previewIdToStreamId$1 = {};
var heartBeatDataReportTimer$2 = null;
var streamIdRtcPlayerInfo$2 = {};
var streamIdRtcPlayerInfo1$2 = {}; // 拉流的播放通道初始化从 0 开始依次递增至44(共45路流),-1 为推流的本地视频预览
var chnTotal$1 = 50;
var uiChnIndexs$1 = new Array(chnTotal$1).fill(0).map(function (a, b) {
return b;
}).reverse(); // 维护的一份当前正在使用的音频设备的 deviceId 的列表
var usingAudioDeviceId$1 = {
speaker: '',
microphone: ''
};
var localStreamId$1 = null;
var screenStreamId$1 = null;
var fourthStreamId = null;
var fourthStreamUsingCamera = true;
var isScreenSharing = false;
var isSpeakerCapturing = false;
var isMicphoneClosed = true;
var sdkVersion = null;
var sdkCoreVersion = null;
var streamMuteStatus = {};
var localStreamMuteStatus = {
video: false,
audio: false
}; //记录底层推流回调的值
var dataTalrtcCapture = {};
var qualityLocalArr = [];
var qualityRemoteArr = [];
var appId = null;
var localRoomId = null;
var userId = null;
var aigcRobotUid = null;
var isNoticeMicVolume = false;
var enableLocalCapture = true; // 本地摄像头采集,默认允许
var teacherId$1 = null;
var qualityLocal = 0;
var qualityRemote = 0;
var lecturerStreamId$1 = null;
var lecturerUid$1 = null;
var heartBeatItemCount$1 = 15;
var statsStore$1 = new DataStore(1500);
var PullResult$1 = {
PULL_STREAM_CODE_OK: 0,
// 成功
PULL_STREAM_CODE_STOP: 1,
// 停止
PULL_STREAM_CODE_FAIL: 12101000,
// 调用拉流Api时发生异常 - 是个笼统的错误码
PULL_STREAM_CODE_TIMEOUT: 12102003,
// 拉流超时
PULL_STREAM_CODE_RTC_SIGNAL_FAIL: 12200001,
// 加入房间失败
PULL_STREAM_CODE_RTC_MEDIA_FAIL: 12301011,
// 媒体链路建立失败
PULL_STREAM_CODE_NON_EXIST: 32001004 // 流不存在
};
var audioPullingStore = new DataStore(
/*一小时过期时间*/
60 * 60 * 1000);
var videoPullingStore = new DataStore(
/*一小时过期时间*/
60 * 60 * 1000);
var pullingStreamInterval$1 = -1;
var BUSI_USER_ROLE = {
student: 0,
teacher: 1,
assistant: 2
};
var ENGINE_TYPE = {
talrtc: 7,
volcrtc: 8,
nertc: 9,
'zego-express': 10
};
var ENGINE_TYPE_NAME = {
7: 'talrtc',
8: 'volcrtc',
9: 'nertc',
10: 'zego-express'
};
/**
* @typedef {{
* audio: boolean,
* video: boolean,
* }} NoticedStream
*
* @description 已经通知过remote_video_ready的流
* @type {Map<string, NoticedStream>}
*/
var userRTCStatus = new Map();
var localStreamIdMap = [];
var getStreamMuteStatus = function getStreamMuteStatus(streamId, type) {
var streamStatus = streamMuteStatus[streamId] || {};
return streamStatus[type] || false;
};
var setStreamMuteStatus = function setStreamMuteStatus(streamId, type, status) {
if (!streamMuteStatus[streamId]) {
streamMuteStatus[streamId] = {
audio: false,
video: false
};
}
streamMuteStatus[streamId][type] = status; // 是否上报心跳标记,只有在有流的情况下才上报心跳
if (!streamIdRtcPlayerInfo1$2[streamId]) {
resetStreamIdRtcPlayerInfo1$2(streamId);
}
streamIdRtcPlayerInfo1$2[streamId]["".concat(type, "_type")] = !status;
};
/**
* 判断主流还是辅流
* @param {string} streamId
* @returns {boolean} true: 主流 false: 辅流
*/
var isMainStream = function isMainStream(streamId) {
return streamId.split('_').length === 4;
};
var callMethod$5 = function callMethod(name, args) {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$7) {
return new Promise(function (resolve, reject) {
// let noneCamera = (name === 'SetCameraDevice' && !args.pszDeviceID);
// let noneMicrophone = (name === 'SetAudioDevice' && args.deviceType === 0 && !args.pszDeviceID);
// let noneSpeaker = (name === 'SetAudioDevice' && args.deviceType === 1 && !args.pszDeviceID);
// if (noneCamera || noneMicrophone || noneSpeaker) {
// return resolve();
// }
defaultApi$1.writeLog("".concat(name, " Params: ").concat(JSON.stringify(args)));
EM$7.CallMethod(extensionId$3, name, JSON.stringify(_objectSpread({}, args, {
classType: classType$4
})), function (code, msg) {
defaultApi$1.writeLog("".concat(name, " Code: ").concat(code, " Message: ").concat(msg));
resolve({
code: code,
msg: msg
});
});
});
}
};
var loadTalrtc = function loadTalrtc(extensionVersion) {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$7) {
return new Promise(function (resolve, reject) {
removerListener$2();
defaultApi$1.writeLog("-> load tal rtc sdk ".concat(extensionId$3, ", ").concat(extensionVersion));
EM$7.Load(extensionId$3, extensionVersion, false, function (code, msg) {
defaultApi$1.writeLog("loadTalrtc Code: ".concat(code, "\nMessage: ").concat(msg));
addListener$3();
resolve();
});
});
}
}; //卸载监听
var removerListener$2 = function removerListener() {
hasAddListener$3 = false;
defaultApi$1.writeLog("TALRTC::action--removerListener EMListenerId:".concat(EMListenerId$2));
EM$7.RemoverListener(extensionId$3, EMListenerId$2, function (ec, content) {});
EMListenerId$2 = 0;
}; //加载监听
/**
* @function 添加扩展监听机制
* @param userId:Number 用户 id,必选
* @param userName:String 用户名,必选
* @param roomId:String 频道(房间) id,必选
* @param nNetType:Number 网络类型,可选,默认为 1
* @return void
*/
var addListener$3 = function addListener() {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$7 && !hasAddListener$3) {
hasAddListener$3 = true;
EM$7.AddListener(extensionId$3, function (event, data) {
if (zbysdk$1.openListenerLog) {
defaultApi$1.writeLog("TALRTC::Listener:: event: ".concat(event, ", data: ").concat(JSON.stringify(data)));
}
if (data && data.indexOf(extensionId$3) > -1) {
try {
EMListenerId$2 = JSON.parse(data)[extensionId$3];
defaultApi$1.writeLog("TALRTC::addListener-- EMListenerId: ".concat(EMListenerId$2));
} catch (error) {}
}
if (!event || !data) {
return;
}
var _data = JSON.parse(data); // defaultApi.writeLog(`TALRTC: event:: ${event} : ${data}`);
switch (event) {
// 推流器出现错误
case 'onLocalError':
defaultApi$1.writeLog("TALRTC::addListener-- onLocalError: ".concat(data));
NOTICE.pushStreamError({
errorStreamType: _data.streamType,
code: _data.code,
errorMsg: _data
});
dataReport$2.pushStreamError({
errorStreamType: _data.streamType,
code: _data.code
}); // defaultApi.writeLog(`TALRTC: event:: onLocalError: ${_data}`);
break;
// 直播推流器警告通知
case 'onLocalWarning':
defaultApi$1.writeLog("TALRTC::addListener-- onLocalWarning: ".concat(data));
NOTICE.pushStreamWarning({
warnStreamType: _data.streamType,
code: _data.code
});
dataReport$2.pushStreamWarning({
warnStreamType: _data.streamType,
code: _data.code
});
break;
// 首帧音频推送完成的回调通知
case 'onSendLocalFirstAudioFrame':
defaultApi$1.writeLog("TALRTC: event:: onSendLocalFirstAudioFrame: ".concat(data));
break;
// 采集首帧事件
case 'OnCaptureVideoFirstFrame':
defaultApi$1.writeLog("TALRTC: event:: OnCaptureVideoFirstFrame: ".concat(data)); // NOTICE.pushFlowSuccess({code:0,publish_streamid: _data.pszStreamID});
break;
// 本地音量
case 'onLocalMicrophoneVolumeUpdate':
// defaultApi.writeLog(`TALRTC: event:: onLocalMicrophoneVolumeUpdate: ${data}`);
if (isNoticeMicVolume) {
NOTICE.captureMicVolumeChanged({
volume: Math.round(_data.volume)
});
}
heartBeatDataReportObj$2.volume = heartBeatDataReportObj$2.volume + Math.round(_data.volume) + ',';
break;
// 推流器连接状态回调通知。推流器连接状态 1与服务器断开连接/2 正在连接服务器/3 连接服务器成功/4 重连服务器中 5
case 'onLocalConnectStatusUpdate':
defaultApi$1.writeLog("TALRTC: event:: onLocalConnectStatusUpdate: ".concat(data));
dataReport$2.localConnectStatus({
connectStatuStreamType: _data.streamType,
state: _data.state
});
if (_data.state === 2 || _data.state === 1) {
NOTICE.networkError();
} else if (_data.state === 3) {
NOTICE.networkRecovery();
}
break;
// 网络质量的实时统计回调
case 'onLocalNetworkQuality':
// defaultApi.writeLog(`TALRTC: event:: onLocalNetworkQuality: ${data}`);
if (_data.quality == 4 || _data.quality == 5 || _data.quality == 6) {
NOTICE.localNetworkQuality({
code: _data.quality
}); // dataReport.localNetworkQuality({
// code: _data.quality,
// });
}
qualityLocal = _data.quality; // qualityLocalArr.push(_data.quality);
break;
// 远端流错误通知,拉流出现错误时,会回调该通知
case 'onRemoteError':
defaultApi$1.writeLog("TALRTC: event:: onRemoteError: ".concat(data));
NOTICE.pullStreamError({
strErrorStreamId: _data.streamId,
code: _data.code
});
break;
// 远端流警告通知,拉流出现警告时,会回调该通知
case 'onRemoteWarning':
defaultApi$1.writeLog("TALRTC: event:: onRemoteWarning: ".concat(data));
NOTICE.pullStreamWarning({
strWarnStreamId: _data.streamId,
code: _data.code
});
break;
// 卡顿事件,用于事件上报
case 'stuckevent':
defaultApi$1.writeLog("TALRTC: event:: stuckevent: ".concat(data));
break;
case 'onRecvMediaSideInfo':
defaultApi$1.writeLog("TALRTC: event:: onRecvMediaSideInfo: ".concat(data));
NOTICE.onRecvMediaSideInfo({
streamId: _data.streamId,
userId: util.getUidByStreamId(_data.streamId),
data: _data.pBuf,
dataLen: _data.dataLen,
uuid: _data.uuid
});
break;
// 远端音频首帧
case 'onRecvRemoteAudioFirstFrame':
try {
NOTICE.firstAudioSize({
streamId: _data.streamId,
userId: util.getUidByStreamId(_data.streamId)
});
dataReport$2.firstAudioSize({
pull_streamid: _data.streamId,
pull_uid: util.getUidByStreamIdDr(_data.streamId),
code: '0'
});
} catch (e) {}
;
defaultApi$1.writeLog("TALRTC: event:: OnRecvRemoteAudioFirstFrame: ".concat(data));
break;
// 远端流音量大小
case 'onRemoteAudioVolume':
// defaultApi.writeLog(`TALRTC: event:: onRemoteAudioVolume: ${data}}`);
var cbData = {
streamid: _data.streamId,
streamId: _data.streamId,
userId: util.getUidByStreamId(_data.streamId),
volume: _data.volume
};
NOTICE.playerVolumeChanged(cbData);
NOTICE.volumeChange(cbData);
if (streamIdRtcPlayerInfo$2[_data.streamId]) {
streamIdRtcPlayerInfo$2[_data.streamId].volume = streamIdRtcPlayerInfo$2[_data.streamId].volume + Math.round(_data.volume) + ',';
}
break;
// case 'onUserEnableAudio':
// try {
// if (
// teacherId &&
// _data.streamId.match(teacherId) &&
// isMainStream(_data.streamId) &&
// _data.inuse
// ) {
// setChiefAudioStream(_data.streamId, util.getUidByStreamIdDr(_data.streamId));
// }
// } catch (e) {
// defaultApi.writeLog(`TALRTC: event:: onUserEnableAudio: ${e}`);
// }
// defaultApi.writeLog(`TALRTC: event:: onUserEnableAudio: ${data}`);
// break; // 由于后续还有处理逻辑,所以不能直接 break
// 远端视频首帧
case 'onRenderRemoteVideoFirstFrame':
try {
// Test Code: 临时增加
setTimeout(function () {
NOTICE.pullFlowResult({
code: 0,
pull_streamid: _data.streamId
});
NOTICE.firstVideoSize({
streamId: _data.streamId,
userId: util.getUidByStreamId(_data.streamId)
});
dataReport$2.firstVideoSize({
pull_streamid: _data.streamId,
pull_uid: util.getUidByStreamIdDr(_data.streamId),
code: '0'
});
}, 100);
} catch (e) {}
;
defaultApi$1.writeLog("TALRTC: event:: OnRenderRemoteVideoFirstFrame: ".concat(data));
break;
// SEI消息
case 'onRecvSEIMsg':
defaultApi$1.writeLog("TALRTC: event:: onRecvSEIMsg: ".concat(data));
break;
// 网络质量的实时统计回调
case 'onRemoteNetworkQuality':
// defaultApi.writeLog(`TALRTC: event:: onRemoteNetworkQuality: ${data}`);
if (_data.quality == 4 || _data.quality == 5 || _data.quality == 6) {
NOTICE.remoteNetworkQuality({
code: _data.quality
}); // dataReport.remoteNetworkQuality({
// code: _data.quality,
// });
}
qualityRemote = _data.quality; // qualityRemoteArr.push(_data.quality);
break;
// 转推 CDN 上发布音视频流的事件回调
case 'onRtmpStreamingStateChanged':
defaultApi$1.writeLog("TALRTC: event:: onRtmpStreamingStateChanged: ".concat(data));
break;
// 设备异常
case 'onDeviceError':
defaultApi$1.writeLog("TALRTC: event:: OnDeviceError: ".concat(data));
var codemsg = {
'-2': '无效设备ID',
'-3': '没有权限',
'-4': '采集帧率为0',
'-5': '设备被占用',
'-6': '设备未插入',
'-7': '需要重启系统',
'-8': '媒体服务无法恢复',
'-9': '设备被SIRI占用',
'100': '设备恢复'
}; // 如果errorCode为0,则过滤掉并返回100
if (_data.errorCode === 0) {
_data.errorCode = 100;
}
dataReport$2.deviceError({
deviceName: _data.deviceName,
errorCode: _data.errorCode,
code: _data.errorCode
});
NOTICE.deviceError({
code: _data.errorCode,
msg: codemsg[_data.errorCode],
deviceId: _data.deviceId,
deviceName: _data.deviceName
});
break;
// 拉流的结果通知
case 'onPlayStateUpdate':
defaultApi$1.writeLog("TALRTC: event:: onPlayStateUpdate: ".concat(data));
break;
// 推流的结果通知
case 'onPushStateUpdate':
defaultApi$1.writeLog("TALRTC: event:: onPushStateUpdate: ".concat(data));
if (_data.state === 3) {
NOTICE.pushFlowSuccess({
code: 0,
publish_streamid: _data.streamId
});
}
dataReport$2.publishResult({
code: '0',
publish_rtc_streamid: _data.streamId.split('_').length === 5 ? _data.streamId : undefined
});
break;
case 'onAudioSubscribeStateChange':
defaultApi$1.writeLog("TALRTC: event:: onAudioSubscribeStateChange: ".concat(data, " ").concat(audioPullingStore.has(_data.streamId)));
if (!audioPullingStore.has(_data.streamId)) {
break;
}
dataReport$2.pullResult({
code: _data.code,
media_type: 'audio',
pull_uid: _data.userId,
pull_streamid: _data.streamId
});
audioPullingStore.delete(_data.streamId);
break;
case 'onVideoSubscribeStateChange':
defaultApi$1.writeLog("TALRTC: event:: onVideoSubscribeStateChange: ".concat(data, " ").concat(videoPullingStore.has(_data.streamId)));
if (!videoPullingStore.has(_data.streamId)) {
break;
}
dataReport$2.pullResult({
code: _data.code,
media_type: 'video',
pull_uid: _data.userId,
pull_streamid: _data.streamId
});
videoPullingStore.delete(_data.streamId);
break;
// 推、拉流的统计数据。
case 'onLocalStatistics':
try {
if (!localStreamId$1) {
return;
}
var _d = JSON.parse(_data.stats);
NOTICE.pushQuality({
video: {
streamId: localStreamId$1,
userId: userId,
bitrate: _d.videoBitrate,
fps: _d.fps
}
});
NOTICE.playLossAndDelay({
userId: userId,
delay: _d.rtt,
lostrate: _d.packetLoss
});
} catch (e) {} // heartBeatDataReportCalc('onLocalStatistics', _data);
statsStore$1.setData(localStreamId$1, _data); // defaultApi.writeLog(`TALRTC: event:: onStatisticsUpdate: ${_data}`);
break;
// 本地摄像头设备的通断状态发生变化
case 'onRemoteStatistics':
try {
var _d2 = JSON.parse(_data.stats);
NOTICE.pullQuality({
video: {
streamId: _d2.streamId,
userId: util.getUidByStreamId(_d2.streamId),
bitrate: _d2.videoBitrate,
fps: _d2.fps
}
});
NOTICE.playLossAndDelay({
userId: util.getUidByStreamId(_d2.streamId),
delay: _d2.rtt,
lostrate: _d2.packetLoss
});
statsStore$1.setData(_d2.streamId, _data);
} catch (e) {} // heartBeatDataReportCalc('onRemoteStatistics', _data);
// defaultApi.writeLog(`TALRTC: event:: onStatisticsUpdate: ${_data}`);
break;
// 本地摄像头设备的通断状态发生变化
case 'onVideoDeviceChanged':
defaultApi$1.writeLog("TALRTC: event:: onVideoDeviceChanged: ".concat(data));
setCameraDevice$1({
deviceId: _data.state == 1 ? _data.deviceId : '',
operationType: 'hotPlug',
deviceState: _data.state == 1 ? 0 : 1,
changedDeviceId: _data.deviceId
});
break;
/* 本地麦克风设备的通断状态发生变化
* state:1:使用中 2:被禁用 4:一开始就没有?(我也不懂) 8:设备移除
* deviceType:-1:未知 0:播放器 1:麦克风 2:视频显示设备 3:摄像头
*/
case 'onAudioDeviceChanged':
defaultApi$1.writeLog("TALRTC: event:: onAudioDeviceChanged: ".concat(data));
if (_data.deviceType === 0) {
setSpeakerDevice$2({
deviceId: _data.state == 1 ? _data.deviceId : '',
operationType: 'hotPlug',
deviceState: _data.state == 1 ? 0 : 1,
changedDeviceId: _data.deviceId
});
}
if (_data.deviceType === 1) {
setMicrophoneDevice$2({
deviceId: _data.state == 1 ? _data.deviceId : '',
operationType: 'hotPlug',
deviceState: _data.state == 1 ? 0 : 1,
changedDeviceId: _data.deviceId
});
}
break;
// mute 视频状态,true:远端开始推流,并拉流收到首帧;false:远端停止推流。
case 'onRemoteVideoStatus':
defaultApi$1.writeLog("TALRTC: event:: onRemoteVideoStatus: ".concat(data));
break;
// mute 音频状态,true:远端开始推流,并拉流收到首帧;false:远端停止推流。
case 'onRemoteAudioStatus':
defaultApi$1.writeLog("TALRTC: event:: onRemoteAudioStatus: ".concat(data));
break;
// 首帧视频推送完成的回调通知
case 'onSendLocalFirstVideoFrame':
defaultApi$1.writeLog("TALRTC: event:: onSendLocalFirstVideoFrame: ".concat(data));
break;
case 'updateRet':
defaultApi$1.writeLog("TALRTC: event:: updateRet: ".concat(data));
break;
case 'onBeautifyEvent':
if (_data.code === 0) {
defaultApi$1.writeLog("TALRTC: event:: onBeautifyEvent success ".concat(JSON.stringify(_data)));
} else {
var message = ['', 'License错误', '渲染错误', '参数错误'];
NOTICE.beautifyError({
code: _data.code,
message: message[_data.code]
});
}
break;
case 'onEngineType':
defaultApi$1.writeLog("TALRTC: event:: onEngineType: ".concat(data));
dataReport$2.setRealSDKType(_data.engineType);
if (_data.engineType === 'volcrtc') {
statsStore$1.updateValidityPeriod(2500);
} else if (_data.engineType === 'talrtc') {
statsStore$1.updateValidityPeriod(1500);
}
break;
case 'onJoinchannelError':
defaultApi$1.writeLog("TALRTC: event:: onJoinchannelError: ".concat(data));
dataReport$2.joinRtcChannel(_data);
break;
case 'onUserOnline':
if (globalConfig.usePomelo) {
break;
}
defaultApi$1.writeLog("TALRTC: event:: onUserOnline: ".concat(data));
userRTCStatus.set(_data.userId, {
audio: false,
video: false
});
NOTICE.userJoin({
userId: _data.userId,
userName: _data.userName,
role: _data.role
});
NOTICE.updateStreamDeviceStatus({
userId: _data.userId,
userName: _data.userName,
role: _data.role,
deviceType: 'audio',
deviceStatus: 'closed'
});
NOTICE.updateStreamDeviceStatus({
userId: _data.userId,
userName: _data.userName,
role: _data.role,
deviceType: 'video',
deviceStatus: 'closed'
});
break;
case 'onUserMuteAudio':
{
if (globalConfig.usePomelo) {
break;
}
defaultApi$1.writeLog("TALRTC: event:: ".concat(event, ": ").concat(data));
if (_data.streamId.split('_').length === 5) {
break;
}
var streamInfo = userRTCStatus.get(_data.userId);
if (!streamInfo) {
// 如果没有通知过,说明是第一次收到mute通知
streamInfo = {
audio: false,
video: false
};
userRTCStatus.set(_data.userId, streamInfo);
}
if (streamInfo.audio === !_data.mute) {
// 无变更
defaultApi$1.writeLog("TALRTC: event:: ".concat(event, ": no change for userId: ").concat(_data.userId, ", streamId: ").concat(_data.streamId, ", mute: ").concat(_data.mute));
break;
}
streamInfo.audio = !_data.mute;
if (streamInfo.audio && !streamInfo.video) {
// 如果音频开启了,视频没有开启,说明是首次上行,通知add
NOTICE.addStream({
userId: _data.userId,
userName: _data.userName,
role: _data.role,
streamId: _data.streamId
});
break;
}
if (!streamInfo.video) {
// 如果音视频都没有,通知remove
userRTCStatus.delete(_data.userId);
NOTICE.removeStream({
userId: _data.userId,
userName: _data.userName,
role: _data.role,
streamId: _data.streamId
});
}
break;
}
case 'onUserMuteVideo':
{
if (globalConfig.usePomelo) {
break;
}
defaultApi$1.writeLog("TALRTC: event:: ".concat(event, ": ").concat(data));
if (_data.streamId.split('_').length === 5) {
break;
}
var _streamInfo = userRTCStatus.get(_data.userId);
if (!_streamInfo) {
// 如果没有通知过,说明是第一次收到mute通知
_streamInfo = {
audio: false,
video: false
};
userRTCStatus.set(_data.userId, _streamInfo);
}
if (_streamInfo.video === !_data.mute) {
// 无变更
defaultApi$1.writeLog("TALRTC: event:: ".concat(event, ": no change for userId: ").concat(_data.userId, ", streamId: ").concat(_data.streamId, ", mute: ").concat(_data.mute));
break;
}
_streamInfo.video = !_data.mute;
if (_streamInfo.video && !_streamInfo.audio) {
// 如果视频开启了,音频没有开启,说明是首次上行,通知add
NOTICE.addStream({
userId: _data.userId,
userName: _data.userName,
role: _data.role,
streamId: _data.streamId
});
break;
}
if (!_streamInfo.audio) {
// 如果音视频都没有,通知remove
userRTCStatus.delete(_data.userId);
NOTICE.removeStream({
userId: _data.userId,
userName: _data.userName,
role: _data.role,
streamId: _data.streamId
});
}
break;
}
case 'onUserEnableAudio':
try {
if (teacherId$1 && _data.streamId.match(teacherId$1) && isMainStream(_data.streamId) && _data.inuse) {
setChiefAudioStream(_data.streamId, util.getUidByStreamIdDr(_data.streamId));
}
} catch (e) {
defaultApi$1.writeLog("TALRTC: event:: onUserEnableAudio error: ".concat(e));
}
if (_data && _data.inuse && aigcRobotUid != null && String(_data.userId) === String(aigcRobotUid)) {
aigcRobotUid = null;
NOTICE.addStream({
userId: _data.userId,
streamId: _data.streamId
});
}
if (globalConfig.usePomelo) {
break;
}
defaultApi$1.writeLog("TALRTC: event:: onUserEnableAudio: ".concat(data));
if (_data.streamId.split('_').length === 5) {
break;
}
NOTICE.updateStreamDeviceStatus({
userId: _data.userId,
userName: _data.userName,
role: _data.role,
deviceType: 'audio',
deviceStatus: _data.deviceStatus
});
break;
case 'onUserEnableVideo':
if (globalConfig.usePomelo) {
break;
}
defaultApi$1.writeLog("TALRTC: event:: onUserEnableVideo: ".concat(data));
if (_data.streamId.split('_').length === 5) {
break;
}
NOTICE.updateStreamDeviceStatus({
userId: _data.userId,
userName: _data.userName,
role: _data.role,
deviceType: 'video',
deviceStatus: _data.deviceStatus
});
break;
case 'onUserOffline':
if (globalConfig.usePomelo) {
break;
}
userRTCStatus.delete(_data.userId);
defaultApi$1.writeLog("TALRTC: event:: onUserOffline: ".concat(data));
NOTICE.leave({
userId: _data.userId,
userName: _data.userName,
role: _data.role
});
break;
case 'onEngineChangeNotify':
defaultApi$1.writeLog("TALRTC: event:: onEngineChangeNotify: ".concat(data));
zbysdk$1.changeSDK();
break;
case 'onAiStatus':
defaultApi$1.writeLog("TALRTC: event:: onAiStatus: ".concat(data));
NOTICE.onAiStatus({
uid: _data.uid,
code: _data.code,
errMsg: _data.errMsg
});
break;
case 'onAiMessage':
defaultApi$1.writeLog("TALRTC: event:: onAiMessage: ".concat(data));
if (!_data || !_data.txt) {
break;
}
NOTICE.onAiMessage({
uid: _data.uid,
status: _data.status,
text: _data.txt
});
break;
case 'onAiTTSMessage':
defaultApi$1.writeLog("TALRTC: event:: onAiTTSMessage: ".concat(data));
NOTICE.onAiTTSMessage({
uid: _data.uid,
status: _data.status,
text: _data.txt
});
break;
case 'OnMicCaptureData':
{
var base64Data = _data && _data.data;
if (base64Data) {
NOTICE.micCaptureData({
data: base64Data,
sampleRate: _data.sampleRate,
channels: _data.channels
});
}
break;
}
default:
console.warn('warning: uncaught listener:', event);
}
});
}
};
var checkUpdate = async function checkUpdate(institutionId, userid, role) {
defaultApi$1.writeLog("avsdk TALRTC::checkUpdate ".concat(institutionId, ", ").concat(userid, ", ").concat(role));
await loadTalrtc(talrtcExt.version);
var appid = getAppIdByInstitutionId(String(institutionId));
defaultApi$1.writeLog("avsdk TALRTC::checkUpdate appid ".concat(appid));
userId += '';
if (!appid) {
return;
}
var data = {
appid: appid,
userid: userid,
role: BUSI_USER_ROLE[role] || 0
};
return callMethod$5('CheckUpdate', _objectSpread({}, data, {
extraInfo: JSON.stringify(data)
}));
};
var startPullingStreamObserver$1 = function startPullingStreamObserver() {
audioPullingStore.restore();
videoPullingStore.restore();
if (pullingStreamInterval$1 !== -1) {
clearInterval(pullingStreamInterval$1);
}
pullingStreamInterval$1 = setInterval(function () {
audioPullingStore.forEach(function (value, key) {
try {
if (!audioPullingStore.checkData(value)) {
audioPullingStore.delete(key);
dataReport$2.pullResult({
code: PullResult$1.PULL_STREAM_CODE_TIMEOUT,
media_type: 'audio',
pull_uid: util.getUidByStreamIdDr(key),
pull_streamid: key
});
}
} catch (e) {
defaultApi$1.writeLog("pullingStreamInterval error ".concat(e), undefined, 'error');
}
});
videoPullingStore.forEach(function (value, key) {
try {
if (!videoPullingStore.checkData(value)) {
videoPullingStore.delete(key);
dataReport$2.pullResult({
code: PullResult$1.PULL_STREAM_CODE_TIMEOUT,
media_type: 'video',
pull_uid: util.getUidByStreamIdDr(key),
pull_streamid: key
});
}
} catch (e) {
defaultApi$1.writeLog("pullingStreamInterval error ".concat(e), undefined, 'error');
}
});
}, 500);
};
/**
*
* @param {string | number} userId
* @returns {string}
*/
var formatUserId = function formatUserId(userId) {
userId = String(userId);
var userNumber = userId.match(/\d+/);
var baseNumber = 1e9;
if (!userNumber || !userNumber.length) {
return baseNumber;
}
var pureNumber = parseInt(userNumber[0]) || 0;
if (pureNumber === Number(userId)) {
return String(pureNumber);
} else {
return String(pureNumber + baseNumber);
}
};
/**
* 处理token
* @param {string} token
*/
var processToken = function processToken(token) {
var tokenArr = token.split('.');
if (tokenArr.length === 3) {
var payloadStr = window.atob(tokenArr[1]);
var payload = JSON.parse(payloadStr);
globalConfig.usePomelo = payload.signal >> 0 === 0;
defaultApi$1.writeLog("avsdk TALRTC::usePomelo ".concat(globalConfig.usePomelo));
dataReport$2.setRealSDKType(ENGINE_TYPE_NAME[payload.type] || payload.type);
return payload;
} else {
defaultApi$1.writeLog('avsdk TALRTC::processToken error ' + token, undefined, 'error');
return token;
}
}; // 初始化相关
var init$2 = async function init(args) {
defaultApi$1.writeLog("avsdk TALRTC::init ".concat(JSON.stringify(args)));
var usedDevices = window.zbyAVSDK_device_checker_init;
var devices = args.devices;
var sdkType = window.zbyAVSDK_init_sdk_type || 'talrtc';
appId = args.appId;
localRoomId = args.roomId;
userId = args.userId;
localStreamId$1 = args.streamId;
localStreamIdMap[0] = localStreamId$1;
teacherId$1 = args.teacherId;
lecturerStreamId$1 = typeof args.lecturerStreamId === 'string' ? args.lecturerStreamId.toUpperCase() : null;
lecturerUid$1 = typeof lecturerStreamId$1 === 'string' ? lecturerStreamId$1.split('_')[2] : null;
var _devices = {
camera: devices && devices.camera || usedDevices && usedDevices.camera && usedDevices.camera.use || '',
microphone: devices && devices.microphone || usedDevices && usedDevices.microphone && usedDevices.microphone.use || '',
speaker: devices && devices.speaker || usedDevices && usedDevices.speaker && usedDevices.speaker.use || ''
};
var rtcTokenRetryCount = 0;
var _ref = await Promise.all([loadTalrtc(args.extensionVersion), getRTCToken({
// 构建token请求参数
appid: args.appId,
planid: parseInt(args.live_id),
user: formatUserId(args.userId),
room: args.roomId,
ignoreVolc: 1
}, {
// 配置选项对象,控制重试行为
enableBackup: true,
// 启用备用域名重试
enableFallback: true,
// 启用回退到自研引擎
logPrefix: 'TALRTC::getRTCToken',
// 日志前缀,用于区分不同模块的日志
onRetry: function onRetry() {
return rtcTokenRetryCount += 1;
}
})]),
_ref2 = _slicedToArray(_ref, 2),
token = _ref2[1];
defaultApi$1.writeLog(token ? '-> get token success ' + token : '-> get token failed');
dataReport$2.getRtcToken({
result: token ? 1 : -1,
error_count: rtcTokenRetryCount
});
processToken(token);
args.usersign = token;
await startEngine$1(args.appId, localRoomId, args.userId, args.usersign || '67890', ENGINE_TYPE[sdkType] || 7, args.live_id, BUSI_USER_ROLE[args.role] || 0);
defaultApi$1.writeLog('-> start talrtc sdk success');
if (args.env != 'online') {
setEngineEnv(args.env);
}
userRTCStatus.clear();
classMode = args.classMode >> 0; // 0: 小组课 1: 小班课 2: 新小班课
if (classMode === 1 || classMode === 2) {
if (args.role === 'teacher') {
//小班课 需要加载采集插件的输入数据,为了拼接talrtc头像
await loadCollectionInputEntry$1(); //屏幕流通道
screenStreamId$1 = "".concat(window.zby_sdk_init_params.institutionId, "_").concat(localRoomId, "_").concat(userId, "_").concat(args.live_id, "_1");
localStreamIdMap[1] = screenStreamId$1;
await enableExternalVideoSource(true, screenStreamId$1);
await setCameraEncodeFps(args.screenSameFps, screenStreamId$1);
await setCameraCaptureResolution(args.screenSameResolutionWidth, args.screenSameResolutionHeight, screenStreamId$1);
await setCameraEncodeResolution(args.screenSameResolutionWidth, args.screenSameResolutionHeight, screenStreamId$1);
await setCameraEncodeBitrate(args.screenSameBitrate, screenStreamId$1); //rtc同屏以及高光时刻,都开启音频外部采集,默认传1
await setAudioAuxSource$1(1);
teacherId$1 = null;
}
if (args.noiseSuppressMode == -2) {
defaultApi$1.writeLog("noiseSuppressMode \u5173\u95ED\u566A\u58F0\u6D88\u9664 ".concat(args.noiseSuppressMode));
await setEnableNoiseSuppress$1(false);
} else if (args.noiseSuppressMode == -1) {
defaultApi$1.writeLog("noiseSuppressMode \u7531\u5E95\u5C42\u8FDB\u884C\u914D\u7F6E\uFF0Cjs\u5C42\u4E0D\u8FDB\u884C\u914D\u7F6E ".concat(args.noiseSuppressMode));
} else {
defaultApi$1.writeLog("noiseSuppressMode \u542F\u52A8\u566A\u97F3\u6D88\u9664,\u6A21\u5F0F\u4E3A\uFF1A".concat(args.noiseSuppressMode));
await setEnableNoiseSuppress$1(true);
await setNoiseSuppressMode$1(args.noiseSuppressMode >> 0);
await enableTransientNoiseSuppress$1(true);
}
; //aecMode为-1是关闭回音消除,云控下传
if (args.aecMode == -2) {
defaultApi$1.writeLog("aecMode \u5173\u95ED\u56DE\u97F3\u6D88\u9664 ".concat(args.aecMode));
await setEnableAEC$1(false);
} else if (args.aecMode == -1) {
defaultApi$1.writeLog("aecMode \u7531\u5E95\u5C42\u8FDB\u884C\u914D\u7F6E\uFF0Cjs\u5C42\u4E0D\u8FDB\u884C\u914D\u7F6E ".concat(args.aecMode));
} else {
defaultApi$1.writeLog("aecMode \u542F\u52A8\u56DE\u97F3\u6D88\u9664,\u6A21\u5F0F\u4E3A\uFF1A".concat(args.aecMode));
await setEnableAEC$1(true);
await setAECMode$1(args.aecMode >> 0);
}
;
}
;
if ((args.role === 'teacher' || args.role === 'assistant') && classMode === 0) {
//坐立模式开启外部采集器,站立关闭外部采集器,只有小组课坐立模式才会调用,通过这个把rtmp数据给到talrtc(头像),开启了外部采集,talrtc不会再本地采集数据
// V2 不区分坐立站立,老师和辅导老师都启动外部视频源
await enableExternalVideoSource(true, localStreamId$1);
enableLocalCapture = false; // 禁用本地摄像头采集,防止与其他进程抢占摄像头
} else {
await setDefaultDevice$2(_devices, 'default');
} // 主通道
await setCameraEncodeFps(args.encodeCaptureFps, localStreamId$1);
await setCameraCaptureResolution(args.previewResolutionWidth, args.previewResolutionHeight, localStreamId$1);
await setCameraEncodeResolution(args.encodedResolutionWidth, args.encodedResolutionHeight, localStreamId$1);
await setCameraEncodeBitrate(args.encodeCaptureBitrate, localStreamId$1);
await setMicphoneVolumInterval(500);
await setMediaSideFlags$1();
startPullingStreamObserver$1();
window.current_sdk_type = sdkType;
defaultApi$1.writeLog('avsdk TALRTC::init finished current_sdk_type: ' + sdkType);
};
/**
* @function 初始化引擎
* @param {string} appid TalRTC 秘钥,必选
* @param {string} userid
* @param {string} usersign
* @param {1 | 7} type 直播中台SDK底层引擎类型 7: 自研引擎
* @param {string} liveID
* @param {0 | 1 | 2} businessRole 0: student 1: teacher 2: tutor
* @return Promise | void
*/
var startEngine$1 = function startEngine(appid, roomId, userid, usersign, type, liveID, businessRole) {
defaultApi$1.writeLog("avsdk TALRTC::StartEngine appid: ".concat(appid, " roomId:").concat(roomId, " userid: ").concat(userid, " usersign: ").concat(usersign, ", liveID: ").concat(liveID, ", businessRole: ").concat(businessRole));
return callMethod$5('StartEngine', {
appid: appid,
roomId: roomId,
userid: userid,
usersign: usersign,
type: type,
liveID: '' + liveID,
businessRole: businessRole,
institutionId: '' + window.zby_sdk_init_params.institutionId,
streamId: localStreamId$1,
lecturerStreamId: lecturerStreamId$1
});
}; //开启消除回声
var setEnableAEC$1 = function setEnableAEC(enable) {
return callMethod$5('EnableAEC', {
enable: enable
});
}; //设置回声消除模式 mode :激进模式 =0/中等模式 =1/轻度模式 =2
var setAECMode$1 = function setAECMode(mode) {
return callMethod$5('SetAECMode', {
mode: mode
});
}; //开启噪音消除
var setEnableNoiseSuppress$1 = function setEnableNoiseSuppress(enable) {
return callMethod$5('EnableNoiseSuppress', {
enable: enable
});
}; //设置噪音消除模式 mode :0:低 1:中 2高
var setNoiseSuppressMode$1 = function setNoiseSuppressMode(mode) {
return callMethod$5('SetNoiseSuppressMode', {
mode: mode
});
}; //新增瞬时降噪接口 瞬时降噪 可以处理掉 敲键盘、敲桌子、敲门等瞬态噪声。非瞬态噪声,此接口无法处理,比如划桌子等摩擦噪音。
var enableTransientNoiseSuppress$1 = function enableTransientNoiseSuppress(enable) {
return callMethod$5('EnableTransientNoiseSuppress', {
enable: enable
});
};
/**
* 加载采集插件的输入数据 //调用后,talrtc 可以向采集插件传送摄像头数据,用于拼接
* @return {Promise}
*/
var loadCollectionInputEntry$1 = function loadCollectionInputEntry() {
return callMethod$5('LoadCollectionInputEntry', {});
};
/**
* 1、设置需要拼接的学生头像流id,按数组顺序拼接
* 2、加载截屏插件,获取截屏插件设置拉流头像回调函数
* @param {Array} stream_ids 拉流id数组,最大有效数量7个
* @returns {Promise}
*/
var loadCollectionInputEntry2$1 = function loadCollectionInputEntry2(stream_ids) {
return callMethod$5('LoadCollectionInputEntry2', {
stream_ids: stream_ids
});
}; //设置是否发送sei
var setMediaSideFlags$1 = function setMediaSideFlags() {
var start = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
var onlyAudioPublish = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var mediaInfoType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 2;
var seiSendType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
var idx = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
return callMethod$5('SetMediaSideFlags', {
start: start,
onlyAudioPublish: onlyAudioPublish,
mediaInfoType: mediaInfoType,
seiSendType: seiSendType,
idx: idx
});
};
/**
* @function 销毁引擎
* @return Promise | void
*/
var destroyEngine$2 = function destroyEngine() {
return callMethod$5('DestroyEngine', {});
}; // 设置采集分辨率
var setCameraCaptureResolution = function setCameraCaptureResolution(width, height) {
var streamId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : localStreamId$1;
return callMethod$5('SetCameraCaptureResolution', {
width: width,
height: height,
streamId: streamId
});
}; // 设置编码分辨率
var setCameraEncodeResolution = function setCameraEncodeResolution(width, height) {
var streamId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : localStreamId$1;
return callMethod$5('SetCameraEncodeResolution', {
width: width,
height: height,
streamId: streamId
});
}; // 设置编码帧率
var setCameraEncodeFps = function setCameraEncodeFps(fps) {
var streamId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : localStreamId$1;
return callMethod$5('SetCameraEncodeFps', {
fps: fps,
streamId: streamId
});
}; // 设置编码码率
var setCameraEncodeBitrate = function setCameraEncodeBitrate(bitrate) {
var streamId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : localStreamId$1;
return callMethod$5('SetCameraEncodeBitrate', {
bitrate: bitrate,
streamId: streamId
});
}; // 获取指定摄像头的支持的分辨率
var getCameraResolution = async function getCameraResolution(deviceId) {
var resp = await callMethod$5('GetCameraResolution', {
deviceId: deviceId
});
var cameraArr = JSON.parse(resp.msg || '{}').SupportedResolution;
return {
code: resp.code,
msg: JSON.stringify(cameraArr)
};
}; // 获取 rtc_sdk.dll 版本号
var getSDKVersion$2 = async function getSDKVersion() {
if (sdkVersion) {
return sdkVersion;
}
return callMethod$5('GetSDKVersion', {}).then(function (e) {
return sdkVersion = JSON.parse(e.msg).version;
}).catch(function (e) {
return '';
});
}; // 获取 rtc_sdk.dll 内核版本号
var getSDKCoreVersion = async function getSDKCoreVersion() {
if (sdkCoreVersion) {
return sdkCoreVersion;
}
return callMethod$5('GetSDKCoreVersion', {}).then(function (e) {
return sdkCoreVersion = JSON.parse(e.msg).version;
}).catch(function (e) {
return '';
});
};
/**
* @function 设置默认的硬件设备,包括摄像头、麦克风以及扬声器
* @return Promise
*/
var setDefaultDevice$2 = async function setDefaultDevice(devices, operationType) {
// 设置默认的摄像头
if (devices && devices.camera) {
if (zbyAVSDK_device_checker_init.camera.list.length == 0) {
await getCameraDeviceList();
}
await setCameraDevice$1({
deviceId: devices.camera,
operationType: "".concat(operationType, "_1")
});
} else {
var cameraData = await getCameraDeviceList();
if (cameraData.length) {
var hasSetCamera = false;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = cameraData[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var item = _step.value;
if (item.isDefault) {
await setCameraDevice$1({
deviceId: item.deviceId,
operationType: "".concat(operationType, "_2")
});
hasSetCamera = true;
break;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
if (!hasSetCamera) {
await setCameraDevice$1({
deviceId: cameraData[0].deviceId,
operationType: "".concat(operationType, "_3")
});
}
}
} // 设置默认的麦克风
if (devices && devices.microphone) {
if (zbyAVSDK_device_checker_init.microphone.list.length == 0) {
await getMicrophoneDeviceList$1();
}
await setMicrophoneDevice$2({
deviceId: devices.microphone,
operationType: "".concat(operationType, "_1")
});
} else {
var microPhoneData = await getMicrophoneDeviceList$1();
try {
if (microPhoneData.length) {
var hasSetMicrophone = false;
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = microPhoneData[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var _item = _step2.value;
if (_item.isDefault) {
await setMicrophoneDevice$2({
deviceId: _item.deviceId,
operationType: "".concat(operationType, "_2")
});
hasSetMicrophone = true;
break;
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
if (!hasSetMicrophone) {
await setMicrophoneDevice$2({
deviceId: microPhoneData[0].deviceId,
operationType: "".concat(operationType, "_3")
});
}
}
} catch (e) {
console.log(e);
}
} // 设置默认的扬声器
if (devices && devices.speaker) {
await setSpeakerDevice$2({
deviceId: devices.speaker,
operationType: "".concat(operationType, "_1")
});
} else {
var speakerData = await getSpeakerDeviceListInternal();
if (speakerData.length) {
var hasSetSpeaker = false;
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = speakerData[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var _item2 = _step3.value;
if (_item2.isDefault) {
await setSpeakerDevice$2({
deviceId: _item2.deviceId,
operationType: "".concat(operationType, "_2")
});
hasSetSpeaker = true;
break;
}
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
if (!hasSetSpeaker) {
await setSpeakerDevice$2({
deviceId: speakerData[0].deviceId,
operationType: "".concat(operationType, "_3")
});
}
}
}
}; // 麦克风相关
/**
* @function 开启麦克风
* @param intervalMs: Number
* @return Promise | void
*/
var startMicrophone = async function startMicrophone() {
var intervalMs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 500;
isNoticeMicVolume = true;
isMicphoneClosed = false;
return callMethod$5('StartMicrophone', {
intervalMs: intervalMs
});
};
/**
* @function 关闭麦克风
* @return Promise | void
*/
var stopMicrophone = function stopMicrophone() {
isNoticeMicVolume = false;
isMicphoneClosed = true;
return callMethod$5('StopMicrophone', {});
};
var openOrCloseMicrophone = async function openOrCloseMicrophone(operation) {
if (operation) {
await startMicrophone();
} else {
await stopMicrophone();
}
};
/**
* @function 设置麦克风音量大小回调周期
* @param intervalMs: Number
* @return Promise | void
*/
var setMicphoneVolumInterval = function setMicphoneVolumInterval(intervalMs) {
return callMethod$5('SetMicphoneVolumInterval', {
intervalMs: intervalMs
});
};
/**
* @function 获取麦克风设备列表
* @return Promise | void
*/
var getMicrophoneDeviceListInternal = function getMicrophoneDeviceListInternal() {
return callMethod$5('GetMicrophoneDeviceList', {});
};
/**
* @function 获取麦克风列表
* @return Promise | void
*/
var getMicrophoneDeviceList$1 = async function getMicrophoneDeviceList() {
var defaultMicrophoneId = JSON.parse((await getDefaultMicrophone$1()).msg).deviceId;
var resp = await getMicrophoneDeviceListInternal();
var microphoneListArr = JSON.parse(JSON.parse(resp.msg).DeviceList) || [];
var microphoneList = [];
for (var i = 0, len = microphoneListArr.length; i < len; i++) {
microphoneList.push({
deviceId: microphoneListArr[i].id,
deviceName: microphoneListArr[i].name,
isDefault: defaultMicrophoneId === microphoneListArr[i].id
});
deviceListReport.micList[microphoneListArr[i].szDeviceId] = microphoneListArr[i].szDeviceName;
}
if (!window.zbyAVSDK_device_checker_init) {
window.zbyAVSDK_device_checker_init = {};
}
if (!window.zbyAVSDK_device_checker_init.microphone) {
window.zbyAVSDK_device_checker_init.microphone = {};
}
window.zbyAVSDK_device_checker_init.microphone.hasTest = true;
window.zbyAVSDK_device_checker_init.microphone.list = microphoneList;
defaultApi$1.writeLog("getMicrophoneDeviceList ".concat(JSON.stringify(microphoneList)));
return microphoneList;
};
/**
* @function 设置指定音频(当前麦克风)设备
* @param deviceId: String 音频设备 id,必选
* @return Promise | void
*/
var setCurrentMicrophoneDevice = function setCurrentMicrophoneDevice(deviceId) {
window.zbyAVSDK_device_checker_init.microphone.use = deviceId;
return callMethod$5('SetCurrentMicrophoneDevice', {
deviceId: deviceId
});
};
/**
* @function 指定麦克风设备
* @param deviceId: String 麦克风设备 id,必选
* @param operationType: String 操作类型,可选
* @return Promise | void
*/
var setMicrophoneDevice$2 = async function setMicrophoneDevice(args) {
defaultApi$1.writeLog('-> getMicrophoneDeviceList_microphoneListArr_tal_rtc_i');
var deviceId = args.deviceId,
operationType = args.operationType,
deviceState = args.deviceState,
changedDeviceId = args.changedDeviceId;
var deviceName = '';
var microPhoneData;
if (!deviceId) {
microPhoneData = await getMicrophoneDeviceList$1();
if (microPhoneData.length) {
var hasGetMicrophone = false;
var _iteratorNormalCompletion4 = true;
var _didIteratorError4 = false;
var _iteratorError4 = undefined;
try {
for (var _iterator4 = microPhoneData[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
var item = _step4.value;
if (item.isDefault) {
deviceId = item.deviceId;
deviceName = item.deviceName;
hasGetMicrophone = true;
break;
}
}
} catch (err) {
_didIteratorError4 = true;
_iteratorError4 = err;
} finally {
try {
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
_iterator4.return();
}
} finally {
if (_didIteratorError4) {
throw _iteratorError4;
}
}
}
if (!hasGetMicrophone) {
deviceId = microPhoneData[0].deviceId;
deviceName = microPhoneData[0].deviceName;
}
} else {
deviceId = '';
}
if (deviceId === '') {
NOTICE.noDevice({
deviceType: 'microphone'
});
}
}
try {
dataReport$2.setDevice({
device_type: 2,
device_id: deviceId,
device_name: deviceListReport.micList[deviceId],
operationType: operationType,
fore_state: operationType == 'hotPlug' ? +deviceState + 1 : '-'
});
window.zbyAVSDK_device_checker_init.microphone.name = deviceListReport.micList[deviceId];
} catch (e) {}
;
await setCurrentMicrophoneDevice(deviceId);
if (operationType == 'hotPlug' || operationType == 'deviceError') {
if (!microPhoneData) {
microPhoneData = await getMicrophoneDeviceList$1();
deviceName = deviceListReport.micList[deviceId];
}
NOTICE[operationType]({
deviceType: 'microphone',
useDeviceId: deviceId,
useDeviceName: deviceName,
deviceList: microPhoneData,
deviceState: deviceState,
changedDeviceId: changedDeviceId
});
}
};
/**
* @function 获取当前麦克风的音量
* @return Promise | void
*/
var formatVolumeMsg = function formatVolumeMsg(volume) {
return JSON.stringify({
ret: volume
});
};
var getCurrentMicrophoneVolume = function getCurrentMicrophoneVolume() {
return callMethod$5('GetCurrentMicrophoneVolume', {}).then(function (ret) {
var volume = 0;
try {
volume = Math.round(JSON.parse(ret.msg).microphoneVolume / 255 * 100);
} catch (e) {
console.error("zby-live-sdk: getCurrentMicrophoneVolume ret: ".concat(ret, ". error: ").concat(e));
}
return {
code: ret.code,
msg: formatVolumeMsg(volume)
};
});
};
/**
* @function 设置当前麦克风的音量
* @param volume: number 音量值
* @return Promise | void
*/
var setCurrentMicrophoneVolume = function setCurrentMicrophoneVolume(volume) {
return callMethod$5('SetCurrentMicrophoneVolume', {
volume: Math.round(volume / 100 * 255)
});
}; // 摄像头相关
/**
* @function 打开摄像头
* @param width: Number
* @param height: Number
* @return Promise | void
*/
var startCamera = function startCamera(width, height) {
return callMethod$5('StartCamera', {
width: width,
height: height,
streamId: localStreamId$1
});
};
/**
* @function 关闭摄像头
* @return Promise | void
*/
var stopCamera = function stopCamera() {
return callMethod$5('StopCamera', {
streamId: localStreamId$1
});
};
var openOrCloseCamera$1 = async function openOrCloseCamera(operation) {
if (operation) {
await startCamera();
} else {
await stopCamera();
}
};
/**
* @function 获取摄像头列表
* @return Promise | void
*/
var getCameraDeviceListInternal = function getCameraDeviceListInternal() {
return callMethod$5('GetCameraDeviceList', {});
};
/**
* @function 获取摄像头列表
* @return Promise | void
*/
var getCameraDeviceList = async function getCameraDeviceList() {
var resp = await getCameraDeviceListInternal();
var videoListArr = JSON.parse(JSON.parse(resp.msg).DeviceList) || [];
var videoList = [];
for (var i = 0, len = videoListArr.length; i < len; i++) {
var nameForChecking = videoListArr[i].name.toLowerCase();
var checkIfIsDefaultFromName = nameForChecking.indexOf('built-in') >= 0 || nameForChecking.indexOf('builtin') >= 0 || nameForChecking.indexOf('default') >= 0 || nameForChecking.indexOf('默认') >= 0 || nameForChecking.indexOf('默認') >= 0;
videoList.push({
deviceId: videoListArr[i].id,
deviceName: videoListArr[i].name,
isDefault: videoListArr[i].default || checkIfIsDefaultFromName
});
deviceListReport.cameraList[videoListArr[i].szDeviceId] = videoListArr[i].szDeviceName;
}
if (!window.zbyAVSDK_device_checker_init) {
window.zbyAVSDK_device_checker_init = {};
}
if (!window.zbyAVSDK_device_checker_init.camera) {
window.zbyAVSDK_device_checker_init.camera = {};
}
window.zbyAVSDK_device_checker_init.camera.hasTest = true;
window.zbyAVSDK_device_checker_init.camera.list = videoList;
return videoList;
};
/**
* @function 设置指定视频(当前摄像头)设备
* @param deviceId: String 视频设备 id,必选
* @return Promise | void
*/
var setCurrentCameraDeviceInternal = function setCurrentCameraDeviceInternal(deviceId) {
var streamId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : localStreamId$1;
window.zbyAVSDK_device_checker_init.camera.use = deviceId;
return callMethod$5('SetCurrentCameraDevice', {
streamId: streamId,
deviceId: deviceId
});
};
/**
* @function 指定使用的摄像头
* @param deviceId: String 摄像头 id,必选
* @param operationType: String 操作类型,可选
* 'device_error' -> 设备出错处理,'plug_and_unplug' -> 热插拔处理,
* 不传即是普通的设置摄像头设备的行为
* @return Promise | void
*/
var setCameraDevice$1 = async function setCameraDevice(args) {
defaultApi$1.writeLog("setCameraDevice ".concat(JSON.stringify(args), " enableLocalCapture: ").concat(enableLocalCapture));
var deviceId = args.deviceId,
operationType = args.operationType,
deviceState = args.deviceState,
code = args.code,
changedDeviceId = args.changedDeviceId,
streamId = args.streamId;
if (!enableLocalCapture) {
window.zbyAVSDK_device_checker_init.camera.use = deviceId;
window.zbyAVSDK_device_checker_init.camera.name = deviceListReport.cameraList[deviceId];
return;
}
var deviceName = '';
var cameraData = await getCameraDeviceList();
if (cameraData.length) {
var defaultDevice;
var _iteratorNormalCompletion5 = true;
var _didIteratorError5 = false;
var _iteratorError5 = undefined;
try {
for (var _iterator5 = cameraData[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
var item = _step5.value;
if (deviceId && item.deviceId === deviceId) {
deviceName = item.deviceName;
break;
}
if (item.isDefault) {
defaultDevice = item;
}
}
} catch (err) {
_didIteratorError5 = true;
_iteratorError5 = err;
} finally {
try {
if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
_iterator5.return();
}
} finally {
if (_didIteratorError5) {
throw _iteratorError5;
}
}
}
if (!defaultDevice) {
defaultDevice = cameraData[0];
}
if (!deviceId || !deviceName) {
NOTICE.deviceError({
code: -2,
msg: '设备ID无效',
deviceId: deviceId,
deviceName: deviceName
});
deviceId = defaultDevice.deviceId;
deviceName = defaultDevice.deviceName;
}
} else {
deviceId = '';
}
if (deviceId === '') {
NOTICE.noDevice({
deviceType: 'camera'
});
}
window.zbyAVSDK_device_checker_init.camera.use = deviceId;
window.zbyAVSDK_device_checker_init.camera.name = deviceListReport.cameraList[deviceId];
try {
dataReport$2.setDevice({
device_type: 1,
device_id: deviceId,
device_name: deviceListReport.cameraList[deviceId],
operationType: operationType,
fore_state: operationType == 'hotPlug' ? deviceState + 1 : '-'
});
} catch (e) {}
;
await setCurrentCameraDeviceInternal(deviceId, streamId);
if (fourthStreamUsingCamera && fourthStreamId && !streamId) {
await setCurrentCameraDeviceInternal(deviceId, fourthStreamId);
}
if (operationType == 'hotPlug' || operationType == 'deviceError') {
if (!cameraData) {
cameraData = await getCameraDeviceList();
deviceName = deviceListReport.cameraList[deviceId];
}
NOTICE[operationType]({
deviceType: 'camera',
useDeviceId: deviceId,
useDeviceName: deviceName,
deviceList: cameraData,
messge: code,
deviceState: deviceState,
changedDeviceId: changedDeviceId
});
}
try {
NOTICE.useredCamera({
deviceId: deviceId,
deviceName: deviceName
});
} catch (e) {}
;
};
/**
* @function 获取当前摄像头 id
* @return Promise | void
*/
var GetCurrentCameraId = function GetCurrentCameraId() {
return callMethod$5('GetCurrentCameraId', {});
}; // 扬声器相关
/**
* @function 获取扬声器列表
* @return Promise | void
*/
var getAudioDeviceList$1 = function getAudioDeviceList() {
return callMethod$5('GetAudioDeviceList', {});
};
/**
* @function 获取系统默认的音频设备
* @param deviceType: Number 音频设备类型,0 -> 麦克风,1 -> 扬声器,必选
* @return Promise | void
*/
var getDefaultAudioDeviceId$1 = function getDefaultAudioDeviceId(deviceType) {
return callMethod$5('GetDefaultAudioDeviceId', {
deviceType: deviceType,
// 以下两个参数仅仅是为了向下向后兼容,使用 hardcore 即可
deviceId: '',
deviceIdLength: 0
});
};
/**
* @function 获取系统默认的麦克风设备 id
* @return Promise
*/
var getDefaultMicrophone$1 = function getDefaultMicrophone() {
return getDefaultAudioDeviceId$1(0);
};
/**
* @function 获取系统默认的扬声器设备 id
* @return Promise
*/
var getDefaultSpeaker$1 = function getDefaultSpeaker() {
return getDefaultAudioDeviceId$1(1);
};
/**
* @function 获取扬声器设备列表
* @return Promise | void
*/
var getSpeakerDeviceListInternal = function getSpeakerDeviceListInternal() {
return callMethod$5('GetSpeakerDeviceList', {});
};
/**
* @function 获取扬声器列表
* @return Promise | void
*/
var getSpeakerDeviceList$1 = async function getSpeakerDeviceList() {
var defaultSpeakerId = JSON.parse((await getDefaultSpeaker$1()).msg).deviceId;
var resp = await getSpeakerDeviceListInternal();
var speakerListArr = JSON.parse(JSON.parse(resp.msg).DeviceList) || [];
var speakerList = [];
for (var i = 0, len = speakerListArr.length; i < len; i++) {
speakerList.push({
deviceId: speakerListArr[i].id,
deviceName: speakerListArr[i].name,
isDefault: defaultSpeakerId === speakerListArr[i].id
});
deviceListReport.speakerList[speakerListArr[i].szDeviceId] = speakerListArr[i].szDeviceName;
}
if (!window.zbyAVSDK_device_checker_init) {
window.zbyAVSDK_device_checker_init = {};
}
if (!window.zbyAVSDK_device_checker_init.speaker) {
window.zbyAVSDK_device_checker_init.speaker = {};
}
window.zbyAVSDK_device_checker_init.speaker.hasTest = true;
window.zbyAVSDK_device_checker_init.speaker.list = speakerList;
return speakerList;
};
/**
* @function 设置指定音频(当前扬声器)设备
* @param deviceId: String 音频设备 id,必选
* @return Promise | void
*/
var setCurrentSpeakerDevice = function setCurrentSpeakerDevice(deviceId) {
window.zbyAVSDK_device_checker_init.speaker.use = deviceId;
return callMethod$5('SetCurrentSpeakerDevice', {
deviceId: deviceId
}).then(function (result) {
if (result.code === 0) {
NOTICE.speakerChanged({
deviceId: deviceId
});
}
return result;
});
};
/**
* 获取当前扬声器设备id
* @return {String} 当前扬声器设备id
*/
var getCurrentSpeakerDevice$1 = function getCurrentSpeakerDevice() {
defaultApi$1.writeLog("avsdk TALSDK::getSpeakerDevice ".concat(usingAudioDeviceId$1.speaker));
return usingAudioDeviceId$1.speaker;
};
/**
* @function 指定扬声器
* @param deviceId: String 扬声器 id,必选
* @param operationType:String 操作类型,可选
* 'device_error' -> 设备出错处理,'plug_and_unplug' -> 热插拔处理,
* 不传即是普通的设置扬声器设备的行为
* @return Promise | void
*/
var setSpeakerDevice$2 = async function setSpeakerDevice(args) {
defaultApi$1.writeLog("".concat(JSON.stringify(args), "----setSpeakerDevice-talrtc----"));
var deviceId = args.deviceId,
operationType = args.operationType,
deviceState = args.deviceState,
code = args.code,
changedDeviceId = args.changedDeviceId;
var deviceName = '';
var speakerData;
if (!deviceId) {
speakerData = await getSpeakerDeviceList$1();
if (speakerData.length) {
var hasGetSpeaker = false;
var _iteratorNormalCompletion6 = true;
var _didIteratorError6 = false;
var _iteratorError6 = undefined;
try {
for (var _iterator6 = speakerData[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
var item = _step6.value;
if (item.isDefault) {
deviceId = item.deviceId;
deviceName = item.deviceName;
hasGetSpeaker = true;
break;
}
}
} catch (err) {
_didIteratorError6 = true;
_iteratorError6 = err;
} finally {
try {
if (!_iteratorNormalCompletion6 && _iterator6.return != null) {
_iterator6.return();
}
} finally {
if (_didIteratorError6) {
throw _iteratorError6;
}
}
}
if (!hasGetSpeaker) {
deviceId = speakerData[0].deviceId;
deviceName = speakerData[0].deviceName;
}
} else {
deviceId = '';
}
if (deviceId === '') {
NOTICE.noDevice({
deviceType: 'speaker'
});
}
}
try {
dataReport$2.setDevice({
device_type: 3,
device_id: deviceId,
device_name: deviceListReport.speakerList[deviceId],
operationType: operationType,
fore_state: operationType == 'hotPlug' ? deviceState + 1 : '-'
});
window.zbyAVSDK_device_checker_init.speaker.name = deviceListReport.speakerList[deviceId];
} catch (e) {
console.log(e);
}
;
usingAudioDeviceId$1.speaker = deviceId;
await setCurrentSpeakerDevice(deviceId);
if (operationType == 'hotPlug' || operationType == 'deviceError') {
if (!speakerData) {
speakerData = await getSpeakerDeviceList$1();
deviceName = deviceListReport.speakerList[deviceId];
}
NOTICE[operationType]({
deviceType: 'speaker',
useDeviceId: deviceId,
useDeviceName: deviceName,
deviceList: speakerData,
message: code,
deviceState: deviceState,
changedDeviceId: changedDeviceId
});
}
};
/**
* @function 获取当前扬声器的音量
* @returns {Promise<number>}
*/
var getCurrentSpeakerVolume = function getCurrentSpeakerVolume() {
return callMethod$5('GetCurrentSpeakerVolume', {}).then(function (ret) {
var volume = 0;
try {
volume = Math.round(JSON.parse(ret.msg).speakerVolume / 255 * 100);
} catch (e) {
console.error("zby-live-sdk: getCurrentSpeakerVolume ret: ".concat(ret, ". error: ").concat(e));
}
return volume;
});
};
/**
* @function 是否存在媒体流
* @param streamId
* @returns {boolean}
*/
var hasStream$2 = function hasStream(streamId) {
return Object.keys(streamIdToPreviewId$2).includes(streamId);
};
/**
* @function 获取当前视频流的通道
* @param streamId 流 id
* @return channelIndex
*/
var getChannelIndex$1 = function getChannelIndex(streamId) {
defaultApi$1.writeLog("avsdk TALSDK::getChannelIndex streamId: ".concat(streamId, " ").concat(JSON.stringify(streamIdToPreviewId$2)));
return streamIdToPreviewId$2[streamId];
};
/**
* @function 获取当前视频流所有的通道
* @param streamId 流 id
* @return channelIndex
*/
var getAllChannelIndex$1 = function getAllChannelIndex() {
defaultApi$1.writeLog("avsdk TALSDK::getAllChannelIndex ".concat(JSON.stringify(streamIdToPreviewId$2)));
return streamIdToPreviewId$2;
};
/**
* @function 设置当前扬声器音量
* @param volume: number 音量值
* @return Promise | void
*/
var setCurrentSpeakerVolume = function setCurrentSpeakerVolume(volume) {
return callMethod$5('SetCurrentSpeakerVolume', {
volume: Math.round(volume / 100 * 255)
});
};
/**
* @function 设置扬声器静音
* @param mute: Boolean 必选
* @return Promise | void
*/
var setSpeakerDeviceMute$1 = function setSpeakerDeviceMute(mute) {
return callMethod$5('SetSpeakerDeviceMute', {
deviceId: usingAudioDeviceId$1.speaker,
mute: mute
});
};
/**
* @function 获取当前应用程序音量
* @return Promise | void
*/
var getSpeakerSimpleVolume$1 = function getSpeakerSimpleVolume() {
return callMethod$5('GetSpeakerSimpleVolume', {
deviceId: usingAudioDeviceId$1.speaker
}).then(function (ret) {
var volume = 0;
try {
volume = Math.round(JSON.parse(ret.msg).speakerVolume / 255 * 100);
} catch (e) {
console.error("zby-live-sdk: getSpeakerSimpleVolume ret: ".concat(ret, ". error: ").concat(e));
}
return volume;
});
};
/**
* @function 设置当前应用程序音量
* @param volume: Number 应用程序音量,必选
* @return Promise | void
*/
var setSpeakerSimpleVolume$1 = function setSpeakerSimpleVolume(volume) {
return callMethod$5('SetSpeakerSimpleVolume', {
deviceId: usingAudioDeviceId$1.speaker,
volume: Math.round(volume / 100 * 255)
});
};
/**
* @function 设置当前应用程序静音
* @param mute: Boolean 是否静音,必选
* @return Promise | void
*/
var setSpeakerSimpleMute$1 = function setSpeakerSimpleMute(mute) {
return callMethod$5('SetSpeakerSimpleMute', {
deviceId: usingAudioDeviceId$1.speaker,
mute: mute
});
};
var enableAudioSpeakerCapture = function enableAudioSpeakerCapture(capture) {
setSystemAudioLoopback(capture);
};
/**
* @function 打开系统声音采集
* @enable true|false
* @return Promise | void
*/
var setSystemAudioLoopback = function setSystemAudioLoopback(enable) {
isSpeakerCapturing = enable;
if (enable) {
return setAudioType(6, localStreamId$1);
} else {
return setAudioType(1, localStreamId$1);
} // return callMethod('SetAudioSpeakerCapture', {
// enable,
// });
};
/**
* @function 录制转推对外接口
* @param type: String start/stop 必选
* @param targetUrl: String 转推地址(支持 RTMP) 必选
* @return Promise | void
*/
var controlCdnStreaming = async function controlCdnStreaming(type) {
var targetUrl = 'rtmp://media-push-ali-test.livecloud.eaydu.com/testlive/210926-11?key=75c868672113df0063430e9e47fb2a60&appId=zt10001&bizId=zt10001AI&cdn=1';
defaultApi$1.writeLog("avsdk TALRTC::controlCdnStreaming targetUrl: ".concat(targetUrl, " type: ").concat(type));
if (type === 'start') {
return addPublishRtmpStreamUrl(targetUrl);
}
if (type === 'stop') {
return removePublishStreamUrl(targetUrl);
}
};
/**
* @function SEI 消息
* @param data: String 数据
* @param dataSize: Number 数据长度
* @param repeatCount: Number 重试次数
* @return Promise | void
*/
var sendSEIMsg = function sendSEIMsg(data) {
return callMethod$5('SendSEIMsg', {
data: data,
dataSize: data.length,
repeatCount: 3
});
};
/**
* @function 开始屏幕采集
* @return Promise | void
*/
var startScreenCapture = function startScreenCapture() {
return callMethod$5('StartScreenCapture', {});
};
/**
* @function 停止屏幕采集
* @return Promise | void
*/
var stopScreenCapture = function stopScreenCapture() {
return callMethod$5('StopScreenCapture', {});
};
var setPreviewStreamId = function setPreviewStreamId(streamId) {
return callMethod$5('SetPreviewStreamId', {
streamId: streamId
});
}; // 推拉流相关
/**
* @function 开启本地或者远程的视频视图
* @param isLocal: Boolean 是否是本地的视频预览,必选
* @param streamId: String 要拉取的视频流的 id,可选,只有拉取远程的视频流的时候才是必选的
* @param domId: String <video> 标签的 id,可选
* 如果传了 domId,就把视频绑定到对应的 <video> 标签上
* @return Promise 可从 Promise 中获取 src,Promise.then((src) => {})
*/
var startLocalOrRemotePreview$2 = async function startLocalOrRemotePreview(isLocal, streamId, domId, isTeacherNewWindowPreview) {
defaultApi$1.writeLog("avsdk TALSDK::startLocalOrRemotePreview streamId: ".concat(streamId, ", isLocal: ").concat(isLocal));
var isUpdateChromeVersion = await util.getChromeVersion();
var externalConstraints = {
audio: false,
video: {
mandatory: {
chromeMediaSource: 'external',
chromeMediaSourceId: "ems://talrtc_ext/".concat(isLocal || isTeacherNewWindowPreview ? -2 : streamId),
maxWidth: 3840,
maxHeight: 2160,
minWidth: 240,
minHeight: 180
}
}
};
defaultApi$1.writeLog("externalConstraints ".concat(JSON.stringify(externalConstraints)));
if (isLocal) {
await setPreviewStreamId(streamId || localStreamId$1);
}
return new Promise(function (resolve, reject) {
var handleExternalSuccess = function handleExternalSuccess(stream) {
defaultApi$1.writeLog("".concat(stream, "----stream-talrtc----"));
stream.oninactive = function () {
defaultApi$1.writeLog('Stream inactive');
};
var src = isUpdateChromeVersion ? stream : window.URL.createObjectURL(stream);
if (domId && document.querySelector(domId)) {
if (isUpdateChromeVersion) {
document.querySelector(domId).srcObject = stream;
console.log('内核升级1', domId, document.querySelector(domId), document.querySelector(domId).srcObject, src);
} else {
console.log('内核升级2');
document.querySelector(domId).src = window.URL.createObjectURL(stream);
}
}
defaultApi$1.writeLog("-> setVidoeSrc, streamId:".concat(streamId, ", domId: ").concat(domId, ", src: ").concat(src));
resolve(src);
};
var handleExternalError = function handleExternalError(error) {
if (error.name === 'ConstraintNotSatisfiedError') {
console.error('ConstraintNotSatisfiedError');
} else if (error.name === 'PermissionDeniedError') {
console.error('Permissions have not been granted to use your camera and ' + 'microphone, you need to allow the page access to your devices in ' + 'order for the demo to work.');
}
console.error("getUserMedia error: ".concat(error.name), error);
if (domId) {
document.querySelector(domId).src = '';
}
reject('');
};
if (navigator.webkitGetUserMedia) {
navigator.webkitGetUserMedia(externalConstraints, handleExternalSuccess, handleExternalError);
}
});
};
/**
*
* @param {number} type 0:接管模式,输出头像视频;1:非接管模式,输出播放器视频
* @returns
*/
var setVideoCallback$1 = function setVideoCallback(type) {
defaultApi$1.writeLog("avsdk TALSDK::setVideoCallback type: ".concat(type));
return callMethod$5('SetVideoCallback', {
type: type
});
};
/**
* @function 开始推流
* @param streamId: String 流 id
* @return Promise | void
*/
var startPush$1 = async function startPush() {
var streamId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : localStreamId$1;
var idx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
defaultApi$1.writeLog("avsdk TALSDK::startPush streamId: ".concat(streamId, ", idx: ").concat(idx));
localStreamIdMap[idx] = streamId;
if (idx === 3 && fourthStreamUsingCamera) {
setFourthStreamType$1(6, streamId);
}
try {
if (!isFirstHeartBeatReport$2) {
isFirstHeartBeatReport$2 = true;
heartBeatDataReport$2('start');
}
} catch (error) {}
var muteAudio = localStreamMuteStatus.audio;
var muteVideo = localStreamMuteStatus.video;
return callMethod$5('StartPush', {
streamId: streamId,
muteAudio: muteAudio,
muteVideo: muteVideo,
muteDefaultAudio: classMode === 1 || classMode === 2,
muteDefaultVideo: classMode === 1 || classMode === 2
});
};
/**
* @function 停止推流
* @param streamId: String 流 id
* @return Promise | void
*/
var stopPush$1 = function stopPush(streamId) {
if (!streamId) {
streamId = localStreamId$1;
}
if (streamId === screenStreamId$1) {
isScreenSharing = false;
}
defaultApi$1.writeLog("avsdk TALSDK::stopPush streamId: ".concat(streamId));
var idx = localStreamIdMap.indexOf(streamId);
if (idx > -1) {
delete localStreamIdMap[idx];
}
return callMethod$5('StopPush', {
streamId: streamId
});
};
/**
* @function 不推/推 音频, 自研引擎需要流id
* @param mute: bool
* @return Promise | void
*/
var muteLocalAudio$1 = function muteLocalAudio(mute) {
defaultApi$1.writeLog("avsdk TALSDK::muteLocalAudio mute: ".concat(mute, ", localStreamId: ").concat(localStreamId$1));
localStreamMuteStatus.audio = mute;
return callMethod$5('MuteLocalAudio', {
mute: mute,
streamId: localStreamId$1
});
};
/**
* @function 不推/推 视频
* @param mute: bool
* @return Promise | void
*/
var muteLocalVideo$1 = function muteLocalVideo(mute) {
var streamId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : localStreamId$1;
defaultApi$1.writeLog("avsdk TALSDK::muteLocalVideo mute: ".concat(mute));
localStreamMuteStatus.video = mute;
return callMethod$5('MuteLocalVideo', {
mute: mute,
streamId: streamId
});
};
/**
* @function 开始转推本地摄像头 TALRTC 流至 RTMP。目前只支持转推 1 路
* @return Promise | void
*/
var addPublishRtmpStreamUrl = function addPublishRtmpStreamUrl(url) {
defaultApi$1.writeLog("avsdk TALSDK::addPublishRtmpStreamUrl url: ".concat(url));
return callMethod$5('AddPublishRtmpStreamUrl', {
url: url
});
};
/**
* @function 停止转推 RTMP
* @return Promise | void
*/
var removePublishStreamUrl = function removePublishStreamUrl(url) {
defaultApi$1.writeLog("avsdk TALSDK::removePublishStreamUrl url: ".concat(url));
return callMethod$5('RemovePublishStreamUrl', {
url: url
});
};
/**
* @function 开始拉流
* @param {string} streamId 流 id
* @return {Promise} Promise | void
*/
var startPlay = function startPlay(streamId, muteAudio, muteVideo) {
if (typeof muteAudio === 'undefined') {
muteAudio = getStreamMuteStatus(streamId, 'audio');
}
if (typeof muteVideo === 'undefined') {
muteVideo = getStreamMuteStatus(streamId, 'video');
}
defaultApi$1.writeLog("avsdk TALSDK::startPlay streamId: ".concat(streamId, ", muteAudio: ").concat(muteAudio, ", muteVideo: ").concat(muteVideo));
audioPullingStore.setData(streamId, {
muted: muteAudio
});
videoPullingStore.setData(streamId, {
muted: muteVideo
});
return callMethod$5('StartPlay', {
myStreamId: localStreamId$1,
streamId: streamId,
muteAudio: muteAudio,
muteVideo: muteVideo,
muteDefaultAudio: classMode === 1 || classMode === 2,
muteDefaultVideo: classMode === 1 || classMode === 2
}).then(function () {
setStreamMuteStatus(streamId, 'audio', muteAudio);
setStreamMuteStatus(streamId, 'video', muteVideo);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return args;
});
};
/**
* @function 初始化拉流
* @param {string} streamId:String 从传来的信道消息中获取,必选
* @param {string} domId:String <video> 标签的 id,可选
* 如果传了就把视频绑定到对应的 <video> 标签上
* @param pInfo:String 多媒体流附加信息,可选,默认为 'none'
* @return src:String 视频预览地址
*/
var initPullFlow$2 = async function initPullFlow(streamId, domId, mute, pInfo, notAutoPlay, audioOnly) {
defaultApi$1.writeLog("TALRTC::initPullFlow_start , streamId :".concat(streamId, ", notAutoPlay: ").concat(notAutoPlay, ", audioOnly: ").concat(audioOnly));
var playChannel;
resetStreamIdRtcPlayerInfo1$2(streamId);
resetStreamIdRtcPlayerInfo$2(streamId);
try {
if (!isFirstHeartBeatReport$2) {
isFirstHeartBeatReport$2 = true;
heartBeatDataReport$2('start');
}
} catch (error) {}
if (streamIdToPreviewId$2[streamId] == undefined) {
defaultApi$1.writeLog("TALRTC:: The streamId queue does not contain this streamId ".concat(uiChnIndexs$1));
var arr = streamId.split('_');
var _arr = _slicedToArray(arr, 3),
_userId = _arr[2];
if (String(_userId).toUpperCase() === String(lecturerUid$1)) {
playChannel = arr.length === 4 ? chnTotal$1 : chnTotal$1 + 1; // 主流使用50,辅流使用51
} else {
if (uiChnIndexs$1.length === 0) {
defaultApi$1.writeLog('TALRTC:: all channel are used', null, 'error');
delete streamIdRtcPlayerInfo$2[streamId];
NOTICE.overMaxConnect({
streamId: streamId,
message: 'reach max connect'
});
return {
videoSrc: '',
playerId: -2
};
}
playChannel = uiChnIndexs$1.pop();
}
streamIdToPreviewId$2[streamId] = playChannel;
} else {
defaultApi$1.writeLog("TALRTC::The streamId queue contains this streamId: ".concat(streamId));
playChannel = streamIdToPreviewId$2[streamId]; // console.log('streamIdIsExited',playChannel,streamIdToPreviewId[streamId],uiChnIndexs);
await stopPlay(streamId);
resetStreamIdRtcPlayerInfo$2(streamId);
} // 判断是否创建或者获取播放通道成功,不成功就删掉重试
if (playChannel == undefined) {
delete streamIdToPreviewId$2[streamId];
defaultApi$1.writeLog('TALRTC:: uiChnIndex is not exist', null, 'error');
return initPullFlow(streamId, domId, mute, pInfo, notAutoPlay, audioOnly);
}
previewIdToStreamId$1[playChannel] = streamId;
/**
* 将 muteRemote 参数耦合进startPlay,减少异步调用,降低黑屏概率
*/
// 是否拉取声音
// await muteRemoteAudio(streamId, !!mute);
// // 是否拉取画面
// await muteRemoteVideo(streamId, !!audioOnly);
var videoSrc = await startLocalOrRemotePreview$2(false, streamId, domId);
if (!notAutoPlay) {
await startPlay(streamId, !!mute, !!audioOnly);
}
return {
videoSrc: videoSrc,
playerId: playChannel
};
};
/**
* @function 开始连麦
* @param mode: number 采集器默认, 默认0=站立 1=坐立
* @return Promise | void
*/
var teacherStartLinkMic$2 = async function teacherStartLinkMic() {
var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
await startMicrophone();
if (mode === 0) {
await muteLocalVideo$1(true, localStreamId$1);
await setMicrophoneDevice$2({}); // await muteStreamAudio(false);
await muteLocalAudio$1(false);
} else {
// await muteLocalVideo(false, localStreamId);
await muteLocalAudio$1(false);
}
};
/**
* @function 结束连麦
* @param mode:number 采集器默认, 默认0=站立 1=坐立
* @return Promise | void
*/
var teacherStopLinkMic$2 = async function teacherStopLinkMic() {
var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
await stopMicrophone();
if (mode === 0) {
await muteLocalAudio$1(true);
} else {
await setSystemAudioLoopback(false);
}
};
/**
* @function 停止拉流
* @param streamId: String 流 id
* @return Promise | void
*/
var stopPlay = function stopPlay(streamId, recovery) {
var id = streamIdToPreviewId$2[streamId];
delete streamIdRtcPlayerInfo$2[streamId];
if (recovery && (id || id === 0) && !uiChnIndexs$1.includes(id)) {
defaultApi$1.writeLog("avsdk TALRTC::stopPlayStream streamId: ".concat(streamId, " id: ").concat(id, " uiChnIndexs: ").concat(uiChnIndexs$1));
if (id === chnTotal$1 || id === chnTotal$1 + 1) {
defaultApi$1.writeLog("".concat(streamId, " is teacher's main or sub stream, do not push to uiChnIndexs."));
} else {
uiChnIndexs$1.push(id);
}
delete streamIdToPreviewId$2[streamId];
delete previewIdToStreamId$1[id];
}
audioPullingStore.delete(streamId);
videoPullingStore.delete(streamId);
return callMethod$5('StopPlay', {
streamId: streamId
});
};
/**
* @function 停止拉所有的流
* @return Promise | void
*/
var stopPlayAll = function stopPlayAll() {
streamIdRtcPlayerInfo$2 = {};
streamIdToPreviewId$2 = {};
previewIdToStreamId$1 = {};
uiChnIndexs$1.length = chnTotal$1;
uiChnIndexs$1.fill(0).forEach(function (value, index, array) {
array[index] = array.length - (index + 1);
});
audioPullingStore.restore();
videoPullingStore.restore();
return callMethod$5('StopPlayAll', {});
};
/**
* @function 切换播放流
* @param streamId: String 需要停止流的 id,必选
* @param toStreamId: String 被拉取的流的 id,必选
* @param toDomId: String <video> 标签的 id,可选
* @return Promise | void
*/
var changePullFlow$2 = async function changePullFlow(streamId, toStreamId, toDomId) {
await stopPlay(streamId);
return initPullFlow$2(toStreamId, toDomId);
};
/**
* @function 是否拉取音频流--通过播放器id控制
* @param mute: Boolean,必选,true -> 不拉取,false -> 拉取,必选
* @param playerId: Number,必选,播放器 id
* @return Promise | void
*/
var pullAudioFlow$2 = function pullAudioFlow(playerId, mute, streamid) {
defaultApi$1.writeLog("pullAudioFlow -- playerId ".concat(playerId, " operation ").concat(mute, " streamId ").concat(streamid));
if (streamid) {
if (streamIdToPreviewId$2[streamid] == undefined) {
NOTICE.pullAudioFlowError({
streamid: streamid
});
return;
} else {
playerId = streamIdToPreviewId$2[streamid];
defaultApi$1.writeLog("pullAudioFlow-playerId ".concat(playerId, ", ").concat(JSON.stringify(streamIdToPreviewId$2)));
}
}
var streamId = previewIdToStreamId$1[playerId];
try {
streamIdRtcPlayerInfo1$2[streamId].audio_type = !mute;
defaultApi$1.writeLog("pullAudioFlow, ".concat(streamId, " ::previewIdToStreamId', ").concat(JSON.stringify(previewIdToStreamId$1), " ::streamIdRtcPlayerInfo1 ").concat(JSON.stringify(streamIdRtcPlayerInfo1$2)));
} catch (e) {
defaultApi$1.writeLog("pullAudioFlow ::streamIdRtcPlayerInfo1--error ".concat(JSON.stringify(e)), null, 'error');
}
try {
dataReport$2.setPullVoice({
code: +!mute,
pull_uid: util.getUidByStreamId(streamId),
pull_streamid: streamId,
playerId: playerId // operator:'client'
});
} catch (e) {}
;
return muteRemoteAudio(streamId, mute);
};
/**
* @function 设置镜像状态(预览)
* @param { 0 | 1 | 2 | 3 } mode 0: 预览启用镜像,推流不启用镜像; 1: 预览启用镜像,推流启用镜像; 2: 预览不启用镜像,推流不启用镜像; 3: 预览不启用镜像,推流启用镜像
* @return {Promise}
*/
var setMirrorStatus$2 = function setMirrorStatus(mode) {
var realId = mode == 0 ? 2 : 1;
defaultApi$1.writeLog("avsdk TALRTC::setMirrorStatus, mode: ".concat(mode, ", streamId:").concat(localStreamId$1, ", realId:").concat(realId));
return callMethod$5('SetMirrorStatus', {
mode: realId,
streamId: localStreamId$1
});
};
/**
* @function 设置拉流镜像状态
* @param { boolean } type true=开启 false=关闭
* @return: Promise
*/
var setPlayViewMirror$1 = function setPlayViewMirror(isMirror, id) {
return callMethod$5('SetPlayViewMirror', {
isMirror: isMirror,
streamId: id
});
};
/**
* @function 开启预览
* @param idx: Number 推流通道,可选,默认为 0
* @return Promise | void
*/
var startPreview$2 = function startPreview(idx) {
if (typeof idx === 'undefined') {
idx = 0;
}
return callMethod$5('StartPreview', {
idx: idx
});
};
/**
* @function 停止预览
* @param idx: Number 推流通道,可选,默认为 0
* @return Promise | void
*/
var stopPreview$2 = function stopPreview(idx) {
if (typeof idx === 'undefined') {
idx = 0;
}
return callMethod$5('StopPreview', {
idx: idx
});
};
/**
* @function 不拉/拉 音频
* @param streamId: string
* @param mute: bool
* @return Promise | void
*/
var muteRemoteAudio = function muteRemoteAudio(streamId, mute) {
return callMethod$5('MuteRemoteAudio', {
streamId: streamId,
mute: mute
}).then(function () {
var audio = audioPullingStore.getData(streamId);
if (audio) {
audio.muted = mute;
}
setStreamMuteStatus(streamId, 'audio', mute);
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
return args;
});
};
/**
* @function 不拉/拉 视频
* @param streamId: string
* @param mute: bool
* @return Promise | void
*/
var muteRemoteVideo = function muteRemoteVideo(streamId, mute) {
return callMethod$5('MuteRemoteVideo', {
streamId: streamId,
mute: mute
}).then(function () {
var video = videoPullingStore.getData(streamId);
if (video) {
video.muted = mute;
}
setStreamMuteStatus(streamId, 'video', mute);
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments[_key3];
}
return args;
});
};
/**
* @function 设置外部采集设备模块
* @param {boolean} enable 是否开启外部采集设备模块
* @param {string} streamId
* @param {number} video_source 0:屏幕采集 1:player采集
* @attention
* @return Promise | void
*/
var enableExternalVideoSource = function enableExternalVideoSource() {
var enable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var streamId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : localStreamId$1;
var video_source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
defaultApi$1.writeLog('avsdk TALRTC::EnableExternalVideoSource');
return callMethod$5('EnableExternalVideoSource', {
enable: enable,
streamId: streamId,
video_source: video_source
});
};
var setFourthStreamType$1 = function setFourthStreamType(type, streamId) {
defaultApi$1.writeLog("avsdk TALRTC::SetFourthStreamType type:".concat(type, " streamId:").concat(streamId));
if (!streamId) {
defaultApi$1.writeLog('avsdk TALRTC::SetFourthStreamType - streamId is null', null, 'error');
throw new Error('streamId is null');
}
fourthStreamId = streamId;
if (type === 6) {
fourthStreamUsingCamera = true;
setAudioType(7, streamId);
enableExternalVideoSource(false, streamId, 1);
setCurrentCameraDeviceInternal(window.zbyAVSDK_device_checker_init.camera.use, streamId);
} else if (type === 7) {
fourthStreamUsingCamera = false;
setAudioType(8, streamId);
enableExternalVideoSource(true, streamId, 1);
} else {
defaultApi$1.writeLog('avsdk TALRTC::SetFourthStreamType - type error', null, 'error');
throw new Error('type error');
}
}; //设置音频数据来源
var setAudioAuxSource$1 = function setAudioAuxSource(source) {
defaultApi$1.writeLog('avsdk TALRTC::setAudioAuxSource');
return callMethod$5('SetAudioAuxSource', {
source: source
});
};
/**
* RTC流音频类型
* @param {number} type 音频类型 0:静音 / 1:麦克风 / 2:拉流的声音 / 3:1+2 / 4:麦克风+扬声器+2 5: 扬声器 6: 麦克风+扬声器 7:麦克风+2 8: player插件音频
* @param {string} streamId 流
* @returns {Promise<void>}
*/
var setAudioType = function setAudioType(type, streamId) {
defaultApi$1.writeLog('avsdk TALRTC::SetAudioType');
if (!streamId) {
streamId = screenStreamId$1;
}
return callMethod$5('SetAudioType', {
streamId: streamId,
type: type
});
};
/**
*
* @param {boolean} enable
* @param {number} type
* @returns
*/
var enableRTCAudioMixMode = function enableRTCAudioMixMode(enable, type) {
return callMethod$5('EnableRTCAudioMixMode', {
enable: enable,
type: type
});
}; //开启音频外部采集 参数:channel 参数类型:int 通道(传1使用辅通道)
var startAudioExCapture$1 = function startAudioExCapture(channel) {
defaultApi$1.writeLog('avsdk TALRTC::startAudioExCapture');
return callMethod$5('StartAudioExCapture', {
channel: channel
});
};
/**
* @function 加载采集插件的输出数据 //采集屏幕并且拼接了连麦学生头像的数据
* @returns {Promise}
*/
var loadCollectionOutputEntry$1 = function loadCollectionOutputEntry() {
return callMethod$5('LoadCollectionOutputEntry', {
streamId: localStreamId$1
});
};
/**
* @function 加载采集插件的输出数据 //只采集屏幕数据
* @returns {Promise}
*/
var LoadCollectionOutputEntry2$1 = function LoadCollectionOutputEntry2() {
defaultApi$1.writeLog('avsdk TALRTC::LoadCollectionOutputEntry2');
return callMethod$5('LoadCollectionOutputEntry2', {
streamId: screenStreamId$1
});
}; //开启同屏
var startMultiScreen$1 = async function startMultiScreen() {
defaultApi$1.writeLog('avsdk TALRTC::startMultiScreen'); // await enableExternalVideoSource(true,1);
await LoadCollectionOutputEntry2$1();
};
/**
* 音频增强调到最高优先级
* @param {string} streamId
* @param {string} uid
* @param {boolean} add
* @returns
*/
var setChiefAudioStream = async function setChiefAudioStream(streamId, uid) {
var add = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
defaultApi$1.writeLog('avsdk TALRTC::SetChiefAudioStream');
return callMethod$5('SetChiefAudioStream', {
streamId: streamId,
uid: uid,
add: add
});
};
/**
* talrtc40路拉流混音接口
* @param {number} mixMode //混流模式 0=关闭混流 1=开启混流
* @param {Array<string>} streamIdArr //表示要突出声音的channel
* @returns {Promise}
*/
var setAudioMixMode$1 = async function setAudioMixMode(mixMode, streamIdArr) {
// let channelsArr = [];
// if(streamIdArr.length > 0){
// streamIdArr.forEach( item => {
// channelsArr.push(getChannelIndex(item));
// });
// }
if (!Array.isArray(streamIdArr)) return; // if (!streamIdArr.includes(teacherId)) {
// streamIdArr.push(teacherId);
// }
return callMethod$5('SetAudioMixMode', {
mixMode: mixMode,
streamIdArr: streamIdArr,
num: streamIdArr.length
});
};
/**
* @function 离开教室
* @return Promise | void
*/
var leaveRoom$2 = async function leaveRoom() {
for (var key in streamIdToPreviewId$2) {
stopPlay(key, true); //huishou
}
if (screenStreamId$1) {
screenStreamId$1 = null;
}
stopPush$1(localStreamId$1);
if (isSpeakerCapturing) {
setSystemAudioLoopback(false);
}
if (window.zby_sdk_init_params.role === 'teacher' && window.zby_sdk_init_params.mode === 1) {
//坐立模式关闭外部采集器,站立关闭外部采集器
enableExternalVideoSource(false);
}
localStreamId$1 = null;
screenStreamId$1 = null;
fourthStreamId = null;
removerListener$2();
destroyEngine$2();
heartBeatDataReport$2('stop'); // isFirstHeartBeatReport = false;
userRTCStatus.clear();
streamIdToPreviewId$2 = {};
previewIdToStreamId$1 = {};
streamIdRtcPlayerInfo$2 = {};
streamIdRtcPlayerInfo1$2 = {};
localStreamIdMap.length = 0;
uiChnIndexs$1.length = chnTotal$1;
uiChnIndexs$1.fill(0).forEach(function (value, index, array) {
array[index] = array.length - (index + 1);
});
clearInterval(pullingStreamInterval$1);
pullingStreamInterval$1 = -1;
};
/**
* @function 卸载 Talrtc 扩展
* @return Promise | void
*/
var unloadTalrtc = function unloadTalrtc() {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$7) {
return new Promise(function (resolve, reject) {
EM$7.UnLoad(extensionId$3, function (code, msg) {
defaultApi$1.writeLog("unloadTalrtc Code: ".concat(code, "\nMessage: ").concat(msg));
resolve();
});
});
}
};
/**
* @function 本地录制
* @param {string | undefined} fileName
* @param {number} fileType 1:flv 2:mp4
* @param {number} idx 0:主流 1:辅流 2:RTMP流
* @param {string} path unicode路径
* @returns {Promise<any>}
*/
var startRecord$1 = async function startRecord(fileName, fileType, idx, path) {
var streamId = localStreamIdMap[idx];
defaultApi$1.writeLog("avsdk TALRTC::startRecord fileName: ".concat(fileName, ", fileType: ").concat(fileType, ", idx: ").concat(idx, ", streamId: ").concat(streamId));
if (!streamId) {
defaultApi$1.writeLog("avsdk TALRTC::startRecord - Invalid idx ".concat(idx), null, 'error');
throw new Error("Invalid idx ".concat(idx));
}
if (!fileName) {
fileName = "".concat(streamId, "-").concat(util.currentTimeString().replace(/:/g, '-'));
}
if (!path) {
defaultApi$1.writeLog("avsdk TALRTC::startRecord path is not set, idx:".concat(idx), null, 'error');
throw new Error('setRecordPath first');
}
dataReport$2.startRecord({
fileName: fileName,
fileType: fileType,
idx: idx,
streamId: streamId
});
return callMethod$5('StartRecord', {
streamId: streamId,
recordType: 3,
// 1:音频 2:视频 3:音视频
fileName: fileName,
recordFormat: fileType,
path: path
});
};
/**
* 结束音视频录制 channelIndex(number) 录制通道 0主推流通道/ 1辅助推流通道/ 2辅助推流通道
* @param {number} idx 0 | 1 | 2
* @returns
*/
var stopRecord$1 = async function stopRecord(idx) {
var streamId = localStreamIdMap[idx];
defaultApi$1.writeLog("avsdk TALRTC::stopRecord idx: ".concat(idx, ", streamId: ").concat(streamId));
if (!streamId) {
defaultApi$1.writeLog("avsdk TALRTC::stopRecord - Invalid idx ".concat(idx), null, 'error');
throw new Error("Invalid idx ".concat(idx));
}
dataReport$2.stopRecord({
idx: idx,
streamId: streamId
});
return callMethod$5('StopRecord', {
streamId: streamId
});
};
var enableBeautify$1 = function enableBeautify(enable) {
var streamId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : localStreamId$1;
defaultApi$1.writeLog("avsdk TALRTC::enableBeautify enable: ".concat(enable, " streamId: ").concat(streamId));
return callMethod$5('EnableBeautify', {
enable: enable,
streamId: streamId
});
};
/**
*
* @param {number} mode 美颜类型 101:美白、103:磨皮、201:瘦脸、605:背景虚化、901:自定义背景、202:大眼、603:锐化
* @param {number} subMode 美白模式【0,2,3】,当前选项:0,
磨皮:【1,2】,当前选项:1
瘦脸:【0】,
背景虚化:【0,1】、当前选项:1
自定义背景:【0】、
大眼:【0】
锐化:【0】
* @param {number} value 美白: 默认30 ,0表示不美白;
磨皮:默认 74, 0表示不磨皮;
瘦脸:默认 11, 0表示不瘦脸
背景虚化:默认值 0, 0表示不虚化
自定义背景:默认值0;非0表示设置背景(当前设计不支持用户自定义背景,)
大眼:默认值13,0表示不做大眼
锐化:默认值0,0表示不锐化
* @param {string} streamId 流id
* @param {string | undefined} image 自定义背景图片地址
* @returns
*/
var setBeautifyParam$2 = function setBeautifyParam(mode, subMode, value) {
var streamId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : localStreamId$1;
var image = arguments.length > 4 ? arguments[4] : undefined;
defaultApi$1.writeLog("avsdk TALRTC::setBeautifyParam param: ".concat(JSON.stringify({
mode: mode,
subMode: subMode,
value: value,
streamId: streamId,
image: image
})));
return callMethod$5('SetBeautifyParam', {
mode: mode,
subMode: subMode,
value: value,
streamId: streamId,
image: image
});
};
/**
*
* @param {'UseLoopbackDefault' | 'UseDefaultDevice'} key
* @param {'enable'} value
* @returns
*/
var setEngineConfig$1 = function setEngineConfig(key, value) {
defaultApi$1.writeLog("avsdk TALRTC::setEngineConfig key: ".concat(key, ", value: ").concat(value));
return callMethod$5('SetEngineConfig', {
key: key,
value: value
});
};
/**
* 获取麦克风响度
* @returns {Promise<number>}
*/
var getMicrophoneLoudness$1 = function getMicrophoneLoudness() {
return callMethod$5('GetMicrophonLoudness', {});
};
/**
* 获取默认扬声器id
* @returns {Promise<string | null>}
*/
var getCurrentSpeakerId$1 = function getCurrentSpeakerId() {
return callMethod$5('GetCurrentSpeakerId', {}).then(function (e) {
if (e.code === 0) {
return JSON.parse(e.msg).speakerCurId;
} else {
return null;
}
});
};
/**
* 获取默认麦克风id
* @returns {Promise<string | null>}
*/
var getCurrentMicrophoneId$1 = function getCurrentMicrophoneId() {
return callMethod$5('GetCurrentMicrophoneId', {}).then(function (e) {
if (e.code === 0) {
return JSON.parse(e.msg).microphoneCurId;
} else {
return null;
}
});
};
/**
* 获取默认摄像头id
* @returns {Promise<string | null>}
*/
var getCurrentCameraId$1 = function getCurrentCameraId() {
return callMethod$5('GetCurrentCameraId', {}).then(function (e) {
if (e.code === 0) {
return JSON.parse(e.msg).cameraCurId;
} else {
return null;
}
});
};
var takeLocalSnapShot$1 = function takeLocalSnapShot() {
var streamId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : localStreamId$1;
var idx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
return callMethod$5('takeLocalSnapShot', {
streamId: streamId,
idx: idx
});
};
var takeRemoteSnapShot$1 = function takeRemoteSnapShot(streamId) {
return callMethod$5('takeRemoteSnapShot', {
streamId: streamId
});
}; // 水印透传:直接调用底层 SetVideoWarterMark
var setWaterMark$1 = async function setWaterMark(filePath, x, y, w, h) {
var streamId = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '';
var idx = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;
if (!filePath || typeof filePath !== 'string') {
defaultApi$1.writeLog('avsdk TALRTC::setWaterMark invalid filePath');
return false;
}
var toInt = function toInt(val) {
var num = Number(val);
return Number.isFinite(num) ? Math.floor(num) : NaN;
};
var left = toInt(x);
var top = toInt(y);
var width = toInt(w);
var height = toInt(h);
if ([left, top, width, height].some(function (v) {
return Number.isNaN(v);
})) {
defaultApi$1.writeLog('avsdk TALRTC::setWaterMark invalid rect params');
return false;
}
var res = await callMethod$5('SetVideoWarterMark', {
filePath: filePath,
x: left,
y: top,
w: width,
h: height,
streamId: streamId
});
return res && res.code === 0;
}; //@param {string} config.mTaskType
// "voicechat" 音频通话
// "avatarchat" 数字人
// "visionchat" 视觉理解
// @param {string} config.mRobotId 当前user对应的机器人id
// @param {string} config.extenParams 业务额外数据,JSON格式的字符串
var startAigc$1 = function startAigc(config) {
aigcRobotUid = config && config.mRobotId != null ? config.mRobotId : null;
return callMethod$5('StartAigc', {
room: localRoomId,
taskType: config.mTaskType,
robotId: config.mRobotId,
extenParams: config.extenParams
}).then(function (result) {
// 业务需要rtc sdk taskid,失败返回空字符串
if (result && result.code === 0) {
// 解析msg中的JSON字符串
var msgData = JSON.parse(result.msg || '{}'); // 返回指定字段,可以根据需要修改字段名
return msgData.taskid || '';
} else {
aigcRobotUid = null;
var code = result ? result.code : undefined;
var msg = result ? result.msg : undefined;
defaultApi$1.writeLog("talrtc-sdk startAigc failed: code=".concat(code, ", msg=").concat(msg), null, 'error');
return '';
}
}).catch(function (error) {
aigcRobotUid = null;
defaultApi$1.writeLog("talrtc-sdk startAigc error: ".concat(error), null, 'error');
return '';
});
};
var stopAigc$1 = function stopAigc() {
aigcRobotUid = null;
return callMethod$5('StopAigc', {});
};
var sendAigcMessage$1 = function sendAigcMessage(messageInfo) {
return callMethod$5('SendAigcMessage', {
custom: messageInfo.custom,
prompt: messageInfo.prompt,
type: messageInfo.type
}).then(function (result) {
// 返回数字状态码,0表示成功
if (result && result.code === 0) {
return 0;
} else {
var code = result ? result.code : undefined;
var msg = result ? result.msg : undefined;
defaultApi$1.writeLog("talrtc-sdk sendAigcMessage failed: code=".concat(code, ", msg=").concat(msg), null, 'error');
return code !== undefined ? code : -1;
}
}).catch(function (error) {
defaultApi$1.writeLog("talrtc-sdk sendAigcMessage error: ".concat(error), null, 'error');
return -1;
});
};
var setEngineEnv = function setEngineEnv(envs) {
return callMethod$5('SetEngineEnv', {
env: envs
});
}; // 开关麦克风录制数据回调
// enable: 是否开启回调
// sampleRate: 采样率,默认 48000
// channels: 声道数,默认 1
var enableMicRecordDataCallback$1 = function enableMicRecordDataCallback() {
var enable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var sampleRate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 48000;
var channels = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
if (typeof enable !== 'boolean') {
defaultApi$1.writeLog('avsdk TALRTC::enableMicRecordDataCallback enable type error', null, 'error');
return Promise.reject(new Error('enable should be boolean'));
}
if (!Number.isInteger(sampleRate) || sampleRate <= 0) {
defaultApi$1.writeLog('avsdk TALRTC::enableMicRecordDataCallback sampleRate type error', null, 'error');
return Promise.reject(new Error('sampleRate should be positive integer'));
}
if (!Number.isInteger(channels) || channels <= 0) {
defaultApi$1.writeLog('avsdk TALRTC::enableMicRecordDataCallback channels type error', null, 'error');
return Promise.reject(new Error('channels should be positive integer'));
}
defaultApi$1.writeLog('avsdk TALRTC::enableMicRecordDataCallback');
return callMethod$5('EnableMicRecordDataCallback', {
enable: enable,
sampleRate: sampleRate,
channels: channels
});
};
var heartBeatRealKeys$2 = ['video_fps', 'video_bitrate', 'audio_fps', 'audio_bitrate'];
var _heartBeatDataReport$2 = function _heartBeatDataReport() {
var pullInfo = [];
console.log('拉流的类型1', streamIdRtcPlayerInfo$2);
Object.keys(streamIdRtcPlayerInfo$2).forEach(function (streamid) {
heartBeatRealKeys$2.forEach(function (realKey) {
if (!streamIdRtcPlayerInfo$2[streamid].hasOwnProperty(realKey)) {
streamIdRtcPlayerInfo$2[streamid][realKey] = [];
}
}); //获取拉流类型,后期可写为函数提出去
if (streamIdRtcPlayerInfo1$2[streamid].audio_type && streamIdRtcPlayerInfo1$2[streamid].video_type) {
streamIdRtcPlayerInfo1$2[streamid].stream_type = 'both';
} else if (!streamIdRtcPlayerInfo1$2[streamid].audio_type && streamIdRtcPlayerInfo1$2[streamid].video_type) {
streamIdRtcPlayerInfo1$2[streamid].stream_type = 'video';
} else if (streamIdRtcPlayerInfo1$2[streamid].audio_type && !streamIdRtcPlayerInfo1$2[streamid].video_type) {
streamIdRtcPlayerInfo1$2[streamid].stream_type = 'audio';
} else {
streamIdRtcPlayerInfo1$2[streamid].stream_type = 'none';
}
pullInfo.push(_objectSpread({
streamid: streamid
}, streamIdRtcPlayerInfo$2[streamid], {
pull_type: streamIdRtcPlayerInfo1$2[streamid].stream_type,
volume: streamIdRtcPlayerInfo$2[streamid].volume.slice(0, streamIdRtcPlayerInfo$2[streamid].volume.length - 1)
}));
resetStreamIdRtcPlayerInfo$2(streamid);
});
if (isFirstHeartBeatReport$2) {
try {
//获取推流类型,后期可写为函数提出去
if (zbysdk$1.deviceStatus.camera && zbysdk$1.deviceStatus.microphone) {
zbysdk$1.deviceStatus.stream_type = 'both';
} else if (!zbysdk$1.deviceStatus.camera && zbysdk$1.deviceStatus.microphone) {
zbysdk$1.deviceStatus.stream_type = 'audio';
} else if (zbysdk$1.deviceStatus.camera && !zbysdk$1.deviceStatus.microphone) {
zbysdk$1.deviceStatus.stream_type = 'video';
} else {
zbysdk$1.deviceStatus.stream_type = 'none';
}
;
defaultApi$1.writeLog("push_type_talrtc,camera: ".concat(zbysdk$1.deviceStatus.camera, ",microphone: ").concat(zbysdk$1.deviceStatus.microphone, ",type: ").concat(zbysdk$1.deviceStatus.stream_type, ",a_fps: ").concat(dataTalrtcCapture.fps, ", a_bit: ").concat(dataTalrtcCapture.audioBitrate, ", v_fps: ").concat(dataTalrtcCapture.fps, ", v_bit: ").concat(dataTalrtcCapture.videoBitrate));
dataReport$2.heartbeat(_objectSpread({}, _objectSpread({}, heartBeatDataReportObj$2, {
push_type: zbysdk$1.deviceStatus.stream_type,
volume: heartBeatDataReportObj$2.volume.slice(0, heartBeatDataReportObj$2.volume.length - 1)
}), {
pull_info: pullInfo
}));
dataReport$2.localNetworkQuality({
code: qualityLocal
});
dataReport$2.remoteNetworkQuality({
code: qualityRemote
});
} catch (e) {
console.log(e);
}
}
resetHeartBeatDataReportObj$2();
};
var pointer$1 = 0;
var runHeartBeatCalc$1 = function runHeartBeatCalc() {
Object.keys(streamIdToPreviewId$2).forEach(function (streamId) {
var data = statsStore$1.getData(streamId) || {
stats: JSON.stringify({
streamId: streamId
})
};
try {
heartBeatDataReportCalc$2('onRemoteStatistics', data);
} catch (error) {
defaultApi$1.writeLog("avsdk TALRTC::runHeartBeatCalc error: ".concat(error));
}
});
var data = statsStore$1.getData(localStreamId$1) || {
stats: JSON.stringify({})
};
try {
heartBeatDataReportCalc$2('onLocalStatistics', data);
} catch (error) {
defaultApi$1.writeLog("avsdk TALRTC::runHeartBeatCalc error: ".concat(error));
}
++pointer$1;
if (pointer$1 === heartBeatItemCount$1) {
pointer$1 = 0;
_heartBeatDataReport$2();
}
};
var heartBeatDataReport$2 = function heartBeatDataReport(type) {
try {
if (type === 'start' && !heartBeatDataReportTimer$2) {
isFirstHeartBeatReport$2 = true;
runHeartBeatCalc$1();
heartBeatDataReportTimer$2 = setInterval(function () {
runHeartBeatCalc$1();
}, 2 * 1000);
}
if (type === 'stop') {
isFirstHeartBeatReport$2 = false;
statsStore$1.clear();
clearInterval(heartBeatDataReportTimer$2);
heartBeatDataReportTimer$2 = null;
}
} catch (error) {
console.error(error);
}
};
var lastStreamReportTimestamps = {};
var heartBeatDataReportCalc$2 = function heartBeatDataReportCalc(name, _data) {
var _d = JSON.parse(_data.stats); // if (lastStreamReportTimestamps[_d.streamId] && Date.now() - lastStreamReportTimestamps[_d.streamId] < 4999) {
// return;
// } else {
// lastStreamReportTimestamps[_d.streamId] = Date.now();
// }
var ctime = Math.round((new Date().getTime() + dataReport$2.timestamp) / 1000); // 拉流
var pullKeys = ['fps', 'videoBitrate', 'afps', 'audioBitrate'];
if (name === 'onRemoteStatistics') {
if (streamIdRtcPlayerInfo$2 && streamIdRtcPlayerInfo$2.hasOwnProperty(_d.streamId)) {
var streamid = _d.streamId;
var isReport = true; // streamIdRtcPlayerInfo[streamid].count++;
heartBeatRealKeys$2.forEach(function (realKey, index) {
if (_d.hasOwnProperty(pullKeys[index])) {
if (streamIdRtcPlayerInfo$2[streamid][realKey] === undefined) {
streamIdRtcPlayerInfo$2[streamid][realKey] = [];
isReport = false;
} // streamIdRtcPlayerInfo[streamid][realKey].push(parseFloat(parseInt(item[pullKeys[index]])));
}
});
if (isReport) {
var audio_fps_talrtc_pull = 0;
var audio_bitrate_talrtc_pull = 0;
var video_fps_talrtc_pull = 0;
var video_bitrate_talrtc_pull = 0;
var pull_type = 'none';
if (streamIdRtcPlayerInfo1$2[streamid].audio_type && streamIdRtcPlayerInfo1$2[streamid].video_type) {
audio_fps_talrtc_pull = parseFloat(parseInt(_d.afps || 0));
audio_bitrate_talrtc_pull = parseFloat(parseInt(_d.audioBitrate || 0));
video_fps_talrtc_pull = parseFloat(parseInt(_d.fps || 0));
video_bitrate_talrtc_pull = parseFloat(parseInt(_d.videoBitrate || 0));
pull_type = 'both';
} else if (!streamIdRtcPlayerInfo1$2[streamid].audio_type && streamIdRtcPlayerInfo1$2[streamid].video_type) {
video_fps_talrtc_pull = parseFloat(parseInt(_d.fps || 0));
video_bitrate_talrtc_pull = parseFloat(parseInt(_d.videoBitrate || 0));
pull_type = 'video';
} else if (streamIdRtcPlayerInfo1$2[streamid].audio_type && !streamIdRtcPlayerInfo1$2[streamid].video_type) {
audio_fps_talrtc_pull = parseFloat(parseInt(_d.afps || 0));
audio_bitrate_talrtc_pull = parseFloat(parseInt(_d.audioBitrate || 0));
pull_type = 'audio';
}
streamIdRtcPlayerInfo$2[streamid].audio_fps[pointer$1] = audio_fps_talrtc_pull;
streamIdRtcPlayerInfo$2[streamid].audio_bitrate[pointer$1] = audio_bitrate_talrtc_pull;
streamIdRtcPlayerInfo$2[streamid].video_fps[pointer$1] = video_fps_talrtc_pull;
streamIdRtcPlayerInfo$2[streamid].video_bitrate[pointer$1] = video_bitrate_talrtc_pull;
streamIdRtcPlayerInfo$2[streamid].pull_loss[pointer$1] = _d.packetLoss || 0;
streamIdRtcPlayerInfo$2[streamid].pull_delay[pointer$1] = _d.rtt || 0;
streamIdRtcPlayerInfo$2[streamid].pull_type_ex[pointer$1] = pull_type;
streamIdRtcPlayerInfo$2[streamid].ctime[pointer$1] = ctime;
streamIdRtcPlayerInfo$2[streamid].video_ifg += _d.videoBlockRate || 0;
streamIdRtcPlayerInfo$2[streamid].audio_ifg += _d.audioBlockRate || 0; // console.log('hsg_tpull_keys',JSON.parse(JSON.stringify(streamIdRtcPlayerInfo[streamid])),_d.avTimestampDiff);
if (lecturerStreamId$1 === String(streamid).toUpperCase()) {
if (audio_fps_talrtc_pull + audio_bitrate_talrtc_pull > 0 && ( // 任意一个有大于0的值
audio_fps_talrtc_pull === 0 || audio_bitrate_talrtc_pull === 0) // 有一个为0
) {
defaultApi$1.writeLog("avsdk TALRTC::AUDIO_STATS_WARNING ".concat(_data.stats), undefined, 'error');
}
if (video_fps_talrtc_pull + video_bitrate_talrtc_pull > 0 && ( // 任意一个有大于0的值
video_fps_talrtc_pull === 0 || video_bitrate_talrtc_pull === 0) // 有一个为0
) {
defaultApi$1.writeLog("avsdk TALRTC::VIDEO_STATS_WARNING ".concat(_data.stats), undefined, 'error');
}
}
}
}
} // 推流
var pushKeys = ['fps', 'videoBitrate', 'afps', 'audioBitrate'];
if (name === 'onLocalStatistics') {
// console.log('hsgmzk',_d);
// heartBeatDataReportObj.count++;
// heartBeatRealKeys.forEach((realKey, index) => {
// if (heartBeatDataReportObj.hasOwnProperty(realKey) && _d.hasOwnProperty(pushKeys[index])) {
// heartBeatDataReportObj[realKey].push(parseFloat(parseInt(_d[pushKeys[index]])));
// }
// });
var audio_fps_talrtc_push = 0;
var audio_bitrate_talrtc_push = 0;
var video_fps_talrtc_push = 0;
var video_bitrate_talrtc_push = 0;
dataTalrtcCapture = _d;
var push_type = 'none';
if (userAndDeviceStatusInfo.isPushingFlow) {
if (zbysdk$1.deviceStatus.camera && zbysdk$1.deviceStatus.microphone) {
audio_fps_talrtc_push = parseFloat(parseInt(_d.afps || 0));
audio_bitrate_talrtc_push = parseFloat(parseInt(_d.audioBitrate || 0));
video_fps_talrtc_push = parseFloat(parseInt(_d.fps || 0));
video_bitrate_talrtc_push = parseFloat(parseInt(_d.videoBitrate || 0));
push_type = 'both';
} else if (!zbysdk$1.deviceStatus.camera && zbysdk$1.deviceStatus.microphone) {
audio_fps_talrtc_push = parseFloat(parseInt(_d.afps || 0));
audio_bitrate_talrtc_push = parseFloat(parseInt(_d.audioBitrate || 0));
push_type = 'audio';
} else if (zbysdk$1.deviceStatus.camera && !zbysdk$1.deviceStatus.microphone) {
video_fps_talrtc_push = parseFloat(parseInt(_d.fps || 0));
video_bitrate_talrtc_push = parseFloat(parseInt(_d.videoBitrate || 0));
push_type = 'video';
}
if (zbysdk$1.deviceStatus.microphone && audio_fps_talrtc_push === 0 && audio_bitrate_talrtc_push === 0) {
defaultApi$1.writeLog("avsdk TALRTC::AUDIO_PUSH_STATS_WARNING ".concat(_data.stats), undefined, 'error');
}
if (zbysdk$1.deviceStatus.camera && video_fps_talrtc_push === 0 && video_bitrate_talrtc_push === 0) {
defaultApi$1.writeLog("avsdk TALRTC::VIDEO_PUSH_STATS_WARNING ".concat(_data.stats), undefined, 'error');
}
}
heartBeatDataReportObj$2.audio_fps[pointer$1] = audio_fps_talrtc_push;
heartBeatDataReportObj$2.audio_bitrate[pointer$1] = audio_bitrate_talrtc_push;
heartBeatDataReportObj$2.video_fps[pointer$1] = video_fps_talrtc_push;
heartBeatDataReportObj$2.video_bitrate[pointer$1] = video_bitrate_talrtc_push;
heartBeatDataReportObj$2.push_loss[pointer$1] = _d.packetLoss || 0;
heartBeatDataReportObj$2.push_delay[pointer$1] = _d.rtt || 0;
heartBeatDataReportObj$2.push_type_ex[pointer$1] = push_type;
heartBeatDataReportObj$2.type_backend[pointer$1] = getBackgroundStatus();
heartBeatDataReportObj$2.ctime[pointer$1] = ctime;
}
}; //推流字段
var resetHeartBeatDataReportObj$2 = function resetHeartBeatDataReportObj() {
console.log('resetHeartBeatDataReportObj重置');
heartBeatDataReportObj$2 = {
ctime: new Array(heartBeatItemCount$1).fill(0),
push_type: 'none',
video_fps: new Array(heartBeatItemCount$1).fill(0),
video_bitrate: new Array(heartBeatItemCount$1).fill(0),
audio_fps: new Array(heartBeatItemCount$1).fill(0),
audio_bitrate: new Array(heartBeatItemCount$1).fill(0),
push_loss: new Array(heartBeatItemCount$1).fill(0),
push_delay: new Array(heartBeatItemCount$1).fill(0),
push_type_ex: new Array(heartBeatItemCount$1).fill('none'),
type_backend: new Array(heartBeatItemCount$1).fill(0),
volume: ''
};
};
resetHeartBeatDataReportObj$2(); //记录拉流类型,用作数据上报
var resetStreamIdRtcPlayerInfo1$2 = function resetStreamIdRtcPlayerInfo1(streamId) {
streamIdRtcPlayerInfo1$2[streamId] = {
audio_type: false,
video_type: false,
stream_type: 'none'
}; // console.log('hsgshgs_heartbeat',streamIdRtcPlayerInfo1);
}; //拉流字段
var resetStreamIdRtcPlayerInfo$2 = function resetStreamIdRtcPlayerInfo(streamId) {
console.log('reset stream info ----------', streamId);
streamIdRtcPlayerInfo$2[streamId] = {
pull_uid: util.getUidByStreamId(streamId),
streamid: streamId,
ctime: new Array(heartBeatItemCount$1).fill(0),
pull_type: streamIdRtcPlayerInfo1$2[streamId].stream_type,
volume: '',
// 平均值
// count: 0,
// video_fps: 0,
// video_bitrate: 0,
// audio_fps: 0,
// audio_bitrate: 0,
video_fps: new Array(heartBeatItemCount$1).fill(0),
video_bitrate: new Array(heartBeatItemCount$1).fill(0),
audio_fps: new Array(heartBeatItemCount$1).fill(0),
audio_bitrate: new Array(heartBeatItemCount$1).fill(0),
pull_loss: new Array(heartBeatItemCount$1).fill(0),
pull_delay: new Array(heartBeatItemCount$1).fill(0),
pull_type_ex: new Array(heartBeatItemCount$1).fill('none'),
//音画不同步字段
avtimestampdiff: new Array(heartBeatItemCount$1).fill(0),
// 累加
audio_ifg: 0,
video_ifg: 0
};
};
var talrtcsdk = {
checkUpdate: checkUpdate,
init: init$2,
enableExternalVideoSource: enableExternalVideoSource,
setFourthStreamType: setFourthStreamType$1,
setCameraCaptureResolution: setCameraCaptureResolution,
setCameraEncodeResolution: setCameraEncodeResolution,
setCameraEncodeFps: setCameraEncodeFps,
setCameraEncodeBitrate: setCameraEncodeBitrate,
getCameraResolution: getCameraResolution,
getMicrophoneDeviceList: getMicrophoneDeviceList$1,
setMicrophoneDevice: setMicrophoneDevice$2,
openOrCloseMicrophone: openOrCloseMicrophone,
getCurrentMicrophoneVolume: getCurrentMicrophoneVolume,
setCurrentMicrophoneVolume: setCurrentMicrophoneVolume,
getCameraDeviceList: getCameraDeviceList,
setCameraDevice: setCameraDevice$1,
openOrCloseCamera: openOrCloseCamera$1,
getSpeakerDeviceList: getSpeakerDeviceList$1,
setSpeakerDevice: setSpeakerDevice$2,
getCurrentSpeakerDevice: getCurrentSpeakerDevice$1,
getCurrentSpeakerVolume: getCurrentSpeakerVolume,
setCurrentSpeakerVolume: setCurrentSpeakerVolume,
setSpeakerDeviceMute: setSpeakerDeviceMute$1,
muteRemoteAudio: muteRemoteAudio,
muteRemoteVideo: muteRemoteVideo,
getSpeakerSimpleVolume: getSpeakerSimpleVolume$1,
setSpeakerSimpleVolume: setSpeakerSimpleVolume$1,
setSpeakerSimpleMute: setSpeakerSimpleMute$1,
startLocalOrRemotePreview: startLocalOrRemotePreview$2,
enableAudioSpeakerCapture: enableAudioSpeakerCapture,
setVideoCallback: setVideoCallback$1,
startPush: startPush$1,
stopPush: stopPush$1,
startPlay: startPlay,
stopPlay: stopPlay,
initPullFlow: initPullFlow$2,
stopPlayAll: stopPlayAll,
changePullFlow: changePullFlow$2,
startPreview: startPreview$2,
stopPreview: stopPreview$2,
sendSEIMsg: sendSEIMsg,
loadCollectionInputEntry2: loadCollectionInputEntry2$1,
controlCdnStreaming: controlCdnStreaming,
// addPublishRtmpStreamUrl or removePublishStreamUrl
leaveRoom: leaveRoom$2,
destroyEngine: destroyEngine$2,
unloadTalrtc: unloadTalrtc,
muteLocalVideo: muteLocalVideo$1,
muteLocalAudio: muteLocalAudio$1,
pullAudioFlow: pullAudioFlow$2,
hasStream: hasStream$2,
teacherStartLinkMic: teacherStartLinkMic$2,
teacherStopLinkMic: teacherStopLinkMic$2,
setMirrorStatus: setMirrorStatus$2,
setPlayViewMirror: setPlayViewMirror$1,
setAudioAuxSource: setAudioAuxSource$1,
setAudioType: setAudioType,
enableRTCAudioMixMode: enableRTCAudioMixMode,
startAudioExCapture: startAudioExCapture$1,
startMultiScreen: startMultiScreen$1,
setAudioMixMode: setAudioMixMode$1,
startRecord: startRecord$1,
stopRecord: stopRecord$1,
enableBeautify: enableBeautify$1,
setBeautifyParam: setBeautifyParam$2,
setEngineConfig: setEngineConfig$1,
getChannelIndex: getChannelIndex$1,
getSDKVersion: getSDKVersion$2,
getSDKCoreVersion: getSDKCoreVersion,
getMicrophoneLoudness: getMicrophoneLoudness$1,
getCurrentSpeakerId: getCurrentSpeakerId$1,
getCurrentMicrophoneId: getCurrentMicrophoneId$1,
getCurrentCameraId: getCurrentCameraId$1,
takeLocalSnapShot: takeLocalSnapShot$1,
takeRemoteSnapShot: takeRemoteSnapShot$1,
startAigc: startAigc$1,
stopAigc: stopAigc$1,
sendAigcMessage: sendAigcMessage$1,
setWaterMark: setWaterMark$1,
setEngineEnv: setEngineEnv,
enableMicRecordDataCallback: enableMicRecordDataCallback$1
};
var extensionId$4 = 'trtc_ext'; // 端提供的 API 入口
var EM$8 = window.EM; // 是否执行过 TRTC 的 AddListener 的标志
var hasAddListener$4 = false; // 监听id
var EMListenerId$3 = 0; //静音推流时,音量值是否上抛上层标志 false=没有声音不往上层通知/true=有声音有上层通知
var isNoticeMicVolumeTRTC = false; // rtc小班课=0;rtc大班课=1
var classType$5 = 0; // 维护的一份拉流的 streamId 与本地预览通道的映射表
var streamIdToPreviewId$3 = {};
var previewIdToStreamId$2 = {}; // 拉流的播放通道初始化从 0 开始依次递增至99(共100路流),-1 为推流的本地视频预览
// const uiChnIndexs = new Array(50).fill(0).map((a, b) => b + 1).reverse();
var uiChnIndexs$2 = new Array(100).fill(0).map(function (a, b) {
return b;
}).reverse(); // 维护的一份当前正在使用的音频设备的 deviceId 的列表
var usingAudioDeviceId$2 = {
speaker: '',
microphone: ''
}; // 心跳
var heartBeatDataReportObj$3 = {};
var heartBeatDataReportTimer$3 = null;
var isFirstHeartBeatReport$3 = false;
var streamIdRtcPlayerInfo$3 = {};
var streamIdRtcPlayerInfo1$3 = {}; //记录底层推流回调的值
var dataTrtcCapture = {};
var qualityLocalArr$1 = [];
var qualityRemoteArr$1 = [];
var callMethod$6 = function callMethod(name, args) {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$8) {
return new Promise(function (resolve, reject) {
// let noneCamera = (name === 'SetVideoDevice' && !args.pszDeviceID);
// let noneMicrophone = (name === 'SetAudioDevice' && args.deviceType === 0 && !args.pszDeviceID);
// let noneSpeaker = (name === 'SetAudioDevice' && args.deviceType === 1 && !args.pszDeviceID);
// if (noneCamera || noneMicrophone || noneSpeaker) {
// return resolve();
// }
EM$8.CallMethod(extensionId$4, name, JSON.stringify(_objectSpread({}, args, {
classType: classType$5
})), function (code, msg) {
defaultApi$1.writeLog("".concat(name, " Code: ").concat(code, "\nMessage: ").concat(msg, "\nParams: ").concat(JSON.stringify(_objectSpread({}, args, {
classType: classType$5
}))));
resolve({
code: code,
msg: msg
});
});
});
}
};
var loadTrtc = function loadTrtc(extensionVersion) {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$8) {
return new Promise(function (resolve, reject) {
removerListener$3();
console.log('jjjjjjj3', extensionId$4, extensionVersion);
EM$8.Load(extensionId$4, extensionVersion, false, function (code, msg) {
console.log('jjjjjjj4');
defaultApi$1.writeLog("loadTrtc Code: ".concat(code, "\nMessage: ").concat(msg));
addListener$4();
resolve();
});
});
}
}; //卸载监听
var removerListener$3 = function removerListener() {
hasAddListener$4 = false;
defaultApi$1.writeLog("TRTC::action--removerListener EMListenerId:".concat(EMListenerId$3));
EM$8.RemoverListener(extensionId$4, EMListenerId$3, function (ec, content) {});
EMListenerId$3 = 0;
}; //加载监听
/**
* @function 添加扩展监听机制
* @param userId:Number 用户 id,必选
* @param userName:String 用户名,必选
* @param roomId:String 频道(房间) id,必选
* @param nNetType:Number 网络类型,可选,默认为 1
* @return void
*/
var addListener$4 = function addListener() {
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM$8 && !hasAddListener$4) {
hasAddListener$4 = true;
EM$8.AddListener(extensionId$4, function (event, data) {
if (data && data.indexOf(extensionId$4) > -1) {
try {
EMListenerId$3 = JSON.parse(data)[extensionId$4];
defaultApi$1.writeLog("TRTC::addListener-- EMListenerId: ".concat(EMListenerId$3));
} catch (error) {}
}
if (!event || !data) {
return;
}
var _data = JSON.parse(data);
switch (event) {
//推流相关
//直播推流器错误通知,推流器出现错误时,会回调该通知
case 'onLocalError':
defaultApi$1.writeLog("TRTC::addListener-- onLocalError: ".concat(JSON.stringify(_data)));
NOTICE.pushStreamError({
errorStreamType: _data.streamType,
code: _data.code,
errorMsg: _data
});
dataReport$2.pushStreamError({
errorStreamType: _data.streamType,
code: _data.code
});
break;
//直播推流器警告通知
case 'onLocalWarning':
defaultApi$1.writeLog("TRTC::addListener-- onLocalWarning: ".concat(JSON.stringify(_data)));
NOTICE.pushStreamWarning({
warnStreamType: _data.streamType,
code: _data.code
});
dataReport$2.pushStreamWarning({
warnStreamType: _data.streamType,
code: _data.code
});
break;
//首帧音频推送完成的回调通知
case 'onSendLocalFirstAudioFrame':
defaultApi$1.writeLog("TRTC::addListener-- onSendLocalFirstAudioFrame: ".concat(JSON.stringify(_data)));
break;
//首帧视频推送完成的回调通知
case 'onSendLocalFirstVideoFrame':
defaultApi$1.writeLog("TRTC::addListener-- onSendLocalFirstVideoFrame: ".concat(JSON.stringify(_data)));
NOTICE.pushFlowSuccess({
code: 0,
publish_streamid: _data.strStreamId
});
dataReport$2.publishResult({
code: '0' // publish_streamid: window.zbyAVSDK_init_params.trtc.streamId,
});
break;
//麦克风采集音量值回调
case 'onLocalMicrophoneVolumeUpdate':
// defaultApi.writeLog(`TRTC::addListener-- onLocalMicrophoneVolumeUpdate: ${JSON.stringify(_data)}`);
if (isNoticeMicVolumeTRTC) {
NOTICE.captureMicVolumeChanged({
volume: Math.round(_data.volume)
});
} // heartBeatDataReportObj.volume.push(Math.round(_data.pCaptureSoundLevel[0].soundLevel));
heartBeatDataReportObj$3.volume = heartBeatDataReportObj$3.volume + Math.round(_data.volume) + ',';
break;
break;
//推流器连接状态回调通知。推流器连接状态 0 与服务器断开连接/1 正在连接服务器/2 连接服务器成功/3 重连服务器中
case 'onLocalConnectStatusUpdate':
defaultApi$1.writeLog("TRTC::addListener-- onLocalConnectStatusUpdate: ".concat(JSON.stringify(_data)));
dataReport$2.localConnectStatus({
connectStatuStreamType: _data.streamType,
state: _data.state
});
break;
//网络质量的实时统计回调
// 统计回调每间隔2秒抛出一次,用于通知 SDK 感知到的当前网络的质量。
// * SDK 会使用一组内嵌的自研算法对当前网络的延迟高低、带宽大小以及稳定情况进行评估,并计算出一个的评估结果:
// * 如果评估结果为 1(Excellent) 代表当前的网络情况非常好,如果评估结果为 6(Down)代表当前网络无法支撑 SDK 的正常使用。
// * @param quality 网络状态。0未检测;1当前网络非常好;2当前网络比较好;3当前网络一般;4当前网络较差;5当前网络很差;6当前网络不满足 TRTC 的最低要求
case 'onLocalNetworkQuality':
// defaultApi.writeLog(`TRTC::addListener-- onLocalNetworkQuality: ${_data.quality}`);
if (_data.quality == 4 || _data.quality == 5 || _data.quality == 6) {
NOTICE.localNetworkQuality({
code: _data.quality
});
dataReport$2.localNetworkQuality({
code: _data.quality // publish_streamid: window.zbyAVSDK_init_params.trtc.streamId,
});
}
qualityLocalArr$1.push(_data.quality);
break;
//直播推流器统计数据回调 number类型
//appCpu 当前 App 的 CPU 使用率(%)
// systemCpu 当前系统的 CPU 使用率(%)
// width 视频宽度
// height 视频高度
// fps 帧率(fps)
// audioBitrate 视频码率(Kbps)
// videoBitrate 音频码率(Kbps)
// case 'onLocalStatisticsUpdate':
// defaultApi.writeLog(`TRTC::addListener-- onLocalStatisticsUpdate: ${_data}`);
// break;
//拉流相关
//远端流错误通知,拉流出现错误时,会回调该通知
case 'onRemoteError':
defaultApi$1.writeLog("TRTC::addListener-- onRemoteError: ".concat(JSON.stringify(_data)));
NOTICE.pullStreamError({
strErrorStreamId: _data.strStreamId,
code: _data.code
}); //是否需要数据上报?@yuqian
break;
//远端流警告通知,拉流出现警告时,会回调该通知。
case 'onRemoteWarning':
defaultApi$1.writeLog("TRTC::addListener-- onRemoteWarning: ".concat(JSON.stringify(_data)));
NOTICE.pullStreamWarning({
strWarnStreamId: _data.strStreamId,
code: _data.code
}); //是否需要数据上报?@yuqian
break;
//拉到音频首帧
case 'onRemoteAudioStatus':
// defaultApi.writeLog(`TRTC::addListener-- onRemoteAudioStatus: ${_data}`);
console.log('onRemoteAudioStatus', _data);
try {
NOTICE.firstAudioSize({
streamId: _data.strStreamId,
userId: util.getUidByStreamId(_data.strStreamId)
});
dataReport$2.firstAudioSize({
pull_streamid: _data.strStreamId,
pull_uid: util.getUidByStreamIdDr(_data.strStreamId),
code: '0'
});
} catch (e) {}
;
break;
//远端流音量大小
case 'onRemoteAudioVolume':
// defaultApi.writeLog(`TRTC::addListener-- onRemoteAudioVolume: ${JSON.stringify(_data)}`);
var cbData = {
streamId: _data.strStreamId,
volume: _data.volume
};
NOTICE.playerVolumeChanged(cbData);
NOTICE.volumeChange(cbData); // currStreamIdRtcPlayerInfo && currStreamIdRtcPlayerInfo.volume.push(Math.round(item.soundLevel));
// streamIdRtcPlayerInfo[_data.strStreamId] && streamIdRtcPlayerInfo[_data.strStreamId].volume.push(Math.round(item.soundLevel));
if (streamIdRtcPlayerInfo$3[_data.strStreamId]) {
streamIdRtcPlayerInfo$3[_data.strStreamId].volume = streamIdRtcPlayerInfo$3[_data.strStreamId].volume + Math.round(_data.volume) + ',';
}
break;
// //远端流收到首帧音频
// case 'onRemoteAudioStart':
// defaultApi.writeLog(`TRTC::addListener-- onRemoteAudioStart: ${_data}`);
// break;
// //远端流停止推送音频
// case 'onRemoteAudioStop':
// defaultApi.writeLog(`TRTC::addListener-- onRemoteAudioStop: ${_data}`);
// break;
//mute 视频状态,true:远端开始推流,并拉流收到首帧;false:远端停止推流。
case 'onRemoteVideoStatus':
defaultApi$1.writeLog("TRTC::addListener-- onRemoteVideoStatus: ".concat(JSON.stringify(_data)));
console.log('onRemoteVideoStatus', _data);
try {
NOTICE.pullFlowResult({
code: 0,
pull_streamid: _data.strStreamId
});
NOTICE.firstVideoSize({
streamId: _data.strStreamId,
// userId: _data.strStreamId.split('_').length == 5 ? _data.strStreamId : util.getUidByStreamId(_data.strStreamId)
userId: util.getUidByStreamId(_data.strStreamId)
});
dataReport$2.firstVideoSize({
pull_streamid: _data.strStreamId,
pull_uid: util.getUidByStreamIdDr(_data.strStreamId),
code: '0'
});
} catch (e) {}
;
break;
//sei
case 'onRecvSEIMsg':
// defaultApi.writeLog(`TRTC::addListener-- onRecvSEIMsg: ${_data}`);
break;
//网络质量的实时统计回调
// * 该统计回调每间隔2秒抛出一次,用于通知 SDK 感知到的当前网络的质量。
// * SDK 会使用一组内嵌的自研算法对当前网络的延迟高低、带宽大小以及稳定情况进行评估,并计算出一个的评估结果:
// * 如果评估结果为 1(Excellent) 代表当前的网络情况非常好,如果评估结果为 6(Down)代表当前网络无法支撑 SDK 的正常使用。
// *
// * @param strStreamId 流ID,表示远端用户信息。
// * @param quality 网络状态。0未检测;1当前网络非常好;2当前网络比较好;3当前网络一般;4当前网络较差;5当前网络很差;6当前网络不满足 TRTC 的最低要求
case 'onRemoteNetworkQuality':
// defaultApi.writeLog(`TRTC::addListener-- onRemoteNetworkQuality: ${_data}`);
if (_data.quality == 4 || _data.quality == 5 || _data.quality == 6) {
NOTICE.remoteNetworkQuality({
code: _data.quality
});
dataReport$2.remoteNetworkQuality({
code: _data.quality // publish_streamid: window.zbyAVSDK_init_params.trtc.streamId,
});
}
qualityRemoteArr$1.push(_data.quality);
break;
// 转推 CDN 上发布音视频流的事件回调
// * @param state 0转推成功,1表示失败
// * @param err 0表示成功,其余值表示失败
// * @param errMsg 具体错误原因
case 'onRtmpStreamingStateChanged':
defaultApi$1.writeLog("TRTC::addListener-- onRtmpStreamingStateChanged: ".concat(JSON.stringify(_data)));
break;
//* 本地麦克风设备的通断状态发生变化(仅适用于桌面系统)
// * @param deviceId 设备 ID
// * @param state 通断状态,0:设备已添加;1:设备已被移除;2:设备已启用。
case 'onMicphoneDeviceChanged':
defaultApi$1.writeLog("TRTC::addListener-- onMicphoneDeviceChanged: ".concat(JSON.stringify(_data)));
setMicrophoneDevice$3({
deviceId: _data.state == 1 ? '' : _data.deviceId,
operationType: 'hotPlug',
deviceState: _data.state,
changedDeviceId: _data.deviceId
});
break;
//* 本地摄像头设备的通断状态发生变化(仅适用于桌面系统)
// * @param deviceId 设备 ID
// * @param state 通断状态,0:设备已添加;1:设备已被移除;2:设备已启用。
case 'onVideoDeviceChanged':
defaultApi$1.writeLog("TRTC::addListener-- onVideoDeviceChanged: ".concat(JSON.stringify(_data)));
setVideoDevice$1({
deviceId: _data.state == 1 ? '' : _data.deviceId,
operationType: 'hotPlug',
deviceState: _data.state,
changedDeviceId: _data.deviceId
});
break;
//扬声器热插拔
case 'onSpeakerDeviceChanged':
defaultApi$1.writeLog("TRTC::addListener-- onSpeakerDeviceChanged: ".concat(JSON.stringify(_data)));
setSpeakerDevice$3({
deviceId: _data.state == 1 ? '' : _data.deviceId,
operationType: 'hotPlug',
deviceState: _data.state,
changedDeviceId: _data.deviceId
});
break;
//推流的统计数据。5秒一个周期
case 'onLocalStatistics':
// defaultApi.writeLog(`TRTC::addListener-- onLocalStatistics: ${_data}`);
console.log('onLocalStatistics', JSON.parse(_data.json));
NOTICE.pushLossAndDelay({
// userId: util.getUidByStreamId(_data.strStreamId),
delay: _data.rtt,
lostrate: _data.packetLoss
});
heartBeatDataReportCalc$3(event, _data);
break;
//拉流的统计数据。5秒一个周期
case 'onRemoteStatistics':
// defaultApi.writeLog(`TRTC::addListener-- onRemoteStatistics: ${_data}`);
console.log('onRemoteStatistics', JSON.parse(_data.json));
try {
NOTICE.playLossAndDelay({
userId: util.getUidByStreamId(_data.streamId),
delay: _data.rtt,
lostrate: _data.packetLoss
});
} catch (e) {}
heartBeatDataReportCalc$3(event, _data);
break;
case 'onStatisticsUpdate':
// defaultApi.writeLog(`TRTC::addListener-- onStatisticsUpdate: ${JSON.stringify(_data)}`);
// console.log('onStatisticsUpdate',JSON.parse(_data.json).local);
// console.log('onStatisticsUpdate',JSON.parse(_data.json));
// heartBeatDataReportCalc(event, _data);
break;
}
if (zbysdk.openListenerLog) {
console.log("[zby-live-sdk]--TRTC::Listener:: event: ".concat(event, ", data: ").concat(data));
}
});
}
}; //初始化相关
var init$3 = async function init(args) {
defaultApi$1.writeLog("avsdk TRTC::init ".concat(JSON.stringify(args)));
var usedDevices = window.zbyAVSDK_device_checker_init;
var devices = args.devices;
var _devices = {
camera: devices && devices.camera || usedDevices && usedDevices.camera && usedDevices.camera.use || '',
microphone: devices && devices.microphone || usedDevices && usedDevices.microphone && usedDevices.microphone.use || '',
speaker: devices && devices.speaker || usedDevices && usedDevices.speaker && usedDevices.speaker.use || ''
};
await loadTrtc(args.extensionVersion);
await startEngine$2(args.appId, args.userId, args.usersign);
if (args.role === 'teacher' && args.mode === 1) {
//坐立模式开启外部采集器,站立关闭外部采集器,只有小组课坐立模式才会调用,通过这个把rtmp数据给到zego或者rtc(头像),开启了外部采集,zego不会再本地采集数据
await setEnableExternVideoCapture(true);
} //小班课 需要加载采集插件的输入数据,为了拼接zego头像
if (args.classMode === 1 || args.classMode === 2) {
defaultApi$1.writeLog('loadCollectionInputEntry');
loadCollectionInputEntry$2();
}
;
await setCameraEncodeBiarate(args.encodeCaptureBitrate);
await setCameraEncodeFps$1(args.encodeCaptureFps);
await setCameraCaptureResolution$1(args.previewResolutionWidth, args.previewResolutionHeight);
await setCameraEncodeResolution$1(args.encodedResolutionWidth, args.encodedResolutionHeight); // await setCameraEncodeBiarate(args.screenSameBitrate,1);
// await setCameraEncodeFps(args.screenSameFps, 1);
// await setCameraCaptureResolution(args.screenSameResolutionWidth, args.screenSameResolutionHeight, 1);
// await setCameraEncodeResolution(args.screenSameResolutionWidth, args.screenSameResolutionHeight, 1);
// await setCameraEncodeBiarate(500000);
// await setCameraEncodeFps(15);
// await setCameraCaptureResolution(640, 480);
// await setCameraEncodeResolution(320, 240);
await setDefaultDevice$3(_devices, 'default');
await setMicphoneVolumInterval$1(500);
window.current_sdk_type = 'trtc';
defaultApi$1.writeLog('trtc init finished current_sdk_type : trtc');
};
/**
* @function 初始化引擎
* @param appid:String TRTC 秘钥,必选
* @param userid:String
* @param usersign:String
* @return Promise | void
*/
var startEngine$2 = function startEngine(appid, userid, usersign) {
defaultApi$1.writeLog("avsdk TRTC::StartEngine appid: ".concat(appid, " userid: ").concat(userid, " usersign: ").concat(usersign));
return callMethod$6('StartEngine', {
appid: appid,
userid: userid + '',
usersign: usersign
});
};
var setEnableExternVideoCapture = function setEnableExternVideoCapture(enable) {
defaultApi$1.writeLog("avsdk TRTC::EnableExternVideoCapture");
return callMethod$6('EnableExternVideoCapture', {
enable: enable
});
};
/**
* @function 销毁引擎
* @return Promise | void
*/
var destroyEngine$3 = function destroyEngine() {
return callMethod$6('DestroyEngine', {});
}; //设置采集分辨率
var setCameraCaptureResolution$1 = function setCameraCaptureResolution(width, height) {
return callMethod$6('SetCameraCaptureResolution', {
width: width,
height: height
});
}; //设置编码分辨率
var setCameraEncodeResolution$1 = function setCameraEncodeResolution(width, height) {
return callMethod$6('SetCameraEncodeResolution', {
width: width,
height: height
});
}; //设置编码帧率
var setCameraEncodeFps$1 = function setCameraEncodeFps(fps) {
return callMethod$6('SetCameraEncodeFps', {
fps: fps
});
}; //设置编码码率
var setCameraEncodeBiarate = function setCameraEncodeBiarate(bitrate) {
return callMethod$6('SetCameraEncodeBiarate', {
bitrate: bitrate
});
}; //获取指定摄像头的支持的分辨率
var getCameraResolution$1 = function getCameraResolution(deviceId) {
return callMethod$6('GetCameraResolution', {
deviceId: deviceId
});
};
/**
* @function 设置默认的硬件设备,包括摄像头、麦克风以及扬声器
* @return Promise
*/
var setDefaultDevice$3 = async function setDefaultDevice(devices, operationType) {
// 设置默认的摄像头
if (devices && devices.camera) {
if (zbyAVSDK_device_checker_init.camera.list.length == 0) {
await getCameraDeviceListTrtc();
}
await setVideoDevice$1({
deviceId: devices.camera,
operationType: "".concat(operationType, "_1")
});
} else {
var cameraData = await getCameraDeviceListTrtc();
if (cameraData.length) {
var hasSetCamera = false;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = cameraData[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var item = _step.value;
if (item.isDefault) {
await setVideoDevice$1({
deviceId: item.deviceId,
operationType: "".concat(operationType, "_2")
});
hasSetCamera = true;
break;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
if (!hasSetCamera) {
await setVideoDevice$1({
deviceId: cameraData[0].deviceId,
operationType: "".concat(operationType, "_3")
});
}
}
} // 设置默认的麦克风
if (devices && devices.microphone) {
if (zbyAVSDK_device_checker_init.microphone.list.length == 0) {
await getMicrophoneDeviceListTrtc();
}
console.log('pp2');
await setMicrophoneDevice$3({
deviceId: devices.microphone,
operationType: "".concat(operationType, "_1")
});
} else {
console.log('pp3');
var microPhoneData = await getMicrophoneDeviceListTrtc();
try {
if (microPhoneData.length) {
var hasSetMicrophone = false;
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = microPhoneData[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var _item = _step2.value;
if (_item.isDefault) {
await setMicrophoneDevice$3({
deviceId: _item.deviceId,
operationType: "".concat(operationType, "_2")
});
hasSetMicrophone = true;
break;
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
if (!hasSetMicrophone) {
await setMicrophoneDevice$3({
deviceId: microPhoneData[0].deviceId,
operationType: "".concat(operationType, "_3")
});
}
}
} catch (e) {
console.log(e);
}
} // 设置默认的扬声器
if (devices && devices.speaker) {
await setSpeakerDevice$3({
deviceId: devices.speaker,
operationType: "".concat(operationType, "_1")
});
} else {
var speakerData = await getSpeakerDeviceListTrtc();
if (speakerData.length) {
var hasSetSpeaker = false;
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = speakerData[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var _item2 = _step3.value;
if (_item2.isDefault) {
await setSpeakerDevice$3({
deviceId: _item2.deviceId,
operationType: "".concat(operationType, "_2")
});
hasSetSpeaker = true;
break;
}
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
if (!hasSetSpeaker) {
await setSpeakerDevice$3({
deviceId: speakerData[0].deviceId,
operationType: "".concat(operationType, "_3")
});
}
}
}
}; //麦克风相关
/**
* @function 开启麦克风
* @param intervalMs: Number
* @return Promise | void
*/
var startMicrophone$1 = function startMicrophone() {
var intervalMs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 500;
return callMethod$6('StartMicrophone', {
intervalMs: intervalMs
});
};
/**
* @function 关闭麦克风
* @return Promise | void
*/
var stopMicrophone$1 = function stopMicrophone() {
return callMethod$6('StopMicrophone', {});
};
var openOrCloseMicrophone$1 = async function openOrCloseMicrophone(operation) {
isNoticeMicVolumeTRTC = operation;
if (operation) {
await startMicrophone$1();
} else {
await stopMicrophone$1();
}
};
/**
* @function 设置麦克风音量大小回调周期
* @param intervalMs: Number
* @return Promise | void
*/
var setMicphoneVolumInterval$1 = function setMicphoneVolumInterval(intervalMs) {
return callMethod$6('SetMicphoneVolumInterval', {
intervalMs: intervalMs
});
};
/**
* @function 获取麦克风设备列表
* @return Promise | void
*/
var getMicrophoneDeviceList$2 = function getMicrophoneDeviceList() {
return callMethod$6('GetMicrophoneDeviceList', {});
};
/**
* @function 获取麦克风列表
* @return Promise | void
*/
var getMicrophoneDeviceListTrtc = async function getMicrophoneDeviceListTrtc() {
console.log('getMicrophoneDeviceListTrtc_microphoneListArr_trtc_ii');
var microphoneListArr = JSON.parse(JSON.parse((await getMicrophoneDeviceList$2()).msg).DeviceList);
console.log('getMicrophoneDeviceListTrtc_microphoneListArr_trtc_iii', microphoneListArr);
var microphoneList = [];
for (var i = 0, len = microphoneListArr.length; i < len; i++) {
microphoneList.push({
deviceId: microphoneListArr[i].id,
deviceName: microphoneListArr[i].name,
isDefault: microphoneListArr[i].default
});
deviceListReport.micList[microphoneListArr[i].szDeviceId] = microphoneListArr[i].szDeviceName;
}
if (!window.zbyAVSDK_device_checker_init) {
window.zbyAVSDK_device_checker_init = {};
}
if (!window.zbyAVSDK_device_checker_init.microphone) {
window.zbyAVSDK_device_checker_init.microphone = {};
}
window.zbyAVSDK_device_checker_init.microphone.hasTest = true;
window.zbyAVSDK_device_checker_init.microphone.list = microphoneList;
console.log('getMicrophoneDeviceListTrtc_microphoneListArr_trtc', microphoneList);
return microphoneList;
};
/**
* @function 设置指定音频(当前麦克风)设备
* @param deviceId:String 音频设备 id,必选
* @return Promise | void
*/
var setCurrentMicrophoneDevice$1 = function setCurrentMicrophoneDevice(deviceId) {
window.zbyAVSDK_device_checker_init.microphone.use = deviceId;
return callMethod$6('SetCurrentMicrophoneDevice', {
deviceId: deviceId
});
};
/**
* @function 指定麦克风设备
* @param deviceId:String 麦克风设备 id,必选
* @param operationType:String 操作类型,可选
* @return Promise | void
*/
var setMicrophoneDevice$3 = async function setMicrophoneDevice(args) {
console.log('getMicrophoneDeviceListTrtc_microphoneListArr_trtc_i');
var deviceId = args.deviceId,
operationType = args.operationType,
deviceState = args.deviceState,
changedDeviceId = args.changedDeviceId;
var deviceName = '';
var microPhoneData;
if (!deviceId) {
microPhoneData = await getMicrophoneDeviceListTrtc();
if (microPhoneData.length) {
var hasGetMicrophone = false;
var _iteratorNormalCompletion4 = true;
var _didIteratorError4 = false;
var _iteratorError4 = undefined;
try {
for (var _iterator4 = microPhoneData[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
var item = _step4.value;
if (item.isDefault) {
deviceId = item.deviceId;
deviceName = item.deviceName;
hasGetMicrophone = true;
break;
}
}
} catch (err) {
_didIteratorError4 = true;
_iteratorError4 = err;
} finally {
try {
if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
_iterator4.return();
}
} finally {
if (_didIteratorError4) {
throw _iteratorError4;
}
}
}
if (!hasGetMicrophone) {
deviceId = microPhoneData[0].deviceId;
deviceName = microPhoneData[0].deviceName;
}
} else {
deviceId = '';
}
if (deviceId === '') {
NOTICE.noDevice({
deviceType: 'microphone'
});
}
}
try {
dataReport$2.setDevice({
device_type: 2,
device_id: deviceId,
device_name: deviceListReport.micList[deviceId],
operationType: operationType,
fore_state: operationType == 'hotPlug' ? +deviceState + 1 : '-'
});
window.zbyAVSDK_device_checker_init.microphone.name = deviceListReport.micList[deviceId];
} catch (e) {}
;
await setCurrentMicrophoneDevice$1(deviceId);
if (operationType == 'hotPlug' || operationType == 'deviceError') {
if (!microPhoneData) {
microPhoneData = await getMicrophoneDeviceListTrtc();
deviceName = deviceListReport.micList[deviceId];
}
NOTICE[operationType]({
deviceType: 'microphone',
useDeviceId: deviceId,
useDeviceName: deviceName,
deviceList: microPhoneData,
deviceState: deviceState,
changedDeviceId: changedDeviceId
});
}
};
/**
* @function 获取当前麦克风的音量
* @return Promise | void
*/
var getCurrentMicrophoneVolume$1 = function getCurrentMicrophoneVolume() {
return callMethod$6('GetCurrentMicrophoneVolume', {}).then(function (ret) {
var volume = 0;
try {
volume = JSON.parse(ret.msg).microphoneVolume;
} catch (e) {
console.error("zby-live-sdk: getCurrentMicrophoneVolume ret: ".concat(ret, ". error: ").concat(e));
}
return volume;
});
};
/**
* @function 设置当前麦克风的音量
* @param volume : number 音量值
* @return Promise | void
*/
var setCurrentMicrophoneVolume$1 = function setCurrentMicrophoneVolume(volume) {
return callMethod$6('SetCurrentMicrophoneVolume', {
volume: volume
});
};
/**
* @function 获取当前麦克风ID
* @return Promise | void
*/
var getCurrentMicrophoneId$2 = function getCurrentMicrophoneId(volume) {
return callMethod$6('GetCurrentMicrophoneId', {
volume: volume
});
}; //摄像头相关
/**
* @function 打开摄像头
* @param width: Number
* @param height: Number
* @return Promise | void
*/
var startCamera$1 = function startCamera(width, height) {
return callMethod$6('StartCamera', {
width: width,
height: height
});
};
/**
* @function 关闭摄像头
* @return Promise | void
*/
var stopCamera$1 = function stopCamera() {
return callMethod$6('StopCamera', {});
};
var openOrCloseCamera$2 = async function openOrCloseCamera(operation) {
console.log('openCa', operation);
if (operation) {
await startCamera$1();
} else {
await stopCamera$1();
}
};
/**
* @function 获取摄像头列表
* @return Promise | void
*/
var getCameraDeviceList$1 = function getCameraDeviceList() {
return callMethod$6('GetCameraDeviceList', {});
};
/**
* @function 获取摄像头列表
* @return Promise | void
*/
var getCameraDeviceListTrtc = async function getCameraDeviceListTrtc() {
var videoListArr = JSON.parse(JSON.parse((await getCameraDeviceList$1()).msg).DeviceList);
console.log('GetCameraDeviceList_cameraList_trtc_iiii', videoListArr);
var videoList = [];
for (var i = 0, len = videoListArr.length; i < len; i++) {
videoList.push({
deviceId: videoListArr[i].id,
deviceName: videoListArr[i].name,
isDefault: videoListArr[i].default
});
deviceListReport.cameraList[videoListArr[i].szDeviceId] = videoListArr[i].szDeviceName;
}
if (!window.zbyAVSDK_device_checker_init) {
window.zbyAVSDK_device_checker_init = {};
}
if (!window.zbyAVSDK_device_checker_init.camera) {
window.zbyAVSDK_device_checker_init.camera = {};
}
window.zbyAVSDK_device_checker_init.camera.hasTest = true;
window.zbyAVSDK_device_checker_init.camera.list = videoList;
console.log('GetCameraDeviceList_cameraList_trtc', videoList);
return videoList;
};
/**
* @function 设置指定视频(当前摄像头)设备
* @param deviceId:String 视频设备 id,必选
* @return Promise | void
*/
var setCurrentCameraDevice = function setCurrentCameraDevice(deviceId) {
window.zbyAVSDK_device_checker_init.camera.use = deviceId;
return callMethod$6('SetCurrentCameraDevice', {
deviceId: deviceId
});
};
/**
* @function 指定使用的摄像头
* @param deviceId:String 摄像头 id,必选
* @param operationType:String 操作类型,可选
* 'device_error' -> 设备出错处理,'plug_and_unplug' -> 热插拔处理,
* 不传即是普通的设置摄像头设备的行为
* @return Promise | void
*/
var setVideoDevice$1 = async function setVideoDevice(args) {
defaultApi$1.writeLog("".concat(JSON.stringify(args), "----setVideoDevice-trtc----"));
var deviceId = args.deviceId,
operationType = args.operationType,
deviceState = args.deviceState,
code = args.code,
changedDeviceId = args.changedDeviceId;
var deviceName = '';
var cameraData;
if (!deviceId) {
cameraData = await getCameraDeviceListTrtc(); // console.log('hsghsghsg0',cameraData);
if (cameraData.length) {
var hasGetCamare = false; // console.log('hsghsghsg1',hasGetSpeaker);
var _iteratorNormalCompletion5 = true;
var _didIteratorError5 = false;
var _iteratorError5 = undefined;
try {
for (var _iterator5 = cameraData[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
var item = _step5.value;
if (item.isDefault) {
deviceId = item.deviceId;
deviceName = item.deviceName;
hasGetCamare = true;
break;
}
} // console.log('hsghsghsg2',hasGetSpeaker);
} catch (err) {
_didIteratorError5 = true;
_iteratorError5 = err;
} finally {
try {
if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
_iterator5.return();
}
} finally {
if (_didIteratorError5) {
throw _iteratorError5;
}
}
}
if (!hasGetCamare) {
deviceId = cameraData[0].deviceId;
deviceName = cameraData[0].deviceName; // console.log('hsghsghsg91',deviceId);
}
} else {
deviceId = '';
} // console.log('hsghsghsg1',deviceId);
if (deviceId === '') {
NOTICE.noDevice({
deviceType: 'camera'
});
}
}
window.zbyAVSDK_device_checker_init.camera.use = deviceId;
window.zbyAVSDK_device_checker_init.camera.name = deviceListReport.cameraList[deviceId];
try {
dataReport$2.setDevice({
device_type: 1,
device_id: deviceId,
device_name: deviceListReport.cameraList[deviceId],
operationType: operationType,
fore_state: operationType == 'hotPlug' ? deviceState + 1 : '-'
});
} catch (e) {}
;
await setCurrentCameraDevice(deviceId);
if (operationType == 'hotPlug' || operationType == 'deviceError') {
if (!cameraData) {
cameraData = await getCameraDeviceListTrtc();
deviceName = deviceListReport.cameraList[deviceId];
}
NOTICE[operationType]({
deviceType: 'camera',
useDeviceId: deviceId,
useDeviceName: deviceName,
deviceList: cameraData,
messge: code,
deviceState: deviceState,
changedDeviceId: changedDeviceId
});
}
try {
NOTICE.useredCamera({
deviceId: deviceId,
deviceName: deviceName
});
} catch (e) {}
;
};
/**
* @function 获取当前摄像头ID
* @return Promise | void
*/
var GetCurrentCameraId$1 = function GetCurrentCameraId() {
return callMethod$6('GetCurrentCameraId', {});
}; //扬声器相关
/**
* @function 获取扬声器列表
* @return Promise | void
*/
var getSpeakerDeviceList$2 = function getSpeakerDeviceList() {
return callMethod$6('GetSpeakerDeviceList', {});
};
/**
* @function 获取扬声器列表
* @return Promise | void
*/
var getSpeakerDeviceListTrtc = async function getSpeakerDeviceListTrtc() {
var speakerListArr = JSON.parse(JSON.parse((await getSpeakerDeviceList$2()).msg).DeviceList);
console.log('getSpeakerDeviceList_speakerListArr_trtc_ii', speakerListArr);
var speakerList = [];
for (var i = 0, len = speakerListArr.length; i < len; i++) {
speakerList.push({
deviceId: speakerListArr[i].id,
deviceName: speakerListArr[i].name,
isDefault: speakerListArr[i].default
});
deviceListReport.speakerList[speakerListArr[i].szDeviceId] = speakerListArr[i].szDeviceName;
}
if (!window.zbyAVSDK_device_checker_init) {
window.zbyAVSDK_device_checker_init = {};
}
if (!window.zbyAVSDK_device_checker_init.speaker) {
window.zbyAVSDK_device_checker_init.speaker = {};
}
window.zbyAVSDK_device_checker_init.speaker.hasTest = true;
window.zbyAVSDK_device_checker_init.speaker.list = speakerList;
console.log('getSpeakerDeviceList_speakerListArr_trtc_iii', speakerList);
return speakerList;
};
/**
* @function 设置指定音频(当前扬声器)设备
* @param deviceId:String 音频设备 id,必选
* @return Promise | void
*/
var setCurrentSpeakerDevice$1 = function setCurrentSpeakerDevice(deviceId) {
window.zbyAVSDK_device_checker_init.speaker.use = deviceId;
return callMethod$6('SetCurrentSpeakerDevice', {
deviceId: deviceId
});
};
/**
* @function 指定扬声器
* @param deviceId:String 扬声器 id,必选
* @param operationType:String 操作类型,可选
* 'device_error' -> 设备出错处理,'plug_and_unplug' -> 热插拔处理,
* 不传即是普通的设置扬声器设备的行为
* @return Promise | void
*/
var setSpeakerDevice$3 = async function setSpeakerDevice(args) {
defaultApi$1.writeLog("".concat(JSON.stringify(args), "----setSpeakerDevice-trtc----"));
console.log('hsghsghsg999', args);
var deviceId = args.deviceId,
operationType = args.operationType,
deviceState = args.deviceState,
code = args.code,
changedDeviceId = args.changedDeviceId;
var deviceName = '';
var speakerData;
if (!deviceId) {
speakerData = await getSpeakerDeviceListTrtc();
console.log('hsghsghsg0', speakerData.length);
if (speakerData.length) {
var hasGetSpeaker = false;
console.log('hsghsghsg1', hasGetSpeaker);
var _iteratorNormalCompletion6 = true;
var _didIteratorError6 = false;
var _iteratorError6 = undefined;
try {
for (var _iterator6 = speakerData[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
var item = _step6.value;
if (item.isDefault) {
deviceId = item.deviceId;
deviceName = item.deviceName;
hasGetSpeaker = true;
break;
}
}
} catch (err) {
_didIteratorError6 = true;
_iteratorError6 = err;
} finally {
try {
if (!_iteratorNormalCompletion6 && _iterator6.return != null) {
_iterator6.return();
}
} finally {
if (_didIteratorError6) {
throw _iteratorError6;
}
}
}
console.log('hsghsghsg2', hasGetSpeaker);
if (!hasGetSpeaker) {
deviceId = speakerData[0].deviceId;
deviceName = speakerData[0].deviceName;
console.log('hsghsghsg91', deviceId);
}
} else {
deviceId = '';
}
if (deviceId === '') {
NOTICE.noDevice({
deviceType: 'speaker'
});
}
}
console.log('hsghsghsg999', deviceId);
try {
dataReport$2.setDevice({
device_type: 3,
device_id: deviceId,
device_name: deviceListReport.speakerList[deviceId],
operationType: operationType,
fore_state: operationType == 'hotPlug' ? deviceState + 1 : '-'
});
window.zbyAVSDK_device_checker_init.speaker.name = deviceListReport.speakerList[deviceId];
} catch (e) {
console.log(e);
}
;
console.log('hsghsghsg99911', deviceId);
usingAudioDeviceId$2.speaker = deviceId;
await setCurrentSpeakerDevice$1(deviceId);
if (operationType == 'hotPlug' || operationType == 'deviceError') {
if (!speakerData) {
speakerData = await getSpeakerDeviceListTrtc();
deviceName = deviceListReport.speakerList[deviceId];
}
console.log('hsghsghsg99911', deviceId);
NOTICE[operationType]({
deviceType: 'speaker',
useDeviceId: deviceId,
useDeviceName: deviceName,
deviceList: speakerData,
message: code,
deviceState: deviceState,
changedDeviceId: changedDeviceId
});
}
console.log('hsghsghsg999112', deviceId);
};
/**
* @function 获取当前扬声器的音量
* @return Promise | void
*/
var getCurrentSpeakerVolume$1 = function getCurrentSpeakerVolume() {
return callMethod$6('GetCurrentSpeakerVolume', {});
};
/**
* @function 获取当前扬声器ID
* @return Promise | void
*/
var getCurrentSpeakerId$2 = function getCurrentSpeakerId() {
return callMethod$6('GetCurrentSpeakerId', {});
};
/**
* @function 设置当前扬声器音量
* @param volume : number 音量值
* @return Promise | void
*/
var setCurrentSpeakerVolume$1 = function setCurrentSpeakerVolume(volume) {
return callMethod$6('SetCurrentSpeakerVolume', {
volume: volume
});
};
/**
* @function 打开系统声音采集
* @return Promise | void
*/
var startSystemAudioLoopback = function startSystemAudioLoopback() {
return callMethod$6('StartSystemAudioLoopback', {});
};
/**
* @function 关闭系统声音采集
* @return Promise | void
*/
var stopSystemAudioLoopback = function stopSystemAudioLoopback() {
return callMethod$6('StopSystemAudioLoopback', {});
}; //采集扬声器声音
var setAudioSpeakerCapture$2 = function setAudioSpeakerCapture(speaker) {
if (speaker) {
return startSystemAudioLoopback();
} else {
return stopSystemAudioLoopback();
}
}; //sei
/**
* @function sei消息
* @param data: String 数据
* @param dataSize: Number 数据长度
* @param repeatCount: Number 发送次数
* @return Promise | void
*/
var sendSEIMsg$1 = function sendSEIMsg(data, dataSize, repeatCount) {
if (typeof dataSize === 'undefined') {
dataSize = data.length;
}
;
if (typeof repeatCount === 'undefined') {
repeatCount = 1;
}
return callMethod$6('SendSEIMsg', {
data: data,
dataSize: dataSize,
repeatCount: repeatCount
});
}; //采集相关
/**
* @function 开始屏幕采集
* @return Promise | void
*/
var startScreenCapture$1 = function startScreenCapture() {
return callMethod$6('StartScreenCapture', {});
};
/**
* @function 停止屏幕采集
* @return Promise | void
*/
var stopScreenCapture$1 = function stopScreenCapture() {
return callMethod$6('StopScreenCapture', {});
}; //推拉流相关
/**
* @function 开启本地或者远程的视频视图
* @param isLocal:Boolean 是否是本地的视频预览,必选
* @param streamId:String 要拉取的视频流的 id,可选,只有拉取远程的视频流的时候才是必选的
* @param domId:String <video> 标签的 id,可选
* 如果传了 domId,就把视频绑定到对应的 <video> 标签上
* @return Promise 可从 Promise 中获取 src,Promise.then((src) => {})
*/
var startLocalOrRemotePreview$3 = async function startLocalOrRemotePreview(isLocal, streamId, domId, isTeacherNewWindowPreview) {
defaultApi$1.writeLog("".concat(streamId, "----streamId-trtc---- ").concat(isLocal));
var isUpdateChromeVersion = await util.getChromeVersion(); // 预览本地视频的话,流 id 从全局配置中获取
// if (isLocal) {
// streamId = isInRoom ? (window.zbyAVSDK_init_params && window.zbyAVSDK_init_params.trtc.streamId)
// : 'deviceCheckerInit';
// }
var externalConstraints = {
audio: false,
video: {
mandatory: {
chromeMediaSource: 'external',
chromeMediaSourceId: "ems://trtc_ext/".concat(isLocal || isTeacherNewWindowPreview ? -3 : streamId)
}
}
};
console.log('externalConstraints', externalConstraints);
return new Promise(function (resolve, reject) {
var handleExternalSuccess = function handleExternalSuccess(stream) {
defaultApi$1.writeLog("".concat(stream, "----stream-trtc----"));
stream.oninactive = function () {
defaultApi$1.writeLog('Stream inactive');
};
var src = isUpdateChromeVersion ? stream : window.URL.createObjectURL(stream);
console.log('内核升级', isUpdateChromeVersion, domId, src);
if (domId && document.querySelector(domId)) {
if (isUpdateChromeVersion) {
document.querySelector(domId).srcObject = src;
console.log('内核升级1', domId, document.querySelector(domId), document.querySelector(domId).srcObject, src);
} else {
console.log('内核升级2');
document.querySelector(domId).src = src;
}
}
defaultApi$1.writeLog("setVidoeSrc, streamId:".concat(streamId, ", domId: ").concat(domId, ", src: ").concat(src));
resolve(src);
};
var handleExternalError = function handleExternalError(error) {
if (error.name === 'ConstraintNotSatisfiedError') {
console.error('ConstraintNotSatisfiedError');
} else if (error.name === 'PermissionDeniedError') {
console.error('Permissions have not been granted to use your camera and ' + 'microphone, you need to allow the page access to your devices in ' + 'order for the demo to work.');
}
console.error("getUserMedia error: ".concat(error.name), error);
if (domId) {
document.querySelector(domId).src = '';
}
reject('');
};
if (navigator.webkitGetUserMedia) {
navigator.webkitGetUserMedia(externalConstraints, handleExternalSuccess, handleExternalError);
}
});
};
/**
* @function 开始推流
* @param streamId: String 流id
* @return Promise | void
*/
var startPush$2 = function startPush(streamId) {
var channel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
if (!streamId) {
streamId = zbyAVSDK_init_params.trtc.streamId;
} // 心跳开始
if (!isFirstHeartBeatReport$3) {
isFirstHeartBeatReport$3 = true;
console.log('ppppppp上报呀');
heartBeatDataReport$3('start');
}
console.log('startPush', streamId, channel);
return callMethod$6('StartPush', {
streamId: streamId,
channel: channel
});
};
/**
* @function 停止推流
* @param streamId: String 流id
* @return Promise | void
*/
var stopPush$2 = function stopPush(channel) {
// if(!streamId){
// streamId = zbyAVSDK_init_params.trtc.streamId;
// }
if (!channel) {
channel = 0;
}
return callMethod$6('StopPush', {
channel: channel
});
};
/**
* @function 不推/推 音频
* @param enable : bool
* @return Promise | void
*/
var muteLocalAudio$2 = function muteLocalAudio(enable) {
return callMethod$6('MuteLocalAudio', {
enable: enable
});
};
/**
* @function 不推/推 视频
* @param enable: bool
* @return Promise | void
*/
var muteLocalVideo$2 = function muteLocalVideo(enable) {
return callMethod$6('MuteLocalVideo', {
enable: enable
});
};
/**
* @function 开始转推本地摄像头TRTC流至RTMP。目前只支持转推1路
* @return Promise | void
*/
var addPublishRtmpStreamUrl$1 = function addPublishRtmpStreamUrl() {
return callMethod$6('AddPublishRtmpStreamUrl', {});
};
/**
* @function 停止转推RTMP
* @return Promise | void
*/
var removePublishStreamUrl$1 = function removePublishStreamUrl() {
return callMethod$6('RemovePublishStreamUrl', {});
};
/**
* @function 开始拉流
* @param streamId: String 流id
* @return Promise | void
*/
var startPlay$1 = function startPlay(streamId) {
return callMethod$6('StartPlay', {
streamId: streamId
});
};
/**
* @function 初始化拉流
* @param streamId:String 从传来的信道消息中获取,必选
* @param domId:String <video> 标签的 id,可选
* 如果传了就把视频绑定到对应的 <video> 标签上
* @param pInfo:String 多媒体流附加信息,可选,默认为 'none'
* @return src:String 视频预览地址
*/
var initPullFlow$3 = async function initPullFlow(streamId, domId, mute, pInfo, notAutoPlay, audioOnly) {
defaultApi$1.writeLog("TRTC:: initPullFlow_start ,streamId :".concat(streamId));
var playChannel;
resetStreamIdRtcPlayerInfo1$3(streamId);
resetStreamIdRtcPlayerInfo$3(streamId);
try {
if (!isFirstHeartBeatReport$3) {
isFirstHeartBeatReport$3 = true;
heartBeatDataReport$3('start');
}
} catch (error) {}
if (streamIdToPreviewId$3[streamId] == undefined) {
// defaultApi.writeLog(`TRTC:: The streamId queue does not contain this streamId ${uiChnIndexs}`);
playChannel = uiChnIndexs$2.pop();
streamIdToPreviewId$3[streamId] = playChannel;
console.log('streamIdIsNoExited', playChannel, streamIdToPreviewId$3[streamId], streamId, uiChnIndexs$2);
} else {
defaultApi$1.writeLog('TRTC:: The streamId queue contains this streamId');
playChannel = streamIdToPreviewId$3[streamId];
console.log('streamIdIsExited', playChannel, streamIdToPreviewId$3[streamId], streamId, uiChnIndexs$2);
await stopPlay$1(streamId);
resetStreamIdRtcPlayerInfo$3(streamId);
} // 判断是否创建或者获取播放通道成功,不成功就删掉重试
// if (playChannel == undefined) {
// delete streamIdToPreviewId[streamId];
// defaultApi.writeLog('error', 'TRTC:: uiChnIndex is not exist');
// // delete streamIdToBlobUrl[streamId];
// return initPullFlow(streamId, domId, mute, pInfo, notAutoPlay, audioOnly);
// }
previewIdToStreamId$2[playChannel] = streamId; //是否拉取声音
// await muteRemoteAudio(streamId, !!mute);
// //是否拉取画面
// await muteRemoteVideo(streamId, !!audioOnly);
if (!notAutoPlay) {
await startPlay$1(streamId);
}
await muteRemoteAudio$1(streamId, !!mute); //是否拉取画面
await muteRemoteVideo$1(streamId, !!audioOnly);
var videoSrc = await startLocalOrRemotePreview$3(false, streamId, domId);
return {
videoSrc: videoSrc,
playerId: playChannel
};
};
/**
* @function 停止拉流
* @param streamId: String 流id
* @return Promise | void
*/
var stopPlay$1 = function stopPlay(streamId, recovery) {
var id = streamIdToPreviewId$3[streamId];
delete streamIdRtcPlayerInfo$3[streamId];
if (recovery && id && !uiChnIndexs$2.includes(id)) {
uiChnIndexs$2.push(id);
defaultApi$1.writeLog("avsdk TRTC::stopPlayStream streamId: ".concat(streamId, " id: ").concat(id, " uiChnIndexs: ").concat(uiChnIndexs$2));
delete streamIdToPreviewId$3[streamId];
}
return callMethod$6('StopPlay', {
streamId: streamId
});
};
/**
* @function 停止拉所有的流
* @return Promise | void
*/
var stopPlayAll$1 = function stopPlayAll() {
return callMethod$6('StopPlayAll', {});
};
/**
* @function 不拉/拉 音频 true是静音/false是拉声音
* @param streamId :string
* @param mute : bool
* @return Promise | void
*/
var muteRemoteAudio$1 = function muteRemoteAudio(streamId, mute) {
console.log('audio_type', mute);
streamIdRtcPlayerInfo1$3[streamId].audio_type = !mute;
console.log('audio_type1', streamIdRtcPlayerInfo1$3);
return callMethod$6('MuteRemoteAudio', {
streamId: streamId,
mute: mute
});
};
var pullAudioFlow$3 = async function pullAudioFlow(playerId, operation, streamid) {
defaultApi$1.writeLog("pullAudioFlow -- playerId ".concat(playerId, " operation ").concat(operation, " streamId ").concat(streamid));
if (streamid) {
if (streamIdToPreviewId$3[streamid] == undefined) {
NOTICE.pullAudioFlowError({
streamid: streamid
});
return;
} else {
playerId = streamIdToPreviewId$3[streamid];
console.log('pullAudioFlow-playerId', playerId, streamIdToPreviewId$3);
}
}
var streamId = previewIdToStreamId$2[playerId];
try {
streamIdRtcPlayerInfo1$3[streamId].audio_type = !operation;
console.log('pullAudioFlow ::previewIdToStreamId', streamId, previewIdToStreamId$2);
console.log('pullAudioFlow ::streamIdRtcPlayerInfo1', streamId, streamIdRtcPlayerInfo1$3);
} catch (e) {
console.log('pullAudioFlow ::streamIdRtcPlayerInfo1--error', e);
}
try {
dataReport$2.setPullVoice({
code: +!operation,
pull_uid: util.getUidByStreamId(streamId),
pull_streamid: streamId,
playerId: playerId // operator:'client'
});
} catch (e) {}
;
return await muteRemoteAudio$1(streamId, operation);
};
/**
* @function 不拉/拉 视频
* @param streamId :string
* @param mute: bool
* @return Promise | void
*/
var muteRemoteVideo$1 = function muteRemoteVideo(streamId, mute) {
try {
streamIdRtcPlayerInfo1$3[streamId].video_type = !mute;
console.log('activateVideoPlayStream ::streamIdRtcPlayerInfo1', streamIdRtcPlayerInfo1$3);
} catch (e) {
console.log('activateVideoPlayStream ::streamIdRtcPlayerInfo1 --error', e);
}
return callMethod$6('MuteRemoteVideo', {
streamId: streamId,
mute: mute
});
};
/**
*
* @function 全员开麦突出声音流
* @param bFocus :bool
* @param streamIdarr : array
* @return Promise | void
*/
var setFocusStreams = function setFocusStreams(bFocus, streamIdarr) {
var _callMethod;
return callMethod$6('SetFocusStreams', (_callMethod = {
bFocus: bFocus,
streamId1: streamId1
}, _defineProperty(_callMethod, "streamId1", streamId1), _defineProperty(_callMethod, "streamId1", streamId1), _defineProperty(_callMethod, "streamId1", streamId1), _callMethod));
}; //加载采集插件的输入数据
var loadCollectionInputEntry$2 = function loadCollectionInputEntry() {
return callMethod$6('LoadCollectionInputEntry', {});
}; //加载截屏插件
var LoadCollectionOutputEntry2$2 = function LoadCollectionOutputEntry2() {
defaultApi$1.writeLog('info', 'avsdk TRTC::LoadCollectionOutputEntry2');
return callMethod$6('LoadCollectionOutputEntry2', {});
}; //开启同屏
var startMultiScreen$2 = async function startMultiScreen() {
defaultApi$1.writeLog('info', 'avsdk TRTC::startMultiScreen'); // await setVideoCaptureFactory(true,1);
await LoadCollectionOutputEntry2$2();
}; //高光时刻 enable (bool)/strDomain (string)/strKey (string)
var enableHighlight = async function enableHighlight(enable) {
var strDomain = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
var strKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
defaultApi$1.writeLog('info', 'avsdk TRTC::enableHighlight');
return callMethod$6('EnableHighlight', {
enable: enable,
strDomain: strDomain,
strKey: strKey
});
};
/**
* @function 获取当前视频流所有的通道
* @param streamId 流 id
* @return channelIndex
*/
var getAllChannelIndex$2 = function getAllChannelIndex() {
defaultApi$1.writeLog("TRTC : getAllChannelIndex ".concat(JSON.stringify(streamIdToPreviewId$3)));
return streamIdToPreviewId$3;
}; //开始连麦
var teacherStartLinkMic$3 = async function teacherStartLinkMic(mode) {
if (mode === 0) {
await startMicrophone$1();
} else {
//开始连麦后,需要打开麦克风,开启外部采集器后(每次都要开启)
await startMicrophone$1();
await setEnableExternVideoCapture(true);
}
}; //结束连麦
var teacherStopLinkMic$3 = async function teacherStopLinkMic() {
var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
// if (mode === 0) {
// // await muteVideoPublish(false,0);
// } else {
await stopMicrophone$1(); // }
};
/**
* @function 离开教室
* @return Promise | void
*/
var leaveRoom$3 = async function leaveRoom() {
for (var key in streamIdToPreviewId$3) {
await stopPlay$1(key, true); //huishou
}
await stopPush$2();
removerListener$3();
await destroyEngine$3();
heartBeatDataReport$3('stop');
isFirstHeartBeatReport$3 = false;
streamIdToPreviewId$3 = {};
previewIdToStreamId$2 = {};
streamIdRtcPlayerInfo$3 = {};
streamIdRtcPlayerInfo1$3 = {}; // window.zegoHasPushFlow = 0;
};
var heartBeatRealKeys$3 = ['video_fps', 'video_bitrate', 'audio_fps', 'audio_bitrate'];
var _heartBeatDataReport$3 = function _heartBeatDataReport() {
console.log('上报吧2'); // let cpuRate = 0;
// let memRate = 0;
// let rateCount = 0;
// let appCpuRate = 0;
// let appMemUsed = 0;
// let rateTimer = setInterval(async () => {
// rateCount++;
// let {cpu_rate, mem_rate, gpus, app_cpu_rate, app_mem_used} = (await toolApi.getCurCpuMemInfo()).msg;
// cpu_rate = cpu_rate < 0 ? 0 : cpu_rate;
// cpuRate += parseFloat(cpu_rate);
// memRate += parseFloat(mem_rate);
// if (window.zbyAVSDK_init_params.zego.role === 'student') {
// appCpuRate += parseFloat(app_cpu_rate);
// appMemUsed += parseFloat(app_mem_used);
// }
// if (rateCount >= 3) {
// heartBeatRealKeys.forEach(realKey => {
// if (heartBeatDataReportObj.hasOwnProperty(realKey) && heartBeatDataReportObj.count > 0) {
// heartBeatDataReportObj[realKey] = util.toFixed(heartBeatDataReportObj[realKey]/heartBeatDataReportObj.count);
// }
// });
var pullInfo = [];
console.log('拉流的类型1', streamIdRtcPlayerInfo$3);
Object.keys(streamIdRtcPlayerInfo$3).forEach(function (streamid) {
console.log('拉流的类型1.5');
heartBeatRealKeys$3.forEach(function (realKey) {
if (!streamIdRtcPlayerInfo$3[streamid].hasOwnProperty(realKey)) {
streamIdRtcPlayerInfo$3[streamid][realKey] = [];
} // if (streamIdRtcPlayerInfo[streamid].count > 0) {
// streamIdRtcPlayerInfo[streamid][realKey] = util.toFixed(streamIdRtcPlayerInfo[streamid][realKey]/streamIdRtcPlayerInfo[streamid].count);
// }
});
console.log('拉流的类型2', streamIdRtcPlayerInfo1$3[streamid]); //获取拉流类型,后期可写为函数提出去
if (streamIdRtcPlayerInfo1$3[streamid].audio_type && streamIdRtcPlayerInfo1$3[streamid].video_type) {
streamIdRtcPlayerInfo1$3[streamid].stream_type = 'both';
} else if (!streamIdRtcPlayerInfo1$3[streamid].audio_type && streamIdRtcPlayerInfo1$3[streamid].video_type) {
streamIdRtcPlayerInfo1$3[streamid].stream_type = 'video';
} else if (streamIdRtcPlayerInfo1$3[streamid].audio_type && !streamIdRtcPlayerInfo1$3[streamid].video_type) {
streamIdRtcPlayerInfo1$3[streamid].stream_type = 'audio';
} else {
streamIdRtcPlayerInfo1$3[streamid].stream_type = 'none';
} // console.log('hsghsghsg_type_type', streamIdRtcPlayerInfo1[streamid].stream_type);
pullInfo.push(_objectSpread({
streamid: streamid
}, streamIdRtcPlayerInfo$3[streamid], {
pull_type: streamIdRtcPlayerInfo1$3[streamid].stream_type,
volume: streamIdRtcPlayerInfo$3[streamid].volume.slice(0, streamIdRtcPlayerInfo$3[streamid].volume.length - 1)
}));
resetStreamIdRtcPlayerInfo$3(streamid);
});
if (isFirstHeartBeatReport$3) {
try {
//静音推流时过滤掉音频帧率和码率,上报为0;
// if (!isNoticeMicVolumeZego) {
// heartBeatDataReportObj['audio_fps'] = [];
// heartBeatDataReportObj['audio_bitrate'] = [];
// }
//获取推流类型,后期可写为函数提出去
if (zbysdk.deviceStatus.camera && zbysdk.deviceStatus.microphone) {
zbysdk.deviceStatus.stream_type = 'both';
} else if (!zbysdk.deviceStatus.camera && zbysdk.deviceStatus.microphone) {
zbysdk.deviceStatus.stream_type = 'audio';
} else if (zbysdk.deviceStatus.camera && !zbysdk.deviceStatus.microphone) {
zbysdk.deviceStatus.stream_type = 'video';
} else {
zbysdk.deviceStatus.stream_type = 'none';
}
; // console.log('push_type222',zbysdk.deviceStatus,zbysdk.deviceStatus.stream_type);
defaultApi$1.writeLog("push_type_trtc,camera: ".concat(zbysdk.deviceStatus.camera, ",microphone: ").concat(zbysdk.deviceStatus.microphone, ",type: ").concat(zbysdk.deviceStatus.stream_type, ",a_fps: ").concat(dataTrtcCapture.fps, ", a_bit: ").concat(dataTrtcCapture.audioBitrate, ", v_fps: ").concat(dataTrtcCapture.fps, ", v_bit: ").concat(dataTrtcCapture.videoBitrate)); // if (window.zbyAVSDK_init_params.zego.role === 'teacher') {
dataReport$2.heartbeat(_objectSpread({}, _objectSpread({}, heartBeatDataReportObj$3, {
push_type: zbysdk.deviceStatus.stream_type,
volume: heartBeatDataReportObj$3.volume.slice(0, heartBeatDataReportObj$3.volume.length - 1)
}), {
// pull_info: JSON.stringify(pullInfo),
pull_info: pullInfo // cpu_rate: util.toFixed(cpuRate/rateCount),
// mem_rate: util.toFixed(memRate/rateCount),
})); // } else {
// dataReport.heartbeat({
// ...heartBeatDataReportObj,
// pull_info: JSON.stringify(pullInfo),
// cpu_rate: util.toFixed(cpuRate/rateCount),
// mem_rate: util.toFixed(memRate/rateCount),
// app_cpu: util.toFixed(appCpuRate/rateCount),
// app_mem: util.toFixed(appMemUsed/rateCount),
// video_mem: gpus
// });
// }
} catch (e) {
console.log(e);
}
}
resetHeartBeatDataReportObj$3(); // cpuRate = 0;
// memRate = 0;
// appCpuRate = 0;
// appMemUsed = 0;
// clearInterval(rateTimer);
// }
// }, 10 * 1000);
};
var heartBeatDataReport$3 = function heartBeatDataReport(type) {
try {
if (type === 'start' && !heartBeatDataReportTimer$3) {
_heartBeatDataReport$3();
heartBeatDataReportTimer$3 = setInterval(function () {
_heartBeatDataReport$3();
}, 30 * 1000);
}
if (type === 'stop') {
clearInterval(heartBeatDataReportTimer$3);
heartBeatDataReportTimer$3 = null;
}
} catch (error) {
console.log(error);
}
};
var heartBeatDataReportCalc$3 = function heartBeatDataReportCalc(name, _data) {
console.log('hsgmzk111', name, _data);
var _d = JSON.parse(_data.json);
console.log('hsgmzk222', name, _d); // 拉流
var pullKeys = ['fps', 'videoBitrate', 'afps', 'audioBitrate'];
if (name === 'onRemoteStatistics') {
console.log('hsgmzk222', streamIdRtcPlayerInfo$3, _d.streamId);
if (streamIdRtcPlayerInfo$3 && streamIdRtcPlayerInfo$3.hasOwnProperty(_d.streamId)) {
console.log('hsgmzk22211');
var streamid = _d.streamId;
var isReport = true; // streamIdRtcPlayerInfo[streamid].count++;
heartBeatRealKeys$3.forEach(function (realKey, index) {
if (_d.hasOwnProperty(pullKeys[index])) {
if (streamIdRtcPlayerInfo$3[streamid][realKey] === undefined) {
streamIdRtcPlayerInfo$3[streamid][realKey] = [];
isReport = false;
} // streamIdRtcPlayerInfo[streamid][realKey].push(parseFloat(parseInt(item[pullKeys[index]])));
}
});
console.log('hsgmzk333', _d);
if (isReport) {
var audio_fps_trtc_pull = 0;
var audio_bitrate_trtc_pull = 0;
var video_fps_trtc_pull = 0;
var video_bitrate_trtc_pull = 0;
console.log('hsgmzk444', _d);
if (streamIdRtcPlayerInfo1$3[streamid].audio_type && streamIdRtcPlayerInfo1$3[streamid].video_type) {
console.log('hsgmzk555', _d);
audio_fps_trtc_pull = parseFloat(parseInt(_d.afps));
audio_bitrate_trtc_pull = parseFloat(parseInt(_d.audioBitrate));
video_fps_trtc_pull = parseFloat(parseInt(_d.fps));
video_bitrate_trtc_pull = parseFloat(parseInt(_d.videoBitrate));
} else if (!streamIdRtcPlayerInfo1$3[streamid].audio_type && streamIdRtcPlayerInfo1$3[streamid].video_type) {
video_fps_trtc_pull = parseFloat(parseInt(_d.fps));
video_bitrate_trtc_pull = parseFloat(parseInt(_d.videoBitrate));
} else if (streamIdRtcPlayerInfo1$3[streamid].audio_type && !streamIdRtcPlayerInfo1$3[streamid].video_type) {
audio_fps_trtc_pull = parseFloat(parseInt(_d.afps));
audio_bitrate_trtc_pull = parseFloat(parseInt(_d.audioBitrate));
}
streamIdRtcPlayerInfo$3[streamid].audio_fps.push(audio_fps_trtc_pull);
streamIdRtcPlayerInfo$3[streamid].audio_bitrate.push(audio_bitrate_trtc_pull);
streamIdRtcPlayerInfo$3[streamid].video_fps.push(video_fps_trtc_pull);
streamIdRtcPlayerInfo$3[streamid].video_bitrate.push(video_bitrate_trtc_pull);
streamIdRtcPlayerInfo$3[streamid].pull_loss.push(_d.packetLoss);
streamIdRtcPlayerInfo$3[streamid].pull_delay.push(_d.rtt);
streamIdRtcPlayerInfo$3[streamid].ctime.push(Math.round((new Date().getTime() + dataReport$2.timestamp) / 1000));
streamIdRtcPlayerInfo$3[streamid].video_ifg += _d.videoBlockRate;
streamIdRtcPlayerInfo$3[streamid].audio_ifg += _d.audioBlockRate; // console.log('hsg_tpull_keys',JSON.parse(JSON.stringify(streamIdRtcPlayerInfo[streamid])),_d.avTimestampDiff);
}
}
} // 推流
var pushKeys = ['fps', 'videoBitrate', 'afps', 'audioBitrate'];
if (name === 'onLocalStatistics') {
// console.log('hsgmzk',_d);
// heartBeatDataReportObj.count++;
// heartBeatRealKeys.forEach((realKey, index) => {
// if (heartBeatDataReportObj.hasOwnProperty(realKey) && _d.hasOwnProperty(pushKeys[index])) {
// heartBeatDataReportObj[realKey].push(parseFloat(parseInt(_d[pushKeys[index]])));
// }
// });
var audio_fps_trtc_push = 0;
var audio_bitrate_trtc_push = 0;
var video_fps_trtc_push = 0;
var video_bitrate_trtc_push = 0;
dataTrtcCapture = _d;
if (zbysdk.deviceStatus.camera && zbysdk.deviceStatus.microphone) {
audio_fps_trtc_push = parseFloat(parseInt(_d.afps));
audio_bitrate_trtc_push = parseFloat(parseInt(_d.audioBitrate));
video_fps_trtc_push = parseFloat(parseInt(_d.fps));
video_bitrate_trtc_push = parseFloat(parseInt(_d.videoBitrate));
} else if (!zbysdk.deviceStatus.camera && zbysdk.deviceStatus.microphone) {
audio_fps_trtc_push = parseFloat(parseInt(_d.afps));
audio_bitrate_trtc_push = parseFloat(parseInt(_d.audioBitrate));
} else if (zbysdk.deviceStatus.camera && !zbysdk.deviceStatus.microphone) {
video_fps_trtc_push = parseFloat(parseInt(_d.fps));
video_bitrate_trtc_push = parseFloat(parseInt(_d.videoBitrate));
} // console.log('hsg6666666',audio_fps_trtc_push,audio_bitrate_trtc_push,video_fps_trtc_push,video_bitrate_trtc_push);
heartBeatDataReportObj$3.audio_fps.push(audio_fps_trtc_push);
heartBeatDataReportObj$3.audio_bitrate.push(audio_bitrate_trtc_push);
heartBeatDataReportObj$3.video_fps.push(video_fps_trtc_push);
heartBeatDataReportObj$3.video_bitrate.push(video_bitrate_trtc_push);
heartBeatDataReportObj$3.push_loss.push(_d.packetLoss);
heartBeatDataReportObj$3.push_delay.push(_d.rtt);
heartBeatDataReportObj$3.ctime.push(Math.round((new Date().getTime() + dataReport$2.timestamp) / 1000)); // console.log('hsg_td5',JSON.parse(JSON.stringify(heartBeatDataReportObj)));
}
}; //推流字段
var resetHeartBeatDataReportObj$3 = function resetHeartBeatDataReportObj() {
// console.log('hsg_td55556重置');
heartBeatDataReportObj$3 = {
ctime: [],
push_type: 'none',
video_fps: [],
video_bitrate: [],
audio_fps: [],
audio_bitrate: [],
push_loss: [],
push_delay: [],
volume: ''
};
}; //记录拉流类型,用作数据上报
var resetStreamIdRtcPlayerInfo1$3 = function resetStreamIdRtcPlayerInfo1(streamId) {
streamIdRtcPlayerInfo1$3[streamId] = {
audio_type: false,
video_type: false,
stream_type: 'none'
}; // console.log('hsgshgs_heartbeat',streamIdRtcPlayerInfo1);
};
resetHeartBeatDataReportObj$3(); //拉
var resetStreamIdRtcPlayerInfo$3 = function resetStreamIdRtcPlayerInfo(streamId) {
streamIdRtcPlayerInfo$3[streamId] = {
pull_uid: util.getUidByStreamId(streamId),
streamid: streamId,
ctime: [],
pull_type: streamIdRtcPlayerInfo1$3[streamId].stream_type,
volume: '',
video_fps: [],
video_bitrate: [],
audio_fps: [],
audio_bitrate: [],
pull_loss: [],
pull_delay: [],
//音画不同步字段
avtimestampdiff: [],
// 累加
audio_ifg: 0,
video_ifg: 0
};
};
var trtcsdk = {
init: init$3,
setCameraCaptureResolution: setCameraCaptureResolution$1,
setCameraEncodeResolution: setCameraEncodeResolution$1,
setCameraEncodeFps: setCameraEncodeFps$1,
setCameraEncodeBiarate: setCameraEncodeBiarate,
getCameraResolution: getCameraResolution$1,
getMicrophoneDeviceListTrtc: getMicrophoneDeviceListTrtc,
setMicrophoneDevice: setMicrophoneDevice$3,
openOrCloseMicrophone: openOrCloseMicrophone$1,
getCurrentMicrophoneVolume: getCurrentMicrophoneVolume$1,
setCurrentMicrophoneVolume: setCurrentMicrophoneVolume$1,
setCurrentCameraDevice: setCurrentCameraDevice,
getCameraDeviceListTrtc: getCameraDeviceListTrtc,
setVideoDevice: setVideoDevice$1,
openOrCloseCamera: openOrCloseCamera$2,
getSpeakerDeviceListTrtc: getSpeakerDeviceListTrtc,
setSpeakerDevice: setSpeakerDevice$3,
getCurrentSpeakerVolume: getCurrentSpeakerVolume$1,
setCurrentSpeakerVolume: setCurrentSpeakerVolume$1,
setAudioSpeakerCapture: setAudioSpeakerCapture$2,
startLocalOrRemotePreview: startLocalOrRemotePreview$3,
startPush: startPush$2,
stopPush: stopPush$2,
startPlay: startPlay$1,
stopPlay: stopPlay$1,
initPullFlow: initPullFlow$3,
pullAudioFlow: pullAudioFlow$3,
muteRemoteVideo: muteRemoteVideo$1,
muteRemoteAudio: muteRemoteAudio$1,
stopPlayAll: stopPlayAll$1,
sendSEIMsg: sendSEIMsg$1,
startMultiScreen: startMultiScreen$2,
enableHighlight: enableHighlight,
getAllChannelIndex: getAllChannelIndex$2,
leaveRoom: leaveRoom$3,
teacherStartLinkMic: teacherStartLinkMic$3,
teacherStopLinkMic: teacherStopLinkMic$3
};
/**
* @File: 直播云音视频 SDK
* @Author: xuyuanrui
* @Email: raywhbxyr@163.com
* @Date: 2018-08-09 00:03:46
**/
var RTC = 'rtc';
var ZEGO = 'zego';
var TALRTC = 'talrtc';
var TRTC = 'trtc';
var NERTC = 'nertc';
var VOLCRTC = 'volcrtc'; // rtc 底层流媒体数据上报地址配置
var rtcReportUrl = {
test: 'test-r.weclassroom.com',
online: 'r.weclassroom.com'
};
var sdkVale = {
zego: 8,
//8代表zego采集麦克风+扬声器
talrtc: 101,
//101代表talrtc采集声音
nertc: 101,
//101代表talrtc采集声音
volcrtc: 101,
//101代表talrtc采集声音
trtc: 102 //102代表trtc采集声音
};
/**
* @function 预览和发布设置视频水印
* @return Promise<boolean>
*/
var setWaterMark$2 = async function setWaterMark(filePath, x, y, w, h, streamId, idx) {
defaultApi$1.writeLog("zby_av_sdk setWaterMark path:".concat(filePath, ", rect:").concat(JSON.stringify({
x: x,
y: y,
w: w,
h: h,
streamId: streamId,
idx: idx
})));
switch (window.zbyAVSDK_init_sdk_type) {
case ZEGO:
return zegosdk.setWaterMark(filePath, x, y, w, h, streamId, idx);
case TALRTC:
case VOLCRTC:
return talrtcsdk.setWaterMark(filePath, x, y, w, h, streamId, idx);
case RTC:
case NERTC:
case TRTC:
defaultApi$1.writeLog("zby_av_sdk setWaterMark not supported, sdk_type:".concat(window.zbyAVSDK_init_sdk_type));
return false;
default:
// 未知或未初始化的 sdk_type 直接返回 false,避免误调用
return false;
}
};
/**
* @function 设备检测初始化(新)
*/
var deviceCheckerInit = async function deviceCheckerInit(extension, env) {
setDefaultZbySDKDeviceCheckerInit();
await zegosdk.loadZego(extension.version.zego); //此时课堂外端上无法获取roomid,假数据模拟,待确定userId-万一重复(不推流)
zegosdk.addListener('deviceCheckerInit');
await zegosdk.startEngine(2646760764, '/XpDtuxpv4TrBoNTozIs6waxK6LF/mGZK0jVYo003Ws='); //也是需要参数的,还要区分测试环境和线上环境
await zegosdk.setVideoCaptureResolution(320, 240);
await zegosdk.setVideoBitrate(100000);
await zegosdk.setVideoFPS(15);
await zegosdk.startSoundLevelMonitor();
await zegosdk.setSoundLevelMonitorCycle(500);
var isDeviceCheckInitFinished = zegosdk.getDeviceCheckInitStatus();
if (isDeviceCheckInitFinished) {
zegosdk.setDeviceCheckInitStatus();
window.zbyAVSDK_init_sdk_type = 'zego';
defaultApi$1.writeLog('isDeviceCheckInitFinished1', isDeviceCheckInitFinished);
} else {
await new Promise(function (resolve, reject) {
var timer = null;
timer = setInterval(function () {
isDeviceCheckInitFinished = zegosdk.getDeviceCheckInitStatus();
defaultApi$1.writeLog('isDeviceCheckInitFinished2', isDeviceCheckInitFinished);
if (isDeviceCheckInitFinished) {
zegosdk.setDeviceCheckInitStatus();
clearInterval(timer);
resolve();
}
defaultApi$1.writeLog('isDeviceCheckInitFinished3', isDeviceCheckInitFinished);
}, 30);
});
window.zbyAVSDK_init_sdk_type = 'zego';
}
defaultApi$1.writeLog('change zbyAVSDK_init_sdk_type to rtc , from avsdk device check init');
};
/**
* @function 设置设备检测对象默认值
*/
var setDefaultZbySDKDeviceCheckerInit = async function setDefaultZbySDKDeviceCheckerInit() {
if (window.zbyAVSDK_device_checker_init) {
if (!window.zbyAVSDK_device_checker_init.microphone) {
window.zbyAVSDK_device_checker_init.microphone = {
hasTest: false,
list: [],
use: '',
name: ''
};
}
;
if (!window.zbyAVSDK_device_checker_init.camera) {
window.zbyAVSDK_device_checker_init.camera = {
hasTest: false,
list: [],
use: '',
name: ''
};
}
;
if (!window.zbyAVSDK_device_checker_init.speaker) {
window.zbyAVSDK_device_checker_init.speaker = {
hasTest: false,
list: [],
use: '',
name: ''
};
}
;
} else {
window.zbyAVSDK_device_checker_init = {
microphone: {
hasTest: false,
list: [],
use: '',
name: ''
},
camera: {
hasTest: false,
list: [],
use: '',
name: ''
},
speaker: {
hasTest: false,
list: [],
use: '',
name: ''
}
};
} // window.zbyAVSDK_device_checker_init = window.zbyAVSDK_device_checker_init || {
// window.zbyAVSDK_device_checker_init = {
// microphone: {
// hasTest: false,
// list: [],
// use: ''
// },
// camera: {
// hasTest: false,
// list: [],
// use: ''
// },
// speaker: {
// hasTest: false,
// list: [],
// use: ''
// }
// };
defaultApi$1.writeLog("setDefaultZbySDKDeviceCheckerInit, ".concat(window.zbyAVSDK_device_checker_init));
};
/**
* @function 结束设备检测
*/
var stopCheckDevice$2 = async function stopCheckDevice() {
defaultApi$1.writeLog('zby_av_sdk stop checkDevice');
return zegosdk.stopCheckDevice();
};
/**
* @function 初始化
* @param sdk_type:String 'rtc' | 'zego' | 'agora',必选
* @param args:Object 必选
* {
* rtc: {},
* zego: {},
* agora: {}
* }
* @return Promise | void
*/
var init$4 = function init(sdk_type, args) {
// 将初始化参数存储到全局
window.zbyAVSDK_init_sdk_type = sdk_type;
defaultApi$1.writeLog("change zbyAVSDK_init_sdk_type to ".concat(sdk_type, " , from avsdk init action"));
window.zbyAVSDK_init_params = args;
setDefaultZbySDKDeviceCheckerInit(); // if (sdk_type !== 'talrtc') { // TODO: 临时处理,后续需要优化
// const config = window.zbyAVSDK_init_params[window.zbyAVSDK_init_sdk_type];
// defaultApi.writeLog(`start checkUpdate, from avsdk init action, config: ${JSON.stringify(config)}`);
// talrtcsdk.checkUpdate(config.institutionId, config.userId, config.role);
// }
return changeSDK(undefined);
};
/**
* @function 恢复sdk
*/
var recoverSdk$1 = function recoverSdk(args) {
window.zbyAVSDK_init_params = args;
var config = window.zbyAVSDK_init_params[window.zbyAVSDK_init_sdk_type];
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.recoverSdk(config);
case ZEGO: // return zegosdk.recoverSdk(dealSDKMsg);
default:
break;
}
};
/**
* @function 切换线路
* @param args:Object 可选
* {
* sdk_type, // String,'rtc' | 'zego' | 'agora',可选
* // 无传入的话,sdk 线路默认选择 window.zbyAVSDK_init_sdk_type
* config // Object,配置的参数对象,不同的线路参数对象不同,可选
* // 无传入的话,sdk 线路默认选择 window.zbyAVSDK_init_params 中相应线路的配置
* }
* @return Promise | void
*/
var changeSDK = async function changeSDK(args) {
if (args) {
rtcsdk.stopCheckDevice();
await leaveRoomWithChangeSDK$1().catch(function (err) {
console.error('leave room fail:', err);
}); // await unloadExtension();
}
if (args && args.sdk_type) {
window.zbyAVSDK_init_sdk_type = args.sdk_type;
defaultApi$1.writeLog("change zbyAVSDK_init_sdk_type to ".concat(args.sdk_type, " , from avsdk changeSDK action"));
}
if (args && args.config) {
window.zbyAVSDK_init_params[window.zbyAVSDK_init_sdk_type] = args.config;
}
var sdk_type = window.zbyAVSDK_init_sdk_type;
var config = window.zbyAVSDK_init_params[window.zbyAVSDK_init_sdk_type]; // 默认使用pomelo
globalConfig.usePomelo = true; // 切换引擎会走到这里
if (args && config) {
delete config.devices;
}
switch (sdk_type) {
case RTC:
return rtcsdk.init(config);
case ZEGO:
return zegosdk.init(config);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.init(config);
case TRTC:
return trtcsdk.init(config);
default:
break;
}
};
/**
* @function 卸载扩展
* @return Promise | void
*/
var unloadExtension = function unloadExtension() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.unloadRtc();
case ZEGO:
return zegosdk.unloadZego();
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.unloadTalrtc();
case TRTC:
return trtcsdk.unloadTrtc();
default:
break;
}
};
/**
* @function 获取摄像头列表
* @return Promise | void
*/
var getCameraDeviceList$2 = async function getCameraDeviceList() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return await rtcsdk.getCameraDevice();
case ZEGO:
return await zegosdk.getVideoDeviceList();
case TALRTC:
case NERTC:
case VOLCRTC:
return await talrtcsdk.getCameraDeviceList();
case TRTC:
return await trtcsdk.getCameraDeviceListTrtc();
default:
return await zegosdk.getVideoDeviceList();
break;
}
};
/**
* @function 指定摄像头
* @param deviceId:String 摄像头 id,必须
* @return Promise | void
*/
var setCameraDevice$2 = async function setCameraDevice(deviceId, operationType) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return await rtcsdk.setCameraDevice({
deviceId: deviceId,
operationType: operationType
});
case ZEGO:
return await zegosdk.setVideoDevice({
deviceId: deviceId,
operationType: operationType
});
case TALRTC:
case NERTC:
case VOLCRTC:
return await talrtcsdk.setCameraDevice({
deviceId: deviceId
});
case TRTC:
return await trtcsdk.setVideoDevice({
deviceId: deviceId
});
default:
break;
}
};
/**
* @function 开摄像/关摄像
* @param operation:Boolean 操作类型,false -> 关闭,true -> 打开,必选
* @return Promise | void
*/
var openOrCloseCamera$3 = function openOrCloseCamera(operation) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.openOrCloseCamera(operation);
case ZEGO:
return zegosdk.enableCamera(operation);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.openOrCloseCamera(operation);
case TRTC:
return trtcsdk.openOrCloseCamera(operation);
default:
break;
}
}; //是否推画面 false/不推 true/推
var setPushStreamVideo = function setPushStreamVideo(operation) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.muteStreamVideo(!operation);
case ZEGO:
return zegosdk.setMuteStreamVideo(!operation);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.muteLocalVideo(!operation);
case TRTC:
default:
break;
}
};
/**
* @function 是否推声音 ---暂时没有用到,未抛出去未测
* @param operation:Boolean 操作类型,false -> 关闭,true -> 打开,必选
* @return Promise | void
*/
var setPushAudioMute = function setPushAudioMute(operation) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.muteStreamAudio(!operation);
case ZEGO:
return zegosdk.setMuteStreamAudio(!operation);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.muteLocalAudio(!operation);
case TRTC:
default:
break;
}
};
/**
* @function 开启预览
* @param operation:Boolean 操作类型,false -> 关闭,true -> 打开,必选
* @return Promise | void
*/
var startPreview$3 = function startPreview(operation) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.startPreview(operation);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.startPreview(operation);
case ZEGO:
case TRTC:
default:
break;
}
};
/**
* @function 结束预览
* @param operation:Boolean 操作类型,false -> 关闭,true -> 打开,必选
* @return Promise | void
*/
var stopPreview$3 = function stopPreview(operation) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.stopPreview(operation);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.stopPreview(operation);
case ZEGO:
case TRTC:
default:
break;
}
};
/**
* @function 开始连麦
* @param mode:number 采集器默认, 默认0=站立 1=坐立
* @return Promise | void
*/
var teacherStartLinkMic$4 = function teacherStartLinkMic(mode) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.teacherStartLinkMic(mode);
case ZEGO:
return zegosdk.teacherStartLinkMic(mode);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.teacherStartLinkMic(mode);
case TRTC:
return trtcsdk.teacherStartLinkMic(mode);
default:
break;
}
};
/**
* @function 结束连麦
* @param mode:number 采集器默认, 默认0=站立 1=坐立
* @return Promise | void
*/
var teacherStopLinkMic$4 = function teacherStopLinkMic(mode) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.teacherStopLinkMic(mode);
case ZEGO:
return zegosdk.teacherStopLinkMic(mode);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.teacherStopLinkMic(mode);
case TRTC:
return trtcsdk.teacherStopLinkMic(mode);
default:
break;
}
};
/**
* @function 获取视频 src 或者将视频绑定到某一个 <video> 标签上
* @param args:Object
* {
* isLocal, // Boolean,是否是本地的视频预览
* streamId, // String,要拉取的视频流的 id,可选,只有拉取远程的视频流的时候才是必选的,本地不用
* domId // String,<video> 标签的 id,可选,如果传了就把视频绑定到对应的 <video> 标签上
* }
* @return Promise | void,可从 Promise 中获取 src,Promise.then((src) => {})
*/
var getOrLocateVideo = function getOrLocateVideo(args) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.startLocalOrRemotePreview(args.isLocal, args.streamId, args.domId);
case ZEGO:
return zegosdk.startLocalOrRemotePreview(args.isLocal, args.streamId, args.domId, args.isTeacherNewWindowPreview);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.startLocalOrRemotePreview(args.isLocal, args.streamId, args.domId, args.isTeacherNewWindowPreview);
case TRTC:
return trtcsdk.startLocalOrRemotePreview(args.isLocal, args.streamId, args.domId, args.isTeacherNewWindowPreview);
default:
return zegosdk.startLocalOrRemotePreview(args.isLocal, args.streamId, args.domId);
break;
}
};
var setVideoCallback$2 = function setVideoCallback(type) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setVideoCallback(type);
case ZEGO:
return zegosdk.setVideoCallback(type);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setVideoCallback(type);
case TRTC:
return trtcsdk.setVideoCallback(type);
default:
break;
}
};
/**
* @function 开始推流
* @return Promise | void
*/
var startPushFlow = async function startPushFlow(streamid, idx) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return await rtcsdk.startPush();
case ZEGO:
return await zegosdk.startPublish2(streamid, idx);
case TALRTC:
case NERTC:
case VOLCRTC:
return await talrtcsdk.startPush(streamid, idx);
// 可能为空,函数内部有判断逻辑,为空时,根据规则生成streamId
case TRTC:
return await trtcsdk.startPush(streamid, idx);
//流id需要做兼容处理
default:
break;
}
};
/**
* @function 暂停推流
* @return Promise | void
*/
var stopPushFlow = function stopPushFlow(idx, streamId) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.stopPush();
case ZEGO:
return zegosdk.stopPublish(idx);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.stopPush(streamId);
case TRTC:
return trtcsdk.stopPush(idx);
default:
break;
}
};
/**
* @function 初始化拉流
* @param args:Object
* {
* streamId, // String,被拉取的流的 id,必选
* domId // String,<video> 标签的 id,可选,如果传了就把视频绑定到对应的 <video> 标签上
* }
* @return Promise | void,可从 Promise 中获取 src,Promise.then((src) => {})
*/
var initPullFlow$4 = function initPullFlow(args) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
if (window.zby_isM1Type) {
return;
}
return {
sdk_type: RTC,
videoSrc: rtcsdk.initPullFlow(args.streamId, args.domId, args.mute, args.renderId, args.notAutoPlay, args.audioOnly, args.needScale, args.scaleParams, args.streamType)
};
case ZEGO:
return {
sdk_type: ZEGO,
videoSrc: zegosdk.initPullFlow(args.streamId, args.domId, args.mute, args.renderId, args.notAutoPlay, args.audioOnly)
};
case TALRTC:
case NERTC:
case VOLCRTC:
return {
sdk_type: window.zbyAVSDK_init_sdk_type,
videoSrc: talrtcsdk.initPullFlow(args.streamId, args.domId, args.mute, args.renderId, args.notAutoPlay, args.audioOnly)
};
case TRTC:
return {
sdk_type: TRTC,
videoSrc: trtcsdk.initPullFlow(args.streamId, args.domId, args.mute, args.renderId, args.notAutoPlay, args.audioOnly)
};
default:
break;
}
};
/**
* @function 恢复拉指定的流
* @param streamId:String 被拉取的流的 id,必选
* @return Promise | void
*/
var startPullFlow = function startPullFlow(streamId) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.play(streamId);
case ZEGO:
return zegosdk.playStream(streamId);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.startPlay(streamId);
case TRTC:
return trtcsdk.startPlay(streamId);
default:
break;
}
};
/**
* @function 暂停拉指定的流
* @param streamId:String 被拉取的流的 id,必选
* @param recovery:Boolean 是否回收播放器, 可选
* @return Promise | void
*/
var stopPullFlow$1 = function stopPullFlow(streamId, recovery) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
if (window.zby_isM1Type) {
return;
}
return rtcsdk.stop(streamId, recovery);
case ZEGO:
return zegosdk.stopPlayStream(streamId, recovery);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.stopPlay(streamId, recovery);
case TRTC:
return trtcsdk.stopPlay(streamId);
default:
break;
}
};
/**
* @function 暂停拉所有的流
* @return Promise | void
*/
var stopAllPullFlow$1 = function stopAllPullFlow(streamId, recovery) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.stopAllPullFlow(streamId, recovery);
case ZEGO:
return zegosdk.stopAllPlayStream(streamId, recovery);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.stopPlayAll();
case TRTC:
return trtcsdk.stopPlayAll();
default:
break;
}
};
/**
* @function 销毁拉指定的流
* @param streamId:String 被拉取的流的 id,必选
* @return Promise | void
*/
var playDestroy$1 = function playDestroy(streamId) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.playDestroy(streamId);
case ZEGO:
return zegosdk.stopPlayStream(streamId, true);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.stopPlay(streamId);
case TRTC:
return trtcsdk.stopPlay(streamId);
default:
break;
}
};
/**
* @function 切换播放流
* @param streamId:String 需要停止流的 id,必选
* @param toStreamId:String 被拉取的流的 id,必选
* @param toDomId:String <video> 标签的 id,可选
* @return Promise | void
*/
var changePullFlow$3 = function changePullFlow(args) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.changePullFlow(args.streamId, args.toStreamId, args.toDomId);
case ZEGO:
return zegosdk.changePullFlow(args.streamId, args.toStreamId, args.toDomId);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.changePullFlow(args.streamId, args.toStreamId, args.toDomId);
case TRTC:
default:
break;
}
};
/**
* @function 获取本地扬声器列表
* @return Promise | void
*/
var getSpeakerDeviceList$3 = async function getSpeakerDeviceList() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return await rtcsdk.getSpeakerDevice();
case ZEGO:
return await zegosdk.getSpeakerDeviceList();
case TALRTC:
case NERTC:
case VOLCRTC:
return await talrtcsdk.getSpeakerDeviceList();
case TRTC:
return await trtcsdk.getSpeakerDeviceListTrtc();
default:
return await zegosdk.getSpeakerDeviceList();
break;
}
};
/**
* @function 指定扬声器
* @param deviceId:String 扬声器设备 id,必选
* @return Promise | void
*/
var setSpeakerDevice$4 = async function setSpeakerDevice(deviceId, operationType) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return await rtcsdk.setSpeakerDevice({
speakId: deviceId,
operationType: operationType
});
case ZEGO:
return await zegosdk.setSpeakerDevice({
deviceId: deviceId,
operationType: operationType
});
case TALRTC:
case NERTC:
case VOLCRTC:
return await talrtcsdk.setSpeakerDevice({
deviceId: deviceId
});
case TRTC:
return await trtcsdk.setSpeakerDevice({
deviceId: deviceId
});
default:
break;
}
};
var getSpeakerDevice$1 = async function getSpeakerDevice() {
switch (window.zbyAVSDK_init_sdk_type) {
case ZEGO:
return zegosdk.getCurrentSpeakerDevice();
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.getCurrentSpeakerDevice();
default:
return null;
}
};
/**
* @function 获取扬声器音量
* @return Promise | void
*/
var getSpeakerVolume$1 = async function getSpeakerVolume() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return JSON.parse((await rtcsdk.getSpeakerVolume()).msg).volume;
case ZEGO:
return JSON.parse((await zegosdk.getSpeakerDeviceVolume()).msg).ret;
case TALRTC:
case NERTC:
case VOLCRTC:
return await talrtcsdk.getCurrentSpeakerVolume();
case TRTC:
return JSON.parse((await trtcsdk.getCurrentSpeakerVolume()).msg).speakerVolume;
default:
break;
}
};
/**
* @function 设置扬声器音量
* @param volume:Number 扬声器音量,必选,范围 [0, 100]
* @return Promise | void
*/
var setSpeakerVolume$1 = function setSpeakerVolume(volume) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setSpeakerVolume(volume);
case ZEGO:
return zegosdk.setSpeakerDeviceVolume(volume);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setCurrentSpeakerVolume(volume);
case TRTC:
return trtcsdk.setCurrentSpeakerVolume(volume);
default:
break;
}
};
/**
* @function 控制扬声器是否静音
* @param mute:Boolean 是否静音,必选
* @return Promise | void
*/
var setSpeakerMute$1 = function setSpeakerMute(mute) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setSpeakerMute(mute);
case ZEGO:
return zegosdk.setSpeakerDeviceMute(mute);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setSpeakerDeviceMute(mute);
case TRTC:
default:
break;
}
};
/**
* @function 获取 App 应用音量
* @return Promise | void
*/
var getAppVolume = function getAppVolume() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.getCurrentAppSessionVolume();
case ZEGO:
return zegosdk.getSpeakerSimpleVolume();
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.getSpeakerSimpleVolume();
case TRTC:
default:
break;
}
};
/**
* @function 设置 App 应用音量
* @param volume:Number App 音量,必选,范围 [0, 100]
* @return Promise | void
*/
var setAppVolume = function setAppVolume(volume) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setCurrentAppSessionVolume(volume);
case ZEGO:
return zegosdk.setSpeakerSimpleVolume(volume);
// 由于 Agora 的 App 音量取值范围是 [0, 255],所以需要做比例兼容
// volume = Math.floor((volume / 100) * 255);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setSpeakerSimpleVolume(volume);
case TRTC:
default:
break;
}
};
/**
* @function 设置 App 静音
* @param mute:Boolean 是否静音,必选
* @return Promise | void
*/
var setAppMute = function setAppMute(mute) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setApplicationMute(mute);
case ZEGO:
return zegosdk.setSpeakerSimpleMute(mute);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setSpeakerSimpleMute(mute);
case TRTC:
default:
break;
}
};
/**
* @function 获取麦克风列表
* @return Promise | void
*/
var getMicrophoneDeviceList$3 = async function getMicrophoneDeviceList() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return await rtcsdk.getMicrophoneDevice();
case ZEGO:
return await zegosdk.getMicrophoneDeviceList();
case TALRTC:
case NERTC:
case VOLCRTC:
return await talrtcsdk.getMicrophoneDeviceList();
case TRTC:
return await trtcsdk.getMicrophoneDeviceListTrtc();
default:
return await zegosdk.getMicrophoneDeviceList();
break;
}
};
/**
* @function 指定麦克风
* @param deviceId:String 麦克风 id,必须
* @return Promise | void
*/
var setMicrophoneDevice$4 = async function setMicrophoneDevice(deviceId, operationType) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return await rtcsdk.setMicrophoneDevice({
deviceId: deviceId,
operationType: operationType
});
case ZEGO:
return await zegosdk.setMicrophoneDevice({
deviceId: deviceId,
operationType: operationType
});
case TALRTC:
case NERTC:
case VOLCRTC:
return await talrtcsdk.setMicrophoneDevice({
deviceId: deviceId,
operationType: operationType
});
case TRTC:
return await trtcsdk.setMicrophoneDevice({
deviceId: deviceId
});
default:
break;
}
};
/**
* @function 开麦/禁麦
* @param operation:Boolean 操作类型,false -> 关闭,true -> 打开,必选
* @return Promise | void
*/
var openOrCloseMicrophone$2 = async function openOrCloseMicrophone(operation) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return await rtcsdk.setRealTimeAudioMute(!operation);
case ZEGO:
return await zegosdk.enableMic(operation);
case TALRTC:
case NERTC:
case VOLCRTC:
return await talrtcsdk.openOrCloseMicrophone(operation);
case TRTC:
return await trtcsdk.openOrCloseMicrophone(operation);
default:
break;
}
};
/**
* @function 获取麦克风音量
* @return Promise | void
*/
var getMicrophoneVolume$1 = function getMicrophoneVolume() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.getMicrophoneVolume();
case ZEGO:
return zegosdk.getMicDeviceVolume();
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.getCurrentMicrophoneVolume();
case TRTC:
return trtcsdk.getCurrentMicrophoneVolume();
default:
break;
}
};
/**
* @function 设置麦克风音量
* @param volume:Number App 音量,必选,范围 [0, 100]
* @param mute:Boolean 是否静音
* @return Promise | void
*/
var setMicrophoneVolume$1 = function setMicrophoneVolume(volume, mute) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setMicrophoneVolume(volume, mute);
case ZEGO:
return zegosdk.setMicDeviceVolume(volume);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setCurrentMicrophoneVolume(volume);
case TRTC:
return trtcsdk.setCurrentMicrophoneVolume(volume);
default:
break;
}
};
/**
* @function 控制麦克风是否静音
* @param mute:Boolean 是否静音,必选
* @return Promise | void
*/
var setMicrophoneMute = function setMicrophoneMute(mute) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setRealTimeAudioMute(mute);
case ZEGO:
return zegosdk.setMicDeviceMute(mute);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.muteLocalAudio(mute);
case TRTC:
default:
break;
}
};
/**
* @function 切换云控时退出房间、退出频道
* @return Promise | void
*/
var leaveRoomWithChangeSDK$1 = function leaveRoomWithChangeSDK() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.leaveRoom();
case ZEGO:
return zegosdk.leaveRoomWithChangeSDK();
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.leaveRoom();
case TRTC:
return trtcsdk.leaveRoom();
default:
break;
}
};
/**
* @function 退出房间、退出频道
* @return Promise | void
*/
var leaveRoom$4 = function leaveRoom(type) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.leaveRoom();
case ZEGO:
return zegosdk.leaveRoom(type);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.leaveRoom();
case TRTC:
return trtcsdk.leaveRoom();
default:
break;
}
};
/**
* @function 反初始化
* @return Promise | void
*/
var deinit = function deinit() {
window.zbyAVSDK_init_sdk_type = localStorage.getItem('zbyAVSDK_init_sdk_type');
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.destroyEngine();
case ZEGO:
return zegosdk.destroyEngine();
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.destroyEngine();
default:
console.error('unknown zbyAVSDK_init_sdk_type:', zbyAVSDK_init_sdk_type);
break;
}
}; //开启拉流音量监听
var startSoundLevelMonitor$1 = function startSoundLevelMonitor() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.startSoundLevelMonitor();
case TALRTC:
case NERTC:
case VOLCRTC:
// TODO StartMicrophone 里面有调用 enableAudioVolumeIndication 但目前是注释掉的状态
break;
default:
break;
}
};
/**
* @function 转推,录课
* @param type:String 动作类型,必选,'start' | 'stop' | 'pause' | 'resume'
* @return Promise | void
*/
var turnPush = function turnPush(type) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.sendRecordingMsg({
cmd: type
});
case ZEGO:
return zegosdk.singleRecord(type);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.controlCdnStreaming(type);
case TRTC:
default:
break;
}
};
/**
* @function 听不听指定的用户的声音
* @param streamId:String 被拉取的流的 id,必选
* @param mute:Boolean 是否静音,必选,true -> 静音,false -> 不静音
* @return Promise | void
*/
var setAudioMute = function setAudioMute(streamId, mute) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setMute(streamId, mute);
case ZEGO:
return zegosdk.activateAudioPlayStream(streamId, !mute);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.muteRemoteAudio(streamId, mute);
case TRTC:
return trtcsdk.muteRemoteAudio(streamId, mute);
default:
break;
}
};
/**
* @function 是否拉取音频流-是否关闭音频流--通过播放器id控制
* @param operation:Boolean,必选,true关闭 | false不关闭
* @param playerId:Number,必选, 播放器id
* @return Promise | void
*/
var pullAudioFlow$4 = function pullAudioFlow(playerId, operation, streamId) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.pullAudioFlow(playerId, operation, 'client', streamId);
case ZEGO:
return zegosdk.pullAudioFlow(playerId, !operation, streamId);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.pullAudioFlow(playerId, operation, streamId);
case TRTC:
return trtcsdk.pullAudioFlow(playerId, operation, streamId);
default:
break;
}
};
/**
* @function 获取设备状态
* * @param { string } devicename //(设备名称,可为空)
* * @param { number } devicetype //(设备类型,1摄像头,2麦克风),3扬声器(mac端没有)
* @return: Promise
*/
// export const getDeviceState = (devicename, devicetype) => {
// switch (window.zbyAVSDK_init_sdk_type) {
// case RTC:
// return rtcsdk.getDeviceState(devicename, devicetype);
// case ZEGO:
// return zegosdk.getDeviceState(devicename, devicetype);
// default:
// break;
// }
// };
/**
* @function 看不看指定的用户的画面
* @param streamId:String 被拉取的流的 id,必选
* @param mute:Boolean 是否关闭画面,必选,true -> 关闭画面,false -> 不关闭画面
* @return Promise | void
*/
var setVideoMute = function setVideoMute(streamId, mute) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.controlPullAudioOnly(streamId, mute);
case ZEGO:
return zegosdk.activateVideoPlayStream(streamId, !mute);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.muteRemoteVideo(streamId, mute);
case TRTC:
return trtcsdk.muteRemoteVideo(streamId, mute);
default:
break;
}
};
/**
* @function 开启/关闭麦克风音量回调
* @param open:Boolean true -> 开启,false -> 关闭,必选
* @return void
*/
var openMicVolumeCb$2 = function openMicVolumeCb(open) {
rtcsdk.openMicVolumeCb(open);
zegosdk.openMicVolumeCb(open);
};
var startMixtStream = function startMixtStream(args) {
var params = {};
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
var config = args.config;
params = {
sequence: args.sequence,
outputStream: {
pushType: args.pushType,
rtmpUrls: config.szOutputStream,
videoFps: config.nOutputFps,
videoRate: config.nOutputBitrate,
audioRate: config.nOutputAudioBitrate,
videoWidth: config.nOutputWidth,
videoHeight: config.nOutputHeight,
audioFormat: config.nOutputAudioConfig,
audioChannels: config.nChannels,
backgroundColor: config.nOutputBackgroundColor
},
inputStreams: []
};
config.pInputStreamList.forEach(function (item) {
params.inputStreams.push({
confId: item.confId,
streamId: item.szStreamID,
top: item.layout.top,
right: item.layout.right,
bottom: item.layout.bottom,
left: item.layout.left,
mediaControl: item.nContentControl
});
});
console.log(params);
rtcsdk.startRoomMixRecord(params);
break;
case ZEGO:
params = Object.assign(args, {});
delete params.pushType;
delete params.sequence;
params.config.pInputStreamList = params.config.pInputStreamList.map(function (item) {
var tempObj = Object.assign(item, {});
delete tempObj.confId;
return tempObj;
});
zegosdk.mixStream('start', params);
break;
default:
break;
}
};
var stopMixtStream = function stopMixtStream(args) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
rtcsdk.stopRoomMixRecord({
sequence: args.sequence
});
break;
case ZEGO:
var params = Object.assign(args, {});
delete params.sequence;
zegosdk.mixStream('stop', params);
break;
default:
break;
}
};
/**
* @function 单路录制
* @param args:Object 必选
* {
* type:String 开始/结束, 对应取值start/stop,必选
* groupId: String 分组id,可选,默认为 sdk初始化分组id
* streamId: String 流id,必选
* seqNum: String
* }
* @return void
*/
var singleRecord$1 = async function singleRecord(args) {
var type = args.type,
groupId = args.groupId,
streamId = args.streamId,
userId = args.userId,
seqNum = args.seqNum;
var sid = "xrs51_".concat(groupId, "_").concat(userId);
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
var institutionId = window.zby_sdk_init_params.institutionId;
var rtc = window.zbyAVSDK_init_params.rtc;
var rtmpAddr = "".concat(rtc.recordUrl, "/").concat(sid);
if (seqNum) {
rtmpAddr += "?seqNum=".concat(seqNum);
}
var rtcParams = {
cmd: type,
confId: util.getConfId(institutionId, groupId),
liveId: streamId,
rtmpAddr: rtmpAddr
};
return rtcsdk.sendRecordingMsg(rtcParams);
case ZEGO:
var zego = window.zbyAVSDK_init_params.zego;
var strTarget = "".concat(zego.recordUrl, "/").concat(sid);
if (seqNum) {
strTarget += "?seqNum=".concat(seqNum);
}
return zegosdk.singleRecord(type, strTarget, streamId);
break;
default:
break;
}
};
/**
* @function 单路录制
* @param args:Object 必选
* {
* type:String 开始/结束, 对应取值start/stop,必选
* groupId: String 分组id,可选,默认为 sdk初始化分组id
* streamId: String 流id,必选
* }
* @return void
*/
var recordPublishTarget = function recordPublishTarget(args) {
var type = args.type,
groupId = args.groupId,
streamId = args.streamId,
userId = args.userId;
var sid = "xrs51_".concat(groupId, "_").concat(userId);
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
var institutionId = window.zby_sdk_init_params.institutionId;
var rtc = window.zbyAVSDK_init_params.rtc;
var rtcParams = {
cmd: type,
confId: util.getConfId(institutionId, groupId),
liveId: streamId,
rtmpAddr: "rtmp://globalpush.aliyun.zhiboyun.eaydu.com/live_haibian/".concat(streamId)
};
return rtcsdk.sendRecordingMsg(rtcParams);
case ZEGO:
var zego = window.zbyAVSDK_init_params.zego;
var strTarget = "rtmp://globalpush.aliyun.zhiboyun.eaydu.com/live_haibian/".concat(streamId);
zegosdk.singleRecord(type, strTarget, streamId);
break;
default:
break;
}
};
var getSnapshootId = function getSnapshootId(streamId) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
if (rtcsdk.hasStream(streamId)) {
return streamId;
} else {
defaultApi$1.writeLog("zbyavsdk getSnapshootId , no streamId: ".concat(streamId, " in rtc room"));
}
break;
case ZEGO:
if (zegosdk.hasStream(streamId)) {
return zegosdk.getChannelIndex(streamId);
} else {
defaultApi$1.writeLog("zbyavsdk getSnapshootId , no streamId: ".concat(streamId, " in zego room"));
}
break;
case TALRTC:
case NERTC:
case VOLCRTC:
if (talrtcsdk.hasStream(streamId)) {
return talrtcsdk.getChannelIndex(streamId);
} else {
defaultApi$1.writeLog("talrtcsdk getSnapshootId , no streamId: ".concat(streamId, " in talrtc room"));
}
default:
break;
}
};
var getAllChannelIndex$3 = function getAllChannelIndex() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.getAllChannelIndex();
case TRTC:
return trtcsdk.getAllChannelIndex();
default:
break;
}
};
/**
* @function 设置摄像头参数(采集分辨率)
* @param width:Number 分辨率宽,必选,推荐 1280
* @param height:Number 分辨率高,必选,推荐 720
* @param frameRate:Number 帧率,必选,推荐 15
* @return Promise | void
*/
var setCameraParams = function setCameraParams(args, idx, streamId) {
var width = args.width,
height = args.height,
frameRate = args.frameRate;
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setCameraParam(width, height, frameRate);
case ZEGO:
return zegosdk.setCameraParam(width, height, idx);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setCameraCaptureResolution(width, height, streamId);
case TRTC:
return trtcsdk.setCameraCaptureResolution(width, height);
default:
break;
}
};
/**
* @function 设置编码分辨率
* @param width:Number 分辨率宽,必选,推荐 1280
* @param height:Number 分辨率高,必选,推荐 720
* @param frameRate:Number 帧率,必选,推荐 15
* @return Promise | void
*/
var setEncodeParams = function setEncodeParams(args, idx, streamId) {
var width = args.width,
height = args.height,
frameRate = args.frameRate;
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setEncodeParam(width, height, frameRate);
case ZEGO:
return zegosdk.setVideoEncodeResolution(width, height, idx);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setCameraEncodeFps(frameRate, streamId) && talrtcsdk.setCameraEncodeResolution(width, height, streamId);
case TRTC:
return zegosdk.setVideoEncodeResolution(width, height);
default:
break;
}
};
/**
* @function 设置码率
* @param bitrate:Number 码率,必选,推荐 15
* @return Promise | void
*/
var setBitRate$1 = function setBitRate(bitrate, idx, streamId) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setBitRate(bitrate);
case ZEGO:
return zegosdk.setVideoBitrate(bitrate, idx);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setCameraEncodeBitrate(bitrate, streamId);
case TRTC:
return trtcsdk.setCameraEncodeBiarate(bitrate);
default:
break;
}
};
/**
* @function 本地视频录制
* @param type 开始/结束
* @param path 录制路径
* @return Promise | void
*/
var localRecordVideo$2 = function localRecordVideo(type, path) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
rtcsdk.localRecordVideo(type, path);
break;
case ZEGO:
zegosdk.localRecordVideo(type, path);
break;
case TALRTC:
case NERTC:
case VOLCRTC:
talrtcsdk.localRecordVideo(type, path);
break;
default:
break;
}
};
/**
* @function 本地音频录制
* @param type 开始/结束
* @param path 录制路径
* @return Promise | void
*/
var localRecordAudio$2 = function localRecordAudio(type, path) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
rtcsdk.localRecordAudio(type, path);
break;
case ZEGO:
zegosdk.localRecordAudio(type, path);
break;
case TALRTC:
case NERTC:
case VOLCRTC:
// FIXME METHOD_NOT_IMPLEMENT;
break;
default:
break;
}
};
var getDesktopPath$1 = function getDesktopPath() {
switch (window.zbyAVSDK_init_sdk_type) {
case ZEGO:
return zegosdk.getDesktopPath();
case TALRTC:
case NERTC:
case VOLCRTC: // return talrtcsdk.getDesktopPath();
default:
return zegosdk.getDesktopPath();
}
};
/**
* @function 本地录制
* @param {string | undefined} fileName
* @param {number} fileType 1:flv 2:mp4
* @param {number} idx 0:主流 1:辅流 2:RTMP流
* @returns {Promise<any>}
*/
var startCaptureRecord$1 = function startCaptureRecord(fileName, fileType, idx, path) {
if (idx === 2) {
defaultApi$1.writeLog("zbyAVSDK startCaptureRecord idx: ".concat(idx, ", use zego sdk"));
return zegosdk.startCaptureRecord(fileName, fileType, idx, path);
}
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.startCaptureRecord(fileName, fileType, idx, path);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.startRecord(fileName, fileType, idx, path);
default:
break;
}
};
/**
* 结束外部音频采集(通知sdk)
* @param {number} idx 0 | 1 | 2
* @returns
*/
var stopCaptureRecord$1 = function stopCaptureRecord(idx) {
if (idx === 2) {
defaultApi$1.writeLog("zbyAVSDK stopCaptureRecord idx: ".concat(idx, ", use zego sdk"));
return zegosdk.stopCaptureRecord(idx);
}
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.stopCaptureRecord(idx);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.stopRecord(idx);
default:
break;
}
};
/**
* @function 设置采集扬声器声音
* @param { string } deviceId 设备id
* @param {boolean} speaker 采集扬声器声音=true/不采集=false
* @return void
*/
var setSpeakerCapture = function setSpeakerCapture(deviceId, speaker) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setAudioSpeakerCapture(deviceId, speaker);
case ZEGO:
return zegosdk.setAudioSpeakerCapture(speaker);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.enableAudioSpeakerCapture(speaker);
case TRTC:
return trtcsdk.setAudioSpeakerCapture(speaker);
default:
break;
}
};
/**
* @function 设置混流和背景色
* @param { boolean } type true=开启/false=关闭
* @param { number } id 需要混合的采集器id
* @param { object } rgb
* @param { number } rgb.r
* @param { number } rgb.g
* @param { number } rgb.b
* @return: Promise
*/
var setMixStream$1 = function setMixStream(type, id, rgb) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setMixStream(type, id, rgb);
case ZEGO:
break;
case TALRTC:
case NERTC:
case VOLCRTC:
// FIXME METHOD_NOT_IMPLEMENT;
break;
default:
break;
}
;
};
/**
* @function 采集器截图
* @param { string } fileName 文件名,需要后缀名。例如:333.jpg
* @return: Promise
*/
var captureSnapShot$1 = function captureSnapShot(fileName) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.captureSnapShot(fileName);
case ZEGO:
break;
case TALRTC:
case NERTC:
case VOLCRTC:
// FIXME METHOD_NOT_IMPLEMENT;
break;
default:
break;
}
};
/**
* @function 播放器截图
* @param { string } fileName 文件名,需要后缀名。例如:333.jpg
* @return: Promise
*/
var playerSnapShot$1 = function playerSnapShot(id, fileName) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.playerSnapShot(id, fileName);
case ZEGO:
break;
case TALRTC:
case NERTC:
case VOLCRTC:
// FIXME METHOD_NOT_IMPLEMENT;
break;
default:
break;
}
};
/**
* @function 设置打开/关闭摄像头
* @param { boolean } type true=开启/false=关闭
* @return: Promise
*/
var openOrCloseCameraAndMicrophone$1 = function openOrCloseCameraAndMicrophone(type) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.openOrCloseCameraAndMicrophone(type);
case ZEGO:
break;
case TALRTC:
case NERTC:
case VOLCRTC:
// FIXME METHOD_NOT_IMPLEMENT;
break;
default:
break;
}
};
/**
* @function 加载采集插件的输入数据 //调用后,zego 可以向采集插件传送摄像头数据,用于拼接
* @return: Promise
*/
var loadCollectionInputEntry$3 = function loadCollectionInputEntry() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.loadCollectionInputEntry();
case TALRTC:
case NERTC:
case VOLCRTC:
// FIXME METHOD_NOT_IMPLEMENT;
break;
default:
break;
}
};
/**
* @function 加载采集插件的输出数据 //调用后,采集插件向zego传送数据
* @return: Promise
*/
var loadCollectionOutputEntry$2 = function loadCollectionOutputEntry() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.loadCollectionOutputEntry();
case TALRTC:
case NERTC:
case VOLCRTC:
// FIXME METHOD_NOT_IMPLEMENT;
break;
default:
break;
}
};
var mixedstuVideo = function mixedstuVideo(stuArray) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.rtcLoadCollectionEntry2(stuArray);
case ZEGO:
return zegosdk.loadCollectionInputEntry2(stuArray);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.loadCollectionInputEntry2(stuArray);
default:
break;
}
};
/**
* @function 加载采集插件的输出数据 //调用后,zego 可以向采集插件传送摄像头数据,用于拼接
* @return: Promise
*/
var setCDNPublishTarget$1 = function setCDNPublishTarget(pRtmpUrl, idx) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return rtcsdk.setCDNPublishTarget(pRtmpUrl, idx);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.addPublishRtmpStreamUrl(pRtmpUrl);
default:
break;
}
};
/**
* @function 设置预览镜像状态
* @param { boolean } type true=开启 false=关闭
* @return: Promise
*/
var setMirrorStatus$3 = function setMirrorStatus(type) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setMirrorStatus(type);
case ZEGO:
return zegosdk.setMirrorStatus(type);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setMirrorStatus(type);
default:
break;
}
};
/**
* @function 设置拉流镜像状态
* @param { boolean } type true=开启 false=关闭
* @return: Promise
*/
var setPlayViewMirror$2 = function setPlayViewMirror(type, id) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setRTCPlayViewMirror(type, id);
case ZEGO:
return zegosdk.setPlayViewMirror(type);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setPlayViewMirror(type, id);
default:
break;
}
};
/**
* @function 设置推流镜像状态
* * @param { boolean } id 采集器Id
* @param { boolean } mode 1=开启 0=关闭
* @return: Promise
*/
var setPushViewMirror = function setPushViewMirror(mode) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setMirrorMode(mode);
case ZEGO:
return zegosdk.setVideoMirrorMode(mode);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setMirrorStatus(mode);
default:
break;
}
};
/**
* @function 开启美颜
* @param { boolean } type true=开启 false=关闭
* @return: Promise
*/
var startSenseMe$2 = function startSenseMe() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.startSenseMe();
case ZEGO:
return zegosdk.startSenseMe();
case TALRTC:
case NERTC:
case VOLCRTC:
// FIXME METHOD_NOT_IMPLEMENT;
break;
default:
break;
}
};
/**
* @function 设置美颜参数
* @param { boolean } type true=开启 false=关闭
* @return: Promise
*/
var setBeautifyParam$3 = function setBeautifyParam(type, value) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.setBeautifyParam(type, value);
case ZEGO:
return zegosdk.setBeautifyParam(type, value);
case TALRTC:
case NERTC:
case VOLCRTC:
// FIXME METHOD_NOT_IMPLEMENT;
break;
default:
break;
}
};
/**
* @function 关闭美颜
* @param { boolean } type true=开启 false=关闭
* @return: Promise
*/
var endSenseMe$2 = function endSenseMe() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.endSenseMe();
case ZEGO:
return zegosdk.endSenseMe();
case TALRTC:
case NERTC:
case VOLCRTC:
// FIXME METHOD_NOT_IMPLEMENT;
break;
default:
break;
}
};
/**
* @function 40路混音
* @param { number } mixMode //混流模式 0=关闭混流 1=开启混流
* @param { array } streamIdArr //表示要突出声音的channel
* @return: Promise
*/
var setAudioMixMode$2 = function setAudioMixMode(mixMode, streamIdArr) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.setAudioMixMode(mixMode, streamIdArr);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setAudioMixMode(mixMode, streamIdArr);
default:
break;
}
}; //获取第三方底层流媒体版本号
var getSDKVersion$3 = async function getSDKVersion() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.getSDKVersion();
case ZEGO:
return zegosdk.getSDKVersion();
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.getSDKVersion();
default:
break;
}
}; //获取第三方底层流媒体内核版本号
var getSDKCoreVersion$1 = async function getSDKCoreVersion() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return rtcsdk.getSDKVersion();
case ZEGO:
return zegosdk.getSDKVersion();
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.getSDKCoreVersion();
default:
break;
}
}; //获取摄像头所支持的分辨率
var getCameraSupportedResolution = async function getCameraSupportedResolution(deviceId) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return await rtcsdk.getCameraSupportedRes(deviceId);
case ZEGO:
return await zegosdk.getCameraSupportedRes(deviceId);
case TALRTC:
case NERTC:
case VOLCRTC:
return await talrtcsdk.getCameraResolution(deviceId);
case TRTC:
return await trtcsdk.getCameraResolution(deviceId);
default:
break;
}
};
/**
* @function 发送SEI
* @return: Promise
*/
var sendMediaSideInfo$2 = function sendMediaSideInfo(info) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.sendMediaSideInfo(info);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.sendSEIMsg(info);
case TRTC:
return trtcsdk.sendSEIMsg(info);
default:
break;
}
};
/**
* @function 开启rtc同屏
* @return: Promise
*/
var startMultiScreen$3 = function startMultiScreen() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.startMultiScreen();
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.startMultiScreen();
case TRTC:
return trtcsdk.startMultiScreen();
default:
break;
}
};
/**
* @function 开启rtc同屏
* @return: Promise
*/
var enableHighlight$1 = function enableHighlight(enable) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
break;
case TRTC:
return trtcsdk.enableHighlight(enable);
default:
break;
}
};
/**
* @function 开启音频外部采集
* @return: Promise
*/
var startAudioExCapture$2 = function startAudioExCapture() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.startAudioExCapture(1);
case TALRTC:
case NERTC:
case VOLCRTC:
// FIXME METHOD_NOT_IMPLEMENT;
break;
default:
break;
}
};
/**
* 第四路流类型设置
* @param {number} type 6: 视频:主流 音频:麦克风+扬声器 7: 外部音频源,外部视频源,数据来源player
* @returns
*/
var setFourthStreamType$2 = function setFourthStreamType(type, idx, streamId) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.setFourthStreamType(type, idx);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setFourthStreamType(type, streamId);
default:
break;
}
};
var setVideoSource$1 = function setVideoSource(idx, type) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.setVideoSource(idx, type);
case TALRTC:
case NERTC:
case VOLCRTC: // return talrtcsdk.setVideoSource(idx, type);
default:
break;
}
};
/**
* @function 设置辅路通道音频采集模式
* @return: Promise
*/
var setAUXAudioType$1 = function setAUXAudioType(type) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.setAUXAudioType(type);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setAudioType(type);
default:
break;
}
};
/**
* @function 设置录制通道音频采集模式
* @return: Promise
*/
var setThirdAudioType$1 = function setThirdAudioType(type, streamId) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.setThirdAudioType(type);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setAudioType(type, streamId);
default:
break;
}
};
/**
* @function 设置录制通道音频采集模式
* @return: Promise
*/
var setThirdAudioType2 = async function setThirdAudioType2(type) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.setThirdAudioType(type);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.enableRTCAudioMixMode(type === 32, type);
default:
break;
}
};
/**
* @function 判断推流类型
* @return: Promise
*/
var getStreamType_zego = function getStreamType_zego() {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
break;
case ZEGO:
return zegosdk.getStreamType();
default:
break;
}
};
var enableBeautify$2 = function enableBeautify(enable, streamId, idx) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return;
case ZEGO:
return zegosdk.enableBeautify(enable, streamId, idx);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.enableBeautify(enable, streamId, idx);
default:
return zegosdk.enableBeautify(enable, streamId, idx);
}
};
var setBeautifyParam2$1 = function setBeautifyParam2(mode, submode, value, streamId, idx, image) {
switch (window.zbyAVSDK_init_sdk_type) {
case RTC:
return;
case ZEGO:
return zegosdk.setBeautifyParam2(mode, submode, value, streamId, idx, image);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setBeautifyParam(mode, submode, value, streamId, image);
default:
return zegosdk.setBeautifyParam2(mode, submode, value, streamId, idx, image);
}
};
var setEngineConfig$2 = function setEngineConfig(key, value) {
switch (window.zbyAVSDK_init_sdk_type) {
case ZEGO:
return zegosdk.setEngineConfig(key, value);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.setEngineConfig(key, value);
default:
return zegosdk.setEngineConfig(key, value);
}
};
var getMicrophoneLoudness$2 = function getMicrophoneLoudness() {
switch (window.zbyAVSDK_init_sdk_type) {
case ZEGO:
return zegosdk.getMicrophoneLoudness();
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.getMicrophoneLoudness();
default:
return zegosdk.getMicrophoneLoudness();
}
};
var getCurrentSpeakerId$3 = function getCurrentSpeakerId() {
switch (window.zbyAVSDK_init_sdk_type) {
case ZEGO:
return zegosdk.getCurrentSpeakerId();
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.getCurrentSpeakerId();
default:
return zegosdk.getCurrentSpeakerId();
}
};
var getCurrentMicrophoneId$3 = function getCurrentMicrophoneId() {
switch (window.zbyAVSDK_init_sdk_type) {
case ZEGO:
return zegosdk.getCurrentMicrophoneId();
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.getCurrentMicrophoneId();
default:
return zegosdk.getCurrentMicrophoneId();
}
};
var getCurrentCameraId$2 = function getCurrentCameraId() {
switch (window.zbyAVSDK_init_sdk_type) {
case ZEGO:
return zegosdk.getCurrentCameraId();
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.getCurrentCameraId();
default:
return zegosdk.getCurrentCameraId();
}
};
var takeLocalSnapShot$2 = function takeLocalSnapShot(streamId, idx) {
switch (window.zbyAVSDK_init_sdk_type) {
case ZEGO:
return zegosdk.takeLocalSnapShot(streamId, idx);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.takeLocalSnapShot(streamId, idx);
default:
return zegosdk.takeLocalSnapShot(streamId, idx);
}
};
var takeRemoteSnapShot$2 = function takeRemoteSnapShot(streamId) {
switch (window.zbyAVSDK_init_sdk_type) {
case ZEGO:
return zegosdk.takeRemoteSnapShot(streamId);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.takeRemoteSnapShot(streamId);
default:
return zegosdk.takeRemoteSnapShot(streamId);
}
};
var startAigc$2 = function startAigc(config) {
switch (window.zbyAVSDK_init_sdk_type) {
case ZEGO:
return zegosdk.startAigc(config);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.startAigc(config);
default:
return zegosdk.startAigc(config);
}
};
var stopAigc$2 = function stopAigc() {
switch (window.zbyAVSDK_init_sdk_type) {
case ZEGO:
return zegosdk.stopAigc();
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.stopAigc();
default:
return zegosdk.stopAigc();
}
};
var sendAigcMessage$2 = function sendAigcMessage(messageInfo) {
switch (window.zbyAVSDK_init_sdk_type) {
case ZEGO:
return zegosdk.sendAigcMessage(messageInfo);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.sendAigcMessage(messageInfo);
default:
return zegosdk.sendAigcMessage(messageInfo);
}
};
/**
* @function 开关麦克风录制数据回调
* @param {boolean} enable 是否开启回调,默认false
* @param {number} sampleRate 采样率,默认 48000
* 目前可以是: 8000, 16000, 32000, 44100, or 48000.
* @param {number} channels 声道数,默认 1
*/
var enableMicRecordDataCallback$2 = function enableMicRecordDataCallback() {
var enable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var sampleRate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 48000;
var channels = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
switch (window.zbyAVSDK_init_sdk_type) {
case ZEGO:
return zegosdk.enableMicRecordDataCallback(enable, sampleRate, channels);
case TALRTC:
case NERTC:
case VOLCRTC:
return talrtcsdk.enableMicRecordDataCallback(enable, sampleRate, channels);
case RTC:
case TRTC:
default:
defaultApi$1.writeLog('avsdk enableMicRecordDataCallback not supported for current sdk');
return Promise.resolve();
}
};
var setThirdAudioCallbackType = function setThirdAudioCallbackType(sdkType) {
var type = sdkVale[sdkType];
return zegosdk.setThirdAudioType(type);
};
var zbyAVSDK = {
init: init$4,
recoverSdk: recoverSdk$1,
deviceCheckerInit: deviceCheckerInit,
stopCheckDevice: stopCheckDevice$2,
changeSDK: changeSDK,
unloadExtension: unloadExtension,
setVideoCallback: setVideoCallback$2,
startPushFlow: startPushFlow,
stopPushFlow: stopPushFlow,
initPullFlow: initPullFlow$4,
startPullFlow: startPullFlow,
stopPullFlow: stopPullFlow$1,
stopAllPullFlow: stopAllPullFlow$1,
playDestroy: playDestroy$1,
changePullFlow: changePullFlow$3,
getCameraDeviceList: getCameraDeviceList$2,
setCameraDevice: setCameraDevice$2,
openOrCloseCamera: openOrCloseCamera$3,
startPreview: startPreview$3,
stopPreview: stopPreview$3,
getOrLocateVideo: getOrLocateVideo,
getSpeakerDeviceList: getSpeakerDeviceList$3,
setSpeakerDevice: setSpeakerDevice$4,
getSpeakerDevice: getSpeakerDevice$1,
getSpeakerVolume: getSpeakerVolume$1,
setSpeakerVolume: setSpeakerVolume$1,
setSpeakerMute: setSpeakerMute$1,
getAppVolume: getAppVolume,
setAppVolume: setAppVolume,
setAppMute: setAppMute,
getMicrophoneDeviceList: getMicrophoneDeviceList$3,
setMicrophoneDevice: setMicrophoneDevice$4,
openOrCloseMicrophone: openOrCloseMicrophone$2,
getMicrophoneVolume: getMicrophoneVolume$1,
setMicrophoneVolume: setMicrophoneVolume$1,
setMicrophoneMute: setMicrophoneMute,
leaveRoomWithChangeSDK: leaveRoomWithChangeSDK$1,
leaveRoom: leaveRoom$4,
turnPush: turnPush,
setAudioMute: setAudioMute,
pullAudioFlow: pullAudioFlow$4,
setVideoMute: setVideoMute,
openMicVolumeCb: openMicVolumeCb$2,
startMixtStream: startMixtStream,
stopMixtStream: stopMixtStream,
singleRecord: singleRecord$1,
getSnapshootId: getSnapshootId,
setCameraParams: setCameraParams,
setEncodeParams: setEncodeParams,
setBitRate: setBitRate$1,
recordPublishTarget: recordPublishTarget,
localRecordVideo: localRecordVideo$2,
localRecordAudio: localRecordAudio$2,
getDesktopPath: getDesktopPath$1,
startCaptureRecord: startCaptureRecord$1,
stopCaptureRecord: stopCaptureRecord$1,
teacherStartLinkMic: teacherStartLinkMic$4,
teacherStopLinkMic: teacherStopLinkMic$4,
setSpeakerCapture: setSpeakerCapture,
setMixStream: setMixStream$1,
captureSnapShot: captureSnapShot$1,
playerSnapShot: playerSnapShot$1,
openOrCloseCameraAndMicrophone: openOrCloseCameraAndMicrophone$1,
setMirrorStatus: setMirrorStatus$3,
getStreamType_zego: getStreamType_zego,
startSenseMe: startSenseMe$2,
setBeautifyParam: setBeautifyParam$3,
endSenseMe: endSenseMe$2,
setPlayViewMirror: setPlayViewMirror$2,
setPushStreamVideo: setPushStreamVideo,
getSDKVersion: getSDKVersion$3,
getSDKCoreVersion: getSDKCoreVersion$1,
getCameraSupportedResolution: getCameraSupportedResolution,
setAudioMixMode: setAudioMixMode$2,
setPushViewMirror: setPushViewMirror,
deinit: deinit,
startMultiScreen: startMultiScreen$3,
getAllChannelIndex: getAllChannelIndex$3,
startAudioExCapture: startAudioExCapture$2,
setFourthStreamType: setFourthStreamType$2,
startSoundLevelMonitor: startSoundLevelMonitor$1,
sendMediaSideInfo: sendMediaSideInfo$2,
enableHighlight: enableHighlight$1,
setVideoSource: setVideoSource$1,
setAUXAudioType: setAUXAudioType$1,
setThirdAudioType: setThirdAudioType$1,
setThirdAudioType2: setThirdAudioType2,
mixedstuVideo: mixedstuVideo,
setThirdAudioCallbackType: setThirdAudioCallbackType,
enableBeautify: enableBeautify$2,
setBeautifyParam2: setBeautifyParam2$1,
setEngineConfig: setEngineConfig$2,
setWaterMark: setWaterMark$2,
getMicrophoneLoudness: getMicrophoneLoudness$2,
getCurrentSpeakerId: getCurrentSpeakerId$3,
getCurrentMicrophoneId: getCurrentMicrophoneId$3,
getCurrentCameraId: getCurrentCameraId$2,
takeLocalSnapShot: takeLocalSnapShot$2,
takeRemoteSnapShot: takeRemoteSnapShot$2,
startAigc: startAigc$2,
stopAigc: stopAigc$2,
sendAigcMessage: sendAigcMessage$2,
enableMicRecordDataCallback: enableMicRecordDataCallback$2,
setPushAudioMute: setPushAudioMute // getDeviceState
};
var devicesMap = new Map([[1, 'video'], [2, 'audio'], [3, 'video_and_audio'], [4, 'screen'], [5, 'ScreenAndVideo'], [6, 'ScreenAndAudio'], [8, 'loudSpeaker'], [99, 'max']]); // status : Number 设备状态 1开启 2关闭 3未找到
var devicesStatusMap = new Map([[0, 'none'], [1, 'open'], [2, 'closed'], [3, 'unfound'], //未找到设备
[4, 'error'], //异常
[5, 'unauthorized'], //未授权
[6, 'background'], //iOS 设备进入后台,设备摄像头被关闭,麦克风正常
[7, 'max'] //超出0-max范围的状态值都属于异常
]);
var logMap = {
debug: 0,
info: 1,
warnning: 2,
error: 3,
critical: 4
};
var roleMap = new Map([[1, 'teacher'], [2, 'student'], [3, 'assistant'], [4, 'parent']]);
var getDeviceTypeKey = function getDeviceTypeKey(value) {
return util.getMapKeyByValue(devicesMap, value);
};
var getDeviceStatusKey = function getDeviceStatusKey(value) {
return util.getMapKeyByValue(devicesStatusMap, value);
};
var dict = {
getDeviceStatusKey: getDeviceStatusKey,
getDeviceTypeKey: getDeviceTypeKey,
logMap: logMap,
devicesMap: devicesMap,
devicesStatusMap: devicesStatusMap,
roleMap: roleMap
};
var currentTimeString = function currentTimeString() {
var timeString = '[' + ('' + new Date().getHours()).padStart(2, '0') + ':' + ('' + new Date().getMinutes()).padStart(2, '0') + ':' + ('' + new Date().getSeconds()).padStart(2, '0') + ':' + ('' + new Date().getMilliseconds()).padStart(3, '0') + ']';
return timeString;
};
var callMethod$7 = function callMethod(name, args) {
var extensionId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'default_ext';
// EM 是寄宿于端的,浏览器中并不存在,为防止报错需要先进行能力检测
if (EM) {
return new Promise(function (resolve, reject) {
EM.CallMethod(extensionId, name, JSON.stringify(args), function (code, content) {
//控制台weblog高优先级
if (typeof window.zby_live_sdk_weblog !== 'undefined') {
if (window.zby_live_sdk_weblog === true) {
if (name === 'WriteLog' && code == 0) {
console.log(currentTimeString() + "".concat(args.msg));
} else {
console.log("".concat(name, " :\n Time: ").concat(currentTimeString(), "\n Param: ").concat(args.msg, "\n Code: ").concat(code, "\n Message: ").concat(content));
}
}
} else {
//sdk默认输出weblog日志,除非明确禁用;初始化之前默认输出日志,初始化后根据参数规则
// if (!window.zby_sdk_init_params || typeof window.zby_sdk_init_params.weblog === 'undefined' || (typeof window.zby_sdk_init_params.weblog !== 'undefined' && window.zby_sdk_init_params.weblog === true)) {
if (config.weblog === true) {
if (name === 'WriteLog' && code == 0) {
console.log(currentTimeString() + "".concat(args.msg));
} else {
console.log("".concat(name, " :\n Time: ").concat(currentTimeString(), "\n Param: ").concat(args.msg, "\n Code: ").concat(code, "\n Message: ").concat(content));
}
}
}
resolve({
code: code,
content: content
});
});
});
}
};
var writeLog$1 = function writeLog() {
var msgtype = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'info';
var msgbody = arguments.length > 1 ? arguments[1] : undefined;
var productName = arguments.length > 2 ? arguments[2] : undefined;
msgbody = typeof msgbody === 'string' ? msgbody : JSON.stringify(msgbody);
var args = {
//日志级别,0:debug,1:info,2:warnning,3:error,4:critical
'type': dict.logMap[msgtype],
'msg': "--".concat(productName ? '[' + productName + ']--' : '', " ").concat(msgbody)
};
callMethod$7('WriteLog', args);
};
if (window.EM) {
EM.Load('default_ext', extensionInfo.version.default_ext, true, function (ec, content) {
writeLog$1('info', 'Load EC:' + ec + '\nContent:' + content);
});
}
var bridge = {
writeLog: writeLog$1
};
/* eslint-disable */
var ENTRY = {
configInfoObj: null,
//配置信息
roomInfoObj: '',
//房间信息
enterMaxCount: 1,
//尝试连接并进入房间的次数
msgindex: 0,
userid: '',
role: '',
logmode: 1,
channeltype: 1,
//0=有所有通道;1=仅有control通道;2=仅有chat通道
istestFromhtml: 0,
//是否是测试页
//public 第一步 设置配置信息,含用户信息等
setConfigInfo: function setConfigInfo(configstr) {
// configstr = {"address":"http://fwef",
// "user":{"userid":"123","username":"san","token":"fwe","role":"teacher","avatar":"http:\\fwe","code":"1234"},
// "language":0,"logmode":0,"channeltype":0}
try {
this.recordLogToFile('info', 'channnel init params : ' + configstr);
this.configInfoObj = JSON.parse(configstr);
this.configInfoObj.encodetype = 'base64';
if (this.configInfoObj) {
this.configInfoObj.user.role = this.translateRole(this.configInfoObj.user.role);
this.userid = this.configInfoObj.user.userid;
this.role = this.configInfoObj.user.role;
this.logmode = this.configInfoObj.logmode;
var addresslenth = this.configInfoObj.address.length;
if (addresslenth > 0) {
if (this.configInfoObj.address[addresslenth - 1] != '\\' && this.configInfoObj.address[addresslenth - 1] != '/') {
this.configInfoObj.address = this.configInfoObj.address + '/';
}
} else {
this.recordLogToFile('error', 'server addrres is null');
}
if (this.configInfoObj.hasOwnProperty('channeltype')) {
this.channeltype = this.configInfoObj.channeltype;
}
}
} catch (e) {
console.log(e);
}
},
//public 第二步 进入教室
enterRoom: function enterRoom(roominfo, dealChannelMsg) {
// roominfo = {"roomid":"16","classmode":1,"playmode":1,"institutionid":545}
//此处传入的是客户端定义的课程类型
//0=无效模式;1=1对1模式;2=小组课模式;3=大班课模式;4=小班课模式,同小组课模式,只不过人数更多,最多20个;5=互动大班课
//6=口令互动大班课;1000=励模式的互动大班课(TODO: 太特化了,后面看是否能一般化)
try {
this.initpara();
this.msgindex = 0;
ENTRY.recordLogToFile('info', "enter room info" + roominfo);
this.roomInfoObj = JSON.parse(roominfo);
if (this.channeltype == 2) {// w.CHAT.enterRoom();
} else {
CONTROL.enterRoom(dealChannelMsg);
}
} catch (e) {
console.log(e);
}
},
leaveRoom: function leaveRoom() {
if (this.channeltype == 2) {
if (w.CHAT) {
w.CHAT.leaveRoom();
}
} else {
CONTROL.leaveRoom();
}
},
//public 获取配置信息
getConfigInfo: function getConfigInfo() {
return this.configInfoObj;
},
//public 获取房间信息
getRoomInfo: function getRoomInfo() {
return this.roomInfoObj;
},
//转换一下用户角色的定义 用户角色 "1=teacher"/"2=student"/"3=assistant"/"4=parent"
translateRole: function translateRole(rolefore) {
var role = this.configInfoObj.user.role;
if (typeof rolefore == "string") {
if (rolefore == 'teacher') {
role = '1';
} else if (rolefore == 'student') {
role = '2';
} else if (rolefore == 'assistant') {
role = '3';
} else if (rolefore == 'parent') {
role = '4';
}
}
return role;
},
//转换一下用户角色的定义 用户角色 "1=teacher"/"2=student"/"3=assistant"/"4=parent"
translateRoleBack: function translateRoleBack(rolelocal) {
if (typeof rolelocal == "string") {
if (rolelocal == '1') {
return 'teacher';
} else if (rolelocal == '2') {
return 'student';
} else if (rolelocal == '3') {
return 'assistant';
} else if (rolelocal == '4') {
return 'parent';
}
}
return '';
},
//判断是否是我自己的消息
isMyMsg: function isMyMsg(userid) {
if (this.configInfoObj && this.configInfoObj.user.userid == userid) {
return true;
}
return false;
},
//判断是否是大班课
isLargeClass: function isLargeClass() {
if (this.roomInfoObj) {
if (this.roomInfoObj.classmode == 3 || this.roomInfoObj.classmode == 5 || this.roomInfoObj.classmode == 6 || this.roomInfoObj.classmode == 1000) {
return true;
}
}
return false;
},
//获取课程类型,即将客户端传入的课程类型转换成数据库中定义的课程类型,传给信道
getClassTypeInDb: function getClassTypeInDb() {
//客户端定义的课程类型
//0=无效模式;1=1对1模式;2=小组课模式;3=大班课模式;4=小班课模式,同小组课模式,只不过人数更多,最多20个;5=互动大班课
//6=口令互动大班课;1000=励模式的互动大班课
//数据库定义课程类型
//0=一对一';'3'=小组课';'1'=大班课(口令访问)';'2':'大班课(密码访问)';'6':'互动大班课(口令访问)';'5':'互动大班课(密码访问)'
var classtype = 1;
if (this.roomInfoObj) {
classtype = this.roomInfoObj.classmode;
if (this.roomInfoObj.classmode == 1) {
classtype = 0;
} else if (this.roomInfoObj.classmode == 2) {
classtype = 3;
} else if (this.roomInfoObj.classmode == 3) {
classtype = 1; //客户端把口令和密码方式的大班课都统一为了大班课
} else if (this.roomInfoObj.classmode == 4) {
classtype = 7; //客户端给的4是小班课
} // 找出互动大班课
else if (this.roomInfoObj.classmode == 5 || this.roomInfoObj.classmode == 6) {
classtype = 5; //为了增加信道给麦加的判断
}
}
return classtype; //默认互动大班课吧
},
//判断是否是我自己的消息
getMsgIndex: function getMsgIndex() {
this.msgindex++;
return this.msgindex;
},
//进入房间,初始化参数
initpara: function initpara() {},
parseIntMySimple: function parseIntMySimple(strvar) {
var ret = 0;
for (var i = 0; i < strvar.length; ++i) {
ret *= 10;
var num1 = Number(strvar[i]);
ret += num1;
}
return ret;
},
getMsgKey: function getMsgKey(index) {
var time = new Date();
var key = this.userid + '_' + this.role + '_' + index + '_' + time.getTime();
return key;
},
//日志记录 msgtype:0:debug,1:info,2:warnning,3:error,4:critical
recordLogToFile: function recordLogToFile(msgtype, msgbody, productName) {
try {
if (msgtype == 'f' && this.logmode == 0) {
return;
}
if (this.channeltype == 0 || this.channeltype == 1) {
//日志级别,0:debug,1:info,2:warnning,3:error,4:critical
bridge.writeLog(msgtype, JSON.stringify(msgbody), productName);
}
if (this.channeltype == 2) {
if (w.chatobj && w.chatobj.onRecordJsLog) {
w.chatobj.onRecordJsLog(msgtype, msgbody);
}
}
} catch (e) {}
},
//上报提示信息
reportHintInfo: function reportHintInfo(content) {
if (w.controlObj && w.controlObj.onSelfHealthReport) {
w.controlObj.onSelfHealthReport('report', content);
}
},
//记录try catch异常
recordException: function recordException(e) {
try {
var logmsg = e.stack + '_' + e.message;
bridge.writeLog('e', logmsg);
} catch (e) {}
},
//获取bridge
setupWebViewJavascriptBridge: function setupWebViewJavascriptBridge(callback) {
if (window.WebViewJavascriptBridge) {
return callback(WebViewJavascriptBridge);
}
if (window.WVJBCallbacks) {
return window.WVJBCallbacks.push(callback);
}
window.WVJBCallbacks = [callback];
var WVJBIframe = document.createElement('iframe');
WVJBIframe.style.display = 'none';
WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
document.documentElement.appendChild(WVJBIframe);
setTimeout(function () {
document.documentElement.removeChild(WVJBIframe);
}, 0);
} // //html模拟客户端调用
// htmlEnterRoom: function () {
// var roomid = document.getElementById("roomid").value;
// var userid = document.getElementById("username").value;
// var channel = document.getElementById("channeltype").value;
// var usercodeinput = document.getElementById("usercode").value;
// var serverurl = document.getElementById("serverurl").value;
// var tokeninput = document.getElementById("token").value;
// var instidinput = document.getElementById("instid").value;
// var username = userid;
// var config = {};
// //config.address = 'http://123.56.176.151:14081/';//开发
// //config.address = 'http://dev-im.weclassroom.com:14080/';//开发
// //config.address = 'https://test-im.weclassroom.com';//开发
// //config.address = 'http://123.56.176.151:14082/';//开发
// config.address = serverurl; //开发
// //config.address = 'http://123.56.193.134:10080/';
// config.language = 0;
// config.logmode = 2;
// config.user = {};
// config.user.userid = userid;
// config.user.username = username;
// if (usercodeinput != 0) {
// config.user.code = usercodeinput;
// config.user.token = '';
// } else {
// config.user.token = tokeninput;
// //config.user.token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlIjoiMiIsInN1YiI6MTAwMDg0LCJpc3MiOiJodHRwczpcL1wvdGVzdC1hcGkud2VjbGFzc3Jvb20uY29tXC91c2VyXC9sb2dpbiIsImlhdCI6MTQ4NzIxNzk0NCwiZXhwIjoxNDg5ODA5OTQ0LCJuYmYiOjE0ODcyMTc5NDQsImp0aSI6IjlmZDcwYzVmOGRkNjM2YTc0MzA2MjI4OGUxYmVlYmQ5In0.RgpquwjhqcYUKf1l3XjbGggbc8Y1jEY_45xZpfgnOIg';
// }
// if (username.indexOf("teacher") == 0) {
// config.user.role = 'teacher';
// } else if (username.indexOf('assistant') == 0) {
// config.user.role = 'assistant';
// } else {
// config.user.role = 'student';
// }
// config.channeltype = channel;
// config.user.avatar = 'http://www.qq1234.org/uploads/allimg/150709/8_150709170804_8.jpg';
// this.setConfigInfo(JSON.stringify(config));
// var roominfo = {};
// roominfo.roomid = roomid;
// roominfo.classmode = 5; //1=1对1模式;2=1对多模式;3=大班课模式;5=互动大班课密码;6=互动大班课口令
// roominfo.playmode = 1;
// roominfo.institutionid = instidinput;
// this.enterRoom(JSON.stringify(roominfo));
// this.istestFromhtml = 1;
// if (w.CHATEST) {
// w.CHATEST.checkorder = 1;
// }
// },
// htmlLeaveRoom: function () {
// CONTROL.leaveRoom();
// }
};
// })();
/*
* @Author: your name
* @Date: 2021-01-05 20:41:36
* @LastEditTime: 2021-03-25 21:57:42
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \1223\xbase_extension_zby_live_sdk\src\channel\sdk-cb.js
*/
var sdkCb = {
join: function join(data) {
NOTICE.join({
userId: data.userid || data.actorId,
userName: data.actorName,
role: data.actorType || data.role
});
},
joinAck: function joinAck(data) {
NOTICE.joinAck({
userId: data.userid || data.actorId,
userName: data.actorName,
role: data.actorType || data.role
});
},
addStream: function addStream(data) {
NOTICE.addStream({
userId: data.userid || data.actorId,
userName: data.actorName,
role: data.actorType || data.role,
streamId: data.streamUrl,
videoSrc: ''
});
},
removeStream: function removeStream(data) {
NOTICE.removeStream({
userId: data.userid || data.actorId || data.streamUrl.split('_')[2],
userName: data.actorName,
role: data.actorType || data.role,
streamId: data.streamUrl
});
},
updateStreamDeviceStatus: function updateStreamDeviceStatus(data) {
NOTICE.updateStreamDeviceStatus({
userId: data.userid || data.actorId,
userName: data.actorName,
role: data.actorType || data.role,
//获取设备类型和状态对应的文案,返回给业务层
deviceType: dict.devicesMap.get(parseInt(data.streamType)),
deviceStatus: dict.devicesStatusMap.get(parseInt(data.status))
});
},
leave: function leave(data) {
NOTICE.leave({
userId: data.userid || data.actorId,
userName: data.actorName,
role: data.actorType || data.role
});
},
channelDisconnect: function channelDisconnect() {
NOTICE.channelDisconnect();
},
userDisconnect: function userDisconnect(data) {
NOTICE.userDisconnect({
userId: data.userid || data.actorId,
userName: data.username,
role: data.role
});
}
};
function dealReceiveStreamMsg (data, baseInfo) {
try {
dataReport$2.pomeloRecvMsg({
data: data
});
} catch (e) {
console.error('pomeloRecvMsg_error', e);
}
switch (data.api) {
case 'join':
//通知业务层信息:有人进入房间
sdkCb.join(data);
defaultApi$1.writeLog("sdk notice user_join role: ".concat(data.actorType, " userId : ").concat(data.actorId, " userName: ").concat(data.actorName)); //如果本地是学生,就定向回应joinAck和addStream,让对方可以展示自己的视频
//定向回应joinAck和addStream,让对方可以展示自己的视频
//线路切换:本地学生和老师SDK类型不一致
if (window.target_sdk_type) {
//存在target_sdk_type ,表示正在切换中,等待切换
defaultApi$1.writeLog("changing sdk to ".concat(window.target_sdk_type, ",ignore remote userId ").concat(data.actorId, " join msg"));
break;
} else {
channelClient.sendJoinAck(baseInfo);
channelClient.sendAddStream(baseInfo);
channelClient.sendUpdateStreamDeviceStatus(Object.assign({}, baseInfo, {
deviceType: dict.getDeviceTypeKey('video'),
deviceStatus: dict.getDeviceStatusKey(userAndDeviceStatusInfo && userAndDeviceStatusInfo.camera ? 'open' : 'closed')
}));
channelClient.sendUpdateStreamDeviceStatus(Object.assign({}, baseInfo, {
deviceType: dict.getDeviceTypeKey('audio'),
deviceStatus: dict.getDeviceStatusKey(userAndDeviceStatusInfo && userAndDeviceStatusInfo.microPhone ? 'open' : 'closed')
}));
}
break;
case 'joinAck':
//首先确认对方的消息是针对本人进行回应的(信道处理)定向接收
//通知业务层信息:有人在房间的回应
sdkCb.joinAck(data);
defaultApi$1.writeLog("sdk notice user_response role: ".concat(data.actorType, " userId : ").concat(data.actorId, " userName: ").concat(data.actorName));
break;
case 'addStream':
defaultApi$1.writeLog({
changing_sdk_type: window.target_sdk_type,
local_sdk_type: window.current_sdk_type,
remote_sdk_type: data.sdkName,
isIgnore: !!window.target_sdk_type || data.sdkName && window.current_sdk_type !== data.sdkName
});
if (!!window.target_sdk_type || data.sdkName && window.current_sdk_type !== data.sdkName) {
defaultApi$1.writeLog("recv different sdk addStream,:target ".concat(window.target_sdk_type, ",ignore remote userId ").concat(data.actorId, " msg"));
break;
} //处理接收的群发消息和定向消息(已经由消息服务器处理过)
//通知展示收到的视频流数据
sdkCb.addStream(data);
defaultApi$1.writeLog("sdk notice remote_video_ready : current_sdk_type: ".concat(window.current_sdk_type, ", zbyAVSDK_type: ").concat(window.zbyAVSDK_init_sdk_type, ", role: ").concat(data.actorType, " userId : ").concat(data.actorId, " userName: ").concat(data.actorName));
break;
case 'removeStream':
if (data.sdkName && window.current_sdk_type !== data.sdkName) {
break;
} //处理接收的群发removeStream消息
//通知移除收到的视频流数据
sdkCb.removeStream(data);
defaultApi$1.writeLog("sdk notice remote_video_removed ,streamUrl ".concat(data.streamUrl, ", role: ").concat(data.actorType, " userId : ").concat(data.actorId, " userName: ").concat(data.actorName, " "));
break;
case 'updateStreamDeviceStatus':
/**
* @data.streamType: 1视频 / 2麦克风
* @data.status: 1打开 / 2关闭
* @CONTROL.role: '1' 老师收流 / '2' 学生收流
* */
//通知业务层信息
sdkCb.updateStreamDeviceStatus(data);
defaultApi$1.writeLog("sdk notice device_status role: ".concat(data.actorType, " userId : ").concat(data.actorId, " userName: ").concat(data.actorName, " deviceType : ").concat(dict.devicesMap.get(parseInt(data.streamType)), " deviceStatus: ").concat(dict.devicesStatusMap.get(parseInt(data.status))));
break;
case 'leave':
//通知业务层信息
sdkCb.leave(data);
defaultApi$1.writeLog("sdk notice user_leave role: ".concat(data.actorType, " userId : ").concat(data.actorId, " userName: ").concat(data.actorName));
break;
default:
break;
}
}
var w$1 = window;
var CONTROL = {
socket: null,
//连接保持相关
enterInit: false,
//是否发起过登录,leaveRoom后置为false
enterSuccessed: false,
//是否进入房间成功过,leaveRoom或主动disconnect后置为false
isConnect: false,
//连接服务器成功的标志
isInRoom: false,
//当前是否在房间中,掉线后为false
isReconnect: false,
//是否是自动重连,控制“进入教室”的显示
isOffline: false,
//是否网络断线
joindelaytimer: null,
//连接建立后,延迟发起登录请求
jointimeouttimer: null,
//登录超时time
connecttimeouttimer: null,
connecttimeCount: 0,
//初次连接时已尝试连接服务器的次数(用于connect超时检查)
connecttimeout: 20000,
//连接服务器超时,第一次设置20秒 之后变为30秒
authorizefailedcount: 0,
//授权失败的次数
//设置相关
address: '',
//以下为客户端传入的变量
token: '',
code: '',
//口令课时的口令,此时token应为空
role: '1',
//'1=teacher'/'2=student'/'3=assistant'/'4=parent'
username: '',
//显示用户相关信息时使用username
userid: '',
//消息后台识别用户使用userid
avatar: '',
conn_origin: '',
language: 0,
//0=中文,1=英文
classmode: 1,
////1=1对1模式;2=1对多模式;3=大班课模式;5=互动大班课
playmode: 1,
////1=正常上课;2=回放
roomid: '',
institutionid: '',
//确保消息发送成功相关的
streamIndex: 0,
normalMsgIndex: 0,
//不需要保序的消息的id
checkInterval: 3000,
//检查“消息发送超时”的时间间隔(超时时间在检查函数中)
maxAckDelay: 8000,
//消息回复的最大时间延迟,超过最大延迟还没收到回复,认为没发送成功
checkSendSucessTimer: null,
sendCheckList: null,
//发送确认队列
sendCacheList: null,
//发送缓存队列
recvmsgKeys: null,
//接收消息的缓存队列
recvmsgTimes: null,
//接收消息的缓存队列每条消息对应的时间
cacheReqSend: false,
//请求服务器端缓存的命令是否发送了
recvCacheList: null,
//断线重连后,请求缓存队列后,保存缓存的消息
recvTmpList: null,
//断线重连后,在获取服务器到服务器端的缓存队列前,先缓存收到的消息,不上抛
timedeviation: 0,
//本地时间与服务器时间的差值,毫秒:服务器时间-本地时间
orderCheck: null,
//保序验证
lastRecvMsgId: null,
//保序验证 //测试添加
testrecvcount: null,
//保序验证,统计接收消息数 //测试添加
delaycheckList: null,
//保序、丢消息、延迟验证 //测试添加
delayList: null,
//延迟列表
lastcheckindex: 0,
//上一个收到的echo回复的
dealChannelMsg: null,
// 业务层传入的消息处理器,作为回调使用
pingPongArr: [],
//public 进入教室
enterRoom: function enterRoom(dealChannelMsg) {
CONTROL.dealChannelMsg = dealChannelMsg;
if (!this.enterInInitparas()) {
return;
}
ENTRY.recordLogToFile('info', 'enter room info'); //通知宿主,页面开始连接了
if (w$1.controlObj && w$1.controlObj.onStartConnect) {
w$1.controlObj.onStartConnect();
}
this.startEnter();
},
//public 退出,断开连接
leaveRoom: function leaveRoom() {
CONTROL.otherChannelleaveRoom();
ENTRY.recordLogToFile('info', 'control: leaveRoom');
if (!this.enterInit) {
return;
}
CONTROL.enterInit = false;
this.sendleaveRoomMsg();
if (this.socket) {
this.socket.disconnect();
}
this.leaveRoomReset();
},
//其它通道离开房间
otherChannelleaveRoom: function otherChannelleaveRoom() {
try {
//其他通道
if (ENTRY.channeltype == 0) {
if (w$1.CHAT) {
w$1.CHAT.leaveRoom();
}
}
} catch (e) {
ENTRY.recordException(e);
}
},
//开始登录过程 连接-验证身份-进入教室
startEnter: function startEnter() {
CONTROL.enterInit = true;
ENTRY.recordLogToFile('info', 'enter channel room start');
var logmsg = 'control:connect ';
logmsg += this.address;
CONTROL.displayLogMsg(logmsg);
ENTRY.recordLogToFile('info', logmsg); //连接
this.socketConnect(); //超时检查
this.startCheckConnectTimer();
},
//socket 开始连接
socketConnect: function socketConnect() {
//开始连接时,如果存在已有socket,先断开连接
if (CONTROL.socket) {
CONTROL.socket.disconnect();
}
var opt = new Object();
opt.transports = ['websocket'];
ENTRY.recordLogToFile('info', 'channel start connect ' + this.address);
CONTROL.socket = io.connect(this.address, opt);
this.setEventListeners();
},
//注册监听事件
setEventListeners: function setEventListeners() {
console.log('websocket: 设置监听'); //监听连接成功 01步
this.socket.on('connect', function (o) {
ENTRY.recordLogToFile('info', 'channel connect success');
CONTROL.dealConnectSuccess();
try {
dataReport$2.joinRoomResult({
code: '0',
// cloud_api_response: JSON.stringify(window.zby_sdk_cloud_data),
cloud_api_response: window.zby_sdk_cloud_data,
cloud_api_url: "".concat(getApiCloudBaseUrl(), "/rtccloud/class/init"),
chat_url: window.zby_sdk_cloud_data.chatUrl
});
} catch (e) {}
;
}); //授权成功 02步
this.socket.on('authenticated', function () {
console.log('websocket: 授权成功');
CONTROL.displayLogMsg('control:authenticated!');
ENTRY.recordLogToFile('info', 'control:authenticated succeessful');
CONTROL.stopCheckConnectTimer();
CONTROL.joindelaytimer = window.setTimeout(CONTROL.sendJoinInMsg, 100); //延迟100毫秒登录
}); //授权不成功
this.socket.on('unauthenticated', function () {
ENTRY.recordLogToFile('info', 'control:authenticated failed');
CONTROL.dealAuthorizeFailed();
try {
dataReport$2.joinRoomResult({
code: '4',
cloud_api_response: window.zby_sdk_cloud_data,
cloud_api_url: "".concat(getApiCloudBaseUrl(), "/rtccloud/class/init"),
chat_url: window.zby_sdk_cloud_data.chatUrl
});
} catch (e) {}
;
}); //监听连接断开,禁用网卡/主动disconnect,会回调这个
this.socket.on('disconnect', function () {
CONTROL.isOffline = true;
CONTROL.dealDisconnect();
});
this.socket.on('pong', function (data) {
// console.log(data + ' - pong');
CONTROL.pingPongArr.push(data);
});
this.OnUserDefineMsg();
},
//发送验证权限消息
sendAuthenMsg: function sendAuthenMsg() {
try {
if (CONTROL.token != '') {
CONTROL.socket.emit('authenticate', {
token: CONTROL.token,
room: CONTROL.roomid,
instid: CONTROL.institutionid,
userid: CONTROL.userid
});
} else if (CONTROL.code != '') {
CONTROL.socket.emit('authenticate', {
code: CONTROL.code,
room: CONTROL.roomid,
instid: CONTROL.institutionid,
userid: CONTROL.userid
});
var logmsg = 'control sendAuthenMsg:with code:' + CONTROL.code;
ENTRY.recordLogToFile('info', logmsg);
} else {
ENTRY.recordLogToFile('error', 'control auth para wrong');
}
} catch (e) {
ENTRY.recordException(e);
}
},
//连接授权成功后发送:进入房间消息发送
sendJoinInMsg: function sendJoinInMsg() {
// 销毁延迟登录timer
CONTROL.stopDelayJoinTimer();
try {
var obj = {};
obj.username = CONTROL.username;
obj.room = CONTROL.roomid;
obj.avatar = CONTROL.avatar;
obj.userid = CONTROL.userid;
obj.role = CONTROL.role;
obj.playmode = CONTROL.playmode;
obj.device = 1; //0 - 默认;1 - PC客户端;2 - PC web;3 - 移动 web;4 - 移动 APP;
obj.instid = CONTROL.institutionid;
obj.conn_origin = CONTROL.conn_origin;
obj.classmode = ENTRY.getClassTypeInDb();
ENTRY.recordLogToFile('info', 'control:emit join_room');
CONTROL.socket.emit('join_room', obj, function (param) {
CONTROL.dealJoinMsgAck(param);
var logmsg = 'control:join_room ack' + JSON.stringify(param);
ENTRY.recordLogToFile('info', logmsg);
});
CONTROL.isOffline = false;
} catch (e) {
ENTRY.recordException(e);
} // 超时后检查进入房间是否成功
CONTROL.startCheckJoinInTimer();
},
//退出登录消息发送
sendleaveRoomMsg: function sendleaveRoomMsg() {
if (CONTROL.socket == null) {
return;
}
try {
ENTRY.recordLogToFile('info', 'control:emit leave room');
CONTROL.socket.emit('leave_room', {}, function (param) {});
} catch (e) {
ENTRY.recordException(e);
}
},
//进入房间是否成功的检查,在进入房间尚未成功时,重新启动进入过程
checkAndReEnter: function checkAndReEnter() {
CONTROL.stopAllTimeoutTimer(); // 离开教室 / 进入房间成功后,不用再检查了
// 掉线重连,不走这儿,这儿是尚未连接成功过,或主动disconnect后的重连;掉线后,socket.io库会自动重连,并回调connect
if (!CONTROL.enterInit || CONTROL.enterSuccessed) {
var logmsg = 'control:checkAndReEnter not needed:' + CONTROL.enterInit + ',' + CONTROL.enterSuccessed;
ENTRY.recordLogToFile('info', logmsg);
return;
}
ENTRY.recordLogToFile('info', 'control:checkAndReEnter');
if (CONTROL.connecttimeCount < ENTRY.enterMaxCount) {
CONTROL.reEnterRoom();
} else {
//上报客户端
if (w$1.controlObj && w$1.controlObj.loginFailed) {
w$1.controlObj.loginFailed();
} // channel_join 信道连接 进入房间失败
ENTRY.recordLogToFile('info', 'channel reenter failed');
}
},
//重新连接并进入房间
reEnterRoom: function reEnterRoom() {
CONTROL.reenterReset();
if (CONTROL.enterSuccessed) {
CONTROL.isReconnect = true;
}
CONTROL.connecttimeCount++;
CONTROL.startEnter();
},
//连接超时检查
checkConnectTimeout: function checkConnectTimeout() {
CONTROL.stopCheckConnectTimer();
if (!CONTROL.isConnect) {
ENTRY.recordLogToFile('info', 'control:check connect failed,reenter');
CONTROL.checkAndReEnter();
}
},
//处理连接成功的事件
dealConnectSuccess: function dealConnectSuccess() {
ENTRY.recordLogToFile('info', 'control:connect success'); //没有执行过登录操作
if (!this.enterInit) {
ENTRY.recordLogToFile('error', 'control:recve connect,not init yet!');
return;
}
this.isConnect = true; //发送验证
this.sendAuthenMsg(); //回调 authenticated
//上报客户端
if (w$1.controlObj && controlObj.connectSuccess) {
controlObj.connectSuccess();
}
},
//处理断开连接事件
dealDisconnect: function dealDisconnect() {
ENTRY.recordLogToFile('info', 'control:channel disconnect');
if (!CONTROL.enterInit) {
ENTRY.recordLogToFile('info', 'control:recve disconnect,already logout');
return;
}
try {
CONTROL.displayLogMsg('control: disconnect');
CONTROL.isConnect = false;
CONTROL.isInRoom = false;
if (CONTROL.enterSuccessed) {
//自己掉线通知
if (w$1.controlObj && controlObj.disconnect) {
controlObj.disconnect();
}
CONTROL.dealChannelMsg({
type: 'channel_disconnect',
data: {
message: 'Channel disconnect'
}
});
}
} catch (e) {}
},
//处理授权失败
dealAuthorizeFailed: function dealAuthorizeFailed() {
try {
if (CONTROL.enterSuccessed) {
//进入房间成功过,但掉线重连时,验证授权失败了
ENTRY.recordLogToFile('info', 'control:authenticated failed when reconect');
if (CONTROL.authorizefailedcount < 8) {
ENTRY.recordLogToFile('error', 'control:authenticated failed socketConnect');
CONTROL.socketConnect();
}
} else {
//尚未进入房间成功,且授权失败了
ENTRY.recordLogToFile('error', 'control:authenticated failed when connect first time');
CONTROL.checkAndReEnter();
}
++CONTROL.authorizefailedcount;
} catch (e) {
ENTRY.recordException(e);
}
},
//处理登录消息
dealJoinMsgAck: function dealJoinMsgAck(msgobj) {
//{'code':0,'message':'join ok'}
if (!msgobj) {
return;
}
if (msgobj.code == 0) {
if (!this.enterSuccessed) {
CONTROL.otherChannelEnter(); //其它通道进入房间,免身份验证
}
this.stopCheckJoinInTimer();
if (!this.isInRoom) {
if (this.enterSuccessed) {
CONTROL.dealReconnectSuccess();
this.displayLogMsg('control: reenter room success'); //重新登录成功
ENTRY.recordLogToFile('info', 'reenter room success');
CONTROL.dealChannelMsg({
type: 'channel_reconnect',
data: {
message: 'Channel reconnect'
}
}); //如果之前登入过,且现在没在房间内,代表当次连接为断线重连,重连成功须重新发送音视频 join 消息
channelClient.reJoin();
} else {
//请求历史消息
this.getHistoryList();
this.displayLogMsg('control: enter room success'); //已进入房间的话就不要提示了
ENTRY.recordLogToFile('info', 'control: enter room success');
}
}
this.isInRoom = true;
this.enterSuccessed = true; //设置进房间已经成功过了
if (w$1.controlObj && w$1.controlObj.loginResponse) {
w$1.controlObj.loginResponse();
} //测试添加
//this.getOnlineList();
//在线人数
this.notifyMembernumChanged(msgobj.data);
CONTROL.timedeviation = msgobj.data.unixtime - new Date().getTime();
} else {
this.checkAndReEnter();
}
},
//其它通道进行连接
otherChannelEnter: function otherChannelEnter() {
try {
if (ENTRY.channeltype == 0) {
if (w$1.CHAT) {
w$1.CHAT.enterRoom();
}
}
} catch (e) {
ENTRY.recordException(e);
}
},
//登录前,初始化参数
enterInInitparas: function enterInInitparas() {
try {
var config = ENTRY.getConfigInfo();
var roominfo = ENTRY.getRoomInfo();
if (!config || !roominfo) {
ENTRY.recordLogToFile('info', 'enter room:room info is empty or user info is empty');
return false;
}
this.address = config.address + 'control'; //兼容一下老的客户端,老的客户端使用的是url编码
// if(config.hasOwnProperty('encodetype') && config.encodetype=='base64'){
// var b64decoder = new w.Base64();
// this.username = b64decoder.decode(config.user.username);
// this.avatar = b64decoder.decode(config.user.avatar);
// ENTRY.recordLogToFile('i','control enterInInitparas:use base64 decode:'+this.username);
// }
// else{
this.username = decodeURIComponent(config.user.username);
this.avatar = decodeURIComponent(config.user.avatar);
ENTRY.recordLogToFile('info', 'control enterInInitparas:use url decode:' + this.username); // }
this.userid = config.user.userid;
if (config.user.hasOwnProperty('token')) {
this.token = config.user.token;
}
if (config.user.hasOwnProperty('code')) {
this.code = config.user.code;
}
this.role = config.user.role;
this.language = config.language;
this.roomid = roominfo.roomid;
this.classmode = roominfo.classmode;
this.playmode = roominfo.playmode;
this.institutionid = roominfo.institutionid;
this.conn_origin = roominfo.conn_origin;
if (this.roomid == '' || this.userid == '') {
ENTRY.recordLogToFile('error', 'enter room:roomid is empty or userid is empty');
return false;
}
this.isReconnect = false; //重连标志,重连一次就算重连了
this.connecttimeCount = 0;
this.initCacheList();
} catch (e) {
ENTRY.recordException(e);
return false;
}
return true;
},
//重启进入教室过程前,对某些变量进行重置
reenterReset: function reenterReset() {
this.isInRoom = false;
this.isConnect = false;
if (this.userstate == null) {
this.userstate = new Array();
} else {
this.userstate.length = 0;
}
if (this.socket) {
this.socket.disconnect();
}
this.stopAllTimeoutTimer();
},
leaveRoomReset: function leaveRoomReset() {
this.reenterReset(); //停一下timer
this.stopAllTimeoutTimer();
this.unInitCacheList();
this.connecttimeCount = 0;
this.enterInit = false;
this.enterSuccessed = false;
this.socket = null;
},
//启动 连接超时检查
startCheckConnectTimer: function startCheckConnectTimer() {
this.connecttimeouttimer = window.setTimeout(CONTROL.checkConnectTimeout, CONTROL.connecttimeout);
CONTROL.connecttimeout = 30000;
},
//关闭 连接超时检查
stopCheckConnectTimer: function stopCheckConnectTimer() {
if (this.connecttimeouttimer) {
w$1.clearTimeout(this.connecttimeouttimer);
this.connecttimeouttimer = null;
}
},
//关闭 延迟join的timer
stopDelayJoinTimer: function stopDelayJoinTimer() {
if (CONTROL.joindelaytimer != null) {
window.clearTimeout(CONTROL.joindelaytimer);
CONTROL.joindelaytimer = null;
}
},
//启动 进入房间超时的检查
startCheckJoinInTimer: function startCheckJoinInTimer() {
this.jointimeouttimer = window.setTimeout(CONTROL.checkAndReEnter, CONTROL.connecttimeout);
},
//关闭 进入房间超时的检查
stopCheckJoinInTimer: function stopCheckJoinInTimer() {
if (this.jointimeouttimer) {
w$1.clearTimeout(this.jointimeouttimer);
this.jointimeouttimer = null;
}
},
//停止所有计时器
stopAllTimeoutTimer: function stopAllTimeoutTimer() {
this.stopCheckConnectTimer();
this.stopCheckJoinInTimer();
this.stopDelayJoinTimer();
},
displayLogMsg: function displayLogMsg(msg) {
if (w$1.CHATDIS) {
w$1.CHATDIS.displayLogMsg(msg);
}
},
//////////////////////以上为进入房间/离开房间 过程的通用处理/////////////////////////////////////
//发送流控制消息 string string string string
sendStreamMsg: function sendStreamMsg(subtype, content, targetid, save) {
//subtype : stream / class(save)
var obj = {};
obj.index = this.streamIndex++; //int
obj.uuid = ENTRY.getMsgKey(obj.index); //string
obj.mtype = subtype; //消息子类型
obj.targetid = targetid;
obj.trace_id = "sdk_1.0_".concat(new Date().getTime().toString().padStart(16, '123456'));
obj.message = content;
obj.save = save;
if (this.isInRoom) {
this.sendStreamMsgInner(obj);
} else {
this.cachedSendMsg(obj);
}
},
//发送可以丢失的消息
sendUnimportantStreamMsg: function sendUnimportantStreamMsg(subtype, content, targetid, save) {
//subtype : stream / class(save)
if (!this.isInRoom || !this.socket) {
return;
}
var obj = {};
obj.index = this.normalMsgIndex++; //int 不关心
obj.uuid = ENTRY.getMsgKey(obj.index); //string
obj.mtype = 'lowquality'; //消息子类型
obj.targetid = targetid;
obj.message = content;
obj.save = save;
this.socket.emit('stream', obj, function (status) {});
},
sendStreamMsgInner: function sendStreamMsgInner(obj) {
try {
var logmsg = 'send:' + obj.index;
logmsg += ',msg:';
logmsg += obj.message;
logmsg += ',uuid:';
logmsg += obj.uuid;
ENTRY.recordLogToFile('info', logmsg);
this.addToCheckList(obj);
this.socket.emit('stream', obj, function (status) {
if (status.code == 0) {
CONTROL.setSendSuccess(obj); //提示开始上课/结束上课
var curtime = new Date();
var timeseconds = curtime.getTime() + CONTROL.timedeviation;
var timestr = '';
timestr += timeseconds;
obj.unixtime = timestr;
CONTROL.displayClassOperate(obj);
}
var logmsg = 'control:send ack:' + obj.index;
ENTRY.recordLogToFile('info', logmsg);
});
} catch (e) {
ENTRY.recordException(e);
} //CONTROL.displayLogMsg(logmsg1);//删掉
},
//发送普通控制消息 string string string 暂时没有使用此事件
sendCommonMsg: function sendCommonMsg(subtype, content, targetid) {
//subtype:netstate
var obj = {};
obj.index = ENTRY.getMsgIndex(); //int
obj.mtype = subtype; //消息子类型
obj.targetid = targetid;
obj.message = content; //obj.save = save;//暂时没有save字段
this.socket.emit('common', obj, function (status) {});
},
//发送可以丢失的消息
sendLowQualityMsg: function sendLowQualityMsg(subtype, content, targetid) {
//subtype : stream / class(save)
if (!this.isInRoom || !this.socket) {
return;
}
var obj = {};
obj.index = this.normalMsgIndex++; //int 不关心
obj.uuid = ENTRY.getMsgKey(obj.index); //string
obj.mtype = subtype; //消息子类型
obj.targetid = targetid;
obj.message = content;
this.socket.emit('netstate', obj, function (status) {});
},
//获取当前在线列表 老师身份的才有效
getOnlineList: function getOnlineList() {
try {
this.socket.emit('listeners', {}, function (status) {
if (status.code != 0) {
//if(w.onlinemeber && w.onlinemeber.onRecvMemberDataFinished){
// w.onlinemeber.onRecvMemberDataFinished();
//}
ENTRY.recordLogToFile('error', 'get online list failed!');
}
});
} catch (e) {
ENTRY.recordException(e);
}
},
//请求stream历史消息
getHistoryList: function getHistoryList() {
try {
ENTRY.recordLogToFile('info', 'emit history_message!');
this.socket.emit('history_message', {}, function (para) {
ENTRY.recordLogToFile('info', 'history_message ret!');
if (para.code == 0) {
try {
//只处理开始上课、结束上课消息
var length = para.data.history_list.length;
for (var i = 0; i < length; ++i) {
var msgobj = para.data.history_list[i];
CONTROL.displayClassOperate(msgobj);
} //end of for
//通知学生端 最后一条课程状态消息
if (length > 0 && CONTROL.role == '2' && w$1.controlObj && w$1.controlObj.onReciveStream) {
for (var j = length - 1; j >= 0; j--) {
var msgobjclass = para.data.history_list[j];
if (msgobjclass.mtype == 'class') {
w$1.controlObj.onReciveStream(msgobjclass.mtype, msgobjclass.message);
break;
}
}
} //通知老师端,开始上课和结束上课有没有
var startclassExist = 'false';
var endclassExist = 'false';
if (w$1.controlObj && w$1.controlObj.onKeyMessageSent) {
for (var i = 0; i < length; i++) {
var msgobjclass = para.data.history_list[i];
if (msgobjclass.mtype == 'class') {
var cmdobj = JSON.parse(msgobjclass.message);
if (cmdobj && cmdobj.cmdtype == 'start') {
startclassExist = 'true';
}
if (cmdobj && cmdobj.cmdtype == 'end') {
endclassExist = 'true';
}
}
}
w$1.controlObj.onKeyMessageSent('startClass', startclassExist);
w$1.controlObj.onKeyMessageSent('endClass', endclassExist);
} //end of if
} catch (e) {
ENTRY.recordException(e);
}
} //end of if
});
} catch (e) {
ENTRY.recordException(e);
}
},
//监听消息
OnUserDefineMsg: function OnUserDefineMsg(msg) {
//进入教室成功
this.socket.on('join_room', function (obj) {
CONTROL.dealJoinMsg(obj);
}); //离开教室
this.socket.on('leave_room', function (obj) {
CONTROL.dealleaveRoomMsg(obj);
}); //监测网络状态
this.socket.on('pong', function (time) {
if (w$1.controlObj && controlObj.onPong) {
controlObj.onPong('' + time);
}
}); //接收流控制消息
this.socket.on('stream', function (obj) {
CONTROL.dealStreamMsg(obj, false);
});
this.socket.on('netstate', function (obj) {
CONTROL.dealNetStateMsg(obj);
});
this.socket.on('award', function (obj) {
CONTROL.dealAwardMsg(obj); //奖励通知
});
this.socket.on('streamservicetype', function (obj) {
CONTROL.dealStreamServiceTypeMsg(obj); //切换SDK通知
});
this.socket.on('force_exit', function (obj) {
//被踢通知
CONTROL.displayLogMsg('force_exit'); //删掉
CONTROL.dealForceExit(obj);
});
this.socket.on('room_expired', function (obj) {
//房间过期
CONTROL.dealRoomExpired(obj);
}); //接收监课状态消息
this.socket.on('supervisor', function (obj) {
CONTROL.dealSupervisorMsg(obj);
}); //收到在线列表消息
this.socket.on('listeners', function (obj) {
if (w$1.onlinemeber && w$1.onlinemeber.onRecvOnlinMemberData) {
var objstr = JSON.stringify(obj);
w$1.onlinemeber.onRecvOnlinMemberData(objstr);
}
}); //掉线通知
this.socket.on('offline', function (obj) {
CONTROL.dealOfflineMsg(obj);
CONTROL.isOffline = true; //channel_disconnect 信道离线,退出房间
CONTROL.dealChannelMsg({
type: 'user_disconnect',
data: {
userId: +obj.userid,
userName: obj.username,
role: obj.role
}
});
ENTRY.recordLogToFile('info', "sdk notice user_disconnect role: ".concat(obj.role, " userId : ").concat(obj.userid, " userName: ").concat(obj.username));
ENTRY.recordLogToFile('info', "offline ".concat(JSON.stringify(obj)));
}); //收到异常状态消息
this.socket.on('unusual', function (obj) {
if (obj && w$1.controlObj && w$1.controlObj.onRecvUnusualNOtify) {
w$1.controlObj.onRecvUnusualNOtify(JSON.stringify(obj));
}
}); //供参考,实测并不完全符合:客户端socket发起连接时的顺序。当第一次连接时,事件触发顺序为:connecting->connect;
// 当失去连接时,事件触发顺序为:disconnect->reconnecting(可能进行多次)->connecting->reconnect->connect。
this.socket.on('reconnecting', function () {
CONTROL.displayLogMsg('control: reconnecting!');
}); //并不会回调这个
this.socket.on('connecting', function () {
CONTROL.displayLogMsg('control: connecting!');
}); //监听连接失败
this.socket.on('connect_failed', function (o) {
CONTROL.displayLogMsg('control:connectfailed');
try {
dataReport$2.joinRoomResult({
code: '3',
cloud_api_response: window.zby_sdk_cloud_data,
cloud_api_url: "".concat(getApiCloudBaseUrl(), "/rtccloud/class/init"),
chat_url: window.zby_sdk_cloud_data.chatUrl
});
} catch (e) {}
;
}); //目前没发现,什么情况下会回调这个
this.socket.on('error', function () {
CONTROL.displayLogMsg('control:soceket错误!');
}); //并不会回调这个:自动重连成功后,会调用connect
this.socket.on('reconnect', function () {
CONTROL.displayLogMsg('control:reconnect!');
}); //并不会回调这个
this.socket.on('reconnect_failed', function () {
CONTROL.displayLogMsg('control:reconnect_failed!');
});
},
//处理登录消息
dealJoinMsg: function dealJoinMsg(msgobj) {
if (w$1.onlinemeber && w$1.onlinemeber.onRecvMemberStateChange) {
try {
var objuser = {};
objuser.online = 'login';
objuser.username = msgobj.username;
objuser.userid = msgobj.userid;
objuser.role = ENTRY.translateRoleBack(msgobj.role);
if (msgobj.hasOwnProperty('avatar')) {
objuser.avatar = msgobj.avatar;
}
if (msgobj.hasOwnProperty('device')) {
objuser.device = msgobj.device;
}
var jsonstr = JSON.stringify(objuser);
w$1.onlinemeber.onRecvMemberStateChange(jsonstr);
} catch (e) {
ENTRY.recordException(e);
}
}
var logmsg = 'control:收到join_room:' + msgobj.userid;
ENTRY.recordLogToFile('info', logmsg);
this.displayLogMsg(logmsg);
CONTROL.notifyMembernumChanged(msgobj);
},
//处理退出登录消息
dealleaveRoomMsg: function dealleaveRoomMsg(msgobj) {
try {
//{'unixtime':'32435435','userid':'username','username':'Falcon','role':'1'}
var logmsg = 'control:收到leaveRoom_message:';
logmsg += JSON.stringify(msgobj);
CONTROL.displayLogMsg(logmsg);
ENTRY.recordLogToFile('info', logmsg);
var isme = ENTRY.isMyMsg(msgobj);
if (isme) {
//这个应该不会发生
ENTRY.recordLogToFile('error', 'receive self leaveroom ack');
} else {
if (w$1.onlinemeber && w$1.onlinemeber.onRecvMemberStateChange) {
var objuser = {};
objuser.online = 'logout';
objuser.userid = msgobj.userid;
objuser.role = ENTRY.translateRoleBack(msgobj.role);
var jsonstr = JSON.stringify(objuser);
w$1.onlinemeber.onRecvMemberStateChange(jsonstr);
}
}
} catch (e) {
ENTRY.recordException(e);
}
CONTROL.notifyMembernumChanged(msgobj);
},
notifyMembernumChanged: function notifyMembernumChanged(obj) {
try {
//非一对一模式下,需要通知应用层成员数量
if (obj.hasOwnProperty('onlinecounts')) {
if (w$1.controlObj && controlObj.onMemberChanged && ENTRY.isLargeClass()) {
controlObj.onMemberChanged(obj.onlinecounts);
}
var logmsg = 'control:online count:';
logmsg += obj.onlinecounts;
this.displayLogMsg(logmsg);
}
} catch (e) {
ENTRY.recordException(e);
}
},
//处理断开连接消息
dealOfflineMsg: function dealOfflineMsg(msgobj) {
try {
var logmsg = 'control:收到disconnect_message';
logmsg += JSON.stringify(msgobj);
CONTROL.displayLogMsg(logmsg);
ENTRY.recordLogToFile('info', logmsg);
var isme = ENTRY.isMyMsg(msgobj);
if (!isme) {
if (w$1.onlinemeber && w$1.onlinemeber.onRecvMemberStateChange) {
var objuser = {};
objuser.online = 'offline';
objuser.userid = msgobj.userid;
objuser.role = ENTRY.translateRoleBack(msgobj.role);
var jsonstr = JSON.stringify(objuser);
w$1.onlinemeber.onRecvMemberStateChange(jsonstr);
}
CONTROL.notifyMembernumChanged(msgobj);
}
} catch (e) {
ENTRY.recordException(e);
}
},
//处理流控制消息
dealStreamMsg: function dealStreamMsg(obj, history) {
if (!obj) {
return;
}
if (CONTROL.judgeAlreadyRecv(obj, history)) {
var logmsg = 'recv repeat msg:' + JSON.stringify(obj);
ENTRY.recordLogToFile('info', logmsg);
CONTROL.displayLogMsg(logmsg); //删除
return;
} //如果现在正在请求缓存队列,先缓存收到的正常消息
if (this.cacheReqSend) {
obj.history = history;
if (obj.hasOwnProperty('cache') && obj.cache == 1) {
this.recvCacheList.push(obj);
var logmsg1 = 'recv:cache msg' + JSON.stringify(obj);
ENTRY.recordLogToFile('info', logmsg1);
CONTROL.displayLogMsg(logmsg1); //删除
} else {
this.recvTmpList.push(obj);
var logmsg2 = 'recv:cache normal msg' + JSON.stringify(obj);
ENTRY.recordLogToFile('info', logmsg2);
CONTROL.displayLogMsg(logmsg2); //删除
}
return;
}
CONTROL.dealStreamMsgInner(obj, history);
this.checkToIntException(obj);
},
//消息去重处理
judgeAlreadyRecv: function judgeAlreadyRecv(obj, history) {
//缓存队列
if (!history && obj.hasOwnProperty('uuid') && obj.uuid != '') {
if (this.recvmsgKeys.indexOf(obj.uuid) != -1) {
return true;
} else {
this.recvmsgKeys.push(obj.uuid);
var timenow = new Date();
this.recvmsgTimes.push(timenow); //var logmsg = 'recv msg,time now:'+timenow.getTime();
//CONTROL.displayLogMsg(logmsg);
}
CONTROL.reduceRecvMsgList();
}
return false;
},
//缩减接收消息列表的长度,防止超长
reduceRecvMsgList: function reduceRecvMsgList() {
try {
if (this.recvmsgTimes.length < 1000) {
return;
}
var timenow = new Date();
var timeex = 3 * 60 * 1000;
var index = 0;
for (index = 0; index < this.recvmsgTimes.length; ++index) {
if (timenow.getTime() - this.recvmsgTimes[index].getTime() < timeex) {
break;
}
}
if (index >= 1) {
this.recvmsgTimes.splice(0, index);
this.recvmsgKeys.splice(0, index); //var logmsg = 'reduce key list: index';
//logmsg += index;
//logmsg += ',left:';
//logmsg += this.recvmsgKeys.length;
//CONTROL.displayLogMsg(logmsg);//删除
}
} catch (e) {
ENTRY.recordException(e);
}
},
//处理流控制消息
dealStreamMsgInner: function dealStreamMsgInner(obj, history) {
try {
////测试丢消息、保序和时延
//if(!history){
// this.checkechobacktest(obj);
//}
//var logmsg1 = 'deal stream:'+obj.index + ' '+obj.userid;
if (obj.mtype != 'lowquality') {
var logmsg1 = 'recv:' + obj.index;
logmsg1 += ',msg:';
logmsg1 += obj.message;
logmsg1 += ',uuid:';
logmsg1 += obj.uuid;
logmsg1 += ',utime:';
logmsg1 += obj.unixtime;
ENTRY.recordLogToFile('info', logmsg1);
}
/*******专用处理信道中流信息相关功能 start ********/
if (!history) {
var data = JSON.parse(obj.message); // window.zby_sdk_init_params为用户初始化sdk传递的基础参数
var baseInfo = {
roomId: window.zby_sdk_init_params.roomId,
userId: CONTROL.userid,
userName: CONTROL.username,
institutionId: window.zby_sdk_init_params.institutionId,
targetId: data.actorId,
role: CONTROL.role === '1' ? 'teacher' : 'student'
};
dealReceiveStreamMsg(data, baseInfo);
}
/*******专用处理信道中流信息相关功能 end ********/
if (!history && w$1.controlObj && controlObj.onReciveStream) {
controlObj.onReciveStream(obj.mtype, obj.message);
} //提示上下课
CONTROL.displayClassOperate(obj);
if (w$1.CHATEST && w$1.CHATEST.checkorder == 1) {
CONTROL.checkOrder(obj);
}
} catch (e) {
ENTRY.recordException(e);
}
},
//处理监课消息
dealSupervisorMsg: function dealSupervisorMsg(obj) {
if (!obj) {
return;
}
try {
if (obj.mtype == 'help_state') {
//var message = obj.message;
var helpobj = obj.message;
if (this.roomid != helpobj.lessonid || this.userid != helpobj.userid) {
return;
} //求助,机构后台处理后,推送此消息,收到后上报客户端
if (w$1.controlObj && w$1.controlObj.onSupervisorState) {
var objformat = {};
objformat.mtype = 'help_state';
objformat.status = helpobj.supervisorStatus;
objformat.resolve = helpobj.supervisorResolve;
w$1.controlObj.onSupervisorState(JSON.stringify(objformat));
}
}
} catch (e) {
ENTRY.recordException(e);
}
},
//处理网络状态消息
dealNetStateMsg: function dealNetStateMsg(obj) {
if (obj && w$1.controlObj && w$1.controlObj.onReciveLowQualityMsg) {
w$1.controlObj.onReciveLowQualityMsg(obj.mtype, obj.message);
}
},
//处理奖励消息
dealAwardMsg: function dealAwardMsg(obj) {
if (obj && w$1.controlObj && w$1.controlObj.onServerPushMessage) {
w$1.controlObj.onServerPushMessage('award', JSON.stringify(obj.message));
}
},
//处理切换SDK消息
dealStreamServiceTypeMsg: function dealStreamServiceTypeMsg(obj) {
console.log('%c接收到信道广播的切换SDK消息,切换到:' + obj.message.data, 'color:blue');
ENTRY.recordLogToFile('info', 'channel msg: streamservicetype, change sdk to ' + obj.message.data);
var data = obj.message;
if (window.current_sdk_type !== data.data) {
zbysdk$1.changeSDK();
} else {
console.log('%c接收到信道广播目标SDK和本地一致,不切换:' + obj.message.data, 'color:blue');
ENTRY.recordLogToFile('info', 'channel target sdk type is the same as the local sdk ,will not change sdk to :' + obj.message.data);
}
},
//处理被踢消息
dealForceExit: function dealForceExit(obj) {
if (ENTRY.istestFromhtml == 1) {
CONTROL.displayLogMsg('您已被踢');
ENTRY.recordLogToFile('info', 'deal with force exit');
CONTROL.leaveRoom();
if (w$1.CHAT && ENTRY.channeltype == 0) {
w$1.CHAT.leaveRoom();
}
}
if (w$1.controlObj && w$1.controlObj.onServerPushMessage) {
w$1.controlObj.onServerPushMessage('force_exit', '');
}
},
//处理房间过期消息
dealRoomExpired: function dealRoomExpired(obj) {
if (w$1.controlObj && w$1.controlObj.onServerPushMessage) {
w$1.controlObj.onServerPushMessage('room_expired', '');
}
},
//处理断线后重连
dealReconnectSuccess: function dealReconnectSuccess() {
ENTRY.recordLogToFile('info', 'deal reconnect success');
CONTROL.displayLogMsg('deal reconnect success'); //删掉
CONTROL.resendMessages();
CONTROL.requestCachedMsg();
},
//断线重连后,请求缓存队列
requestCachedMsg: function requestCachedMsg() {
var uuid = '';
if (this.recvmsgKeys.length > 0) {
uuid = this.recvmsgKeys[this.recvmsgKeys.length - 1];
}
this.cacheReqSend = true;
var obj = {};
obj.uuid = uuid;
var logmsg = 'requestCachedMsg:' + obj.uuid;
CONTROL.displayLogMsg(logmsg); //删除
ENTRY.recordLogToFile('info', logmsg);
this.socket.emit('cache_message', obj, function (para) {
logmsg = 'requestCachedMsg: ack ' + para.code;
CONTROL.displayLogMsg(logmsg); //删除
ENTRY.recordLogToFile('info', logmsg);
CONTROL.cacheReqSend = false;
if (para.code == 0) {
CONTROL.dealRecvCache();
} else {
ENTRY.recordLogToFile('error', 'request cache msg ret failed!');
}
});
},
//处理缓存的收到但未处理的消息
dealRecvCache: function dealRecvCache() {
var reportobj = {};
reportobj.count = this.recvCacheList.length;
for (var i = 0; i < this.recvCacheList.length; ++i) {
CONTROL.dealStreamMsgInner(this.recvCacheList[i], this.recvCacheList[i].history);
}
ENTRY.recordLogToFile('info', 'dealRecvCache:server cached num:' + this.recvCacheList.length);
this.recvCacheList.length = 0;
for (var j = 0; j < this.recvTmpList.length; ++j) {
CONTROL.dealStreamMsgInner(this.recvTmpList[j], false);
}
ENTRY.recordLogToFile('info', 'dealRecvCache:local cached num:' + this.recvTmpList.length);
this.recvTmpList.length = 0; //上报积压消息情况
if (w$1.controlObj && w$1.controlObj.onSelfHealthReport) {
w$1.controlObj.onSelfHealthReport('servercachedcount', JSON.stringify(reportobj));
}
},
//保序验证
checkOrder: function checkOrder(obj) {
//CONTROL.displayLogMsg('recv:'+obj.index);
if (CONTROL.lastRecvMsgId == null) {
CONTROL.lastRecvMsgId = new Array();
}
++CONTROL.testrecvcount;
var curtime = new Date();
CONTROL.displayLogMsg('recv:' + curtime.toTimeString() + ',' + CONTROL.testrecvcount);
var userFind = false;
for (var i = 0; i < CONTROL.lastRecvMsgId.length; ++i) {
if (CONTROL.lastRecvMsgId[i].userid == obj.userid) {
userFind = true;
if (CONTROL.lastRecvMsgId[i].index > obj.index) {
CONTROL.displayLogMsg('control msg disorder,userid:' + obj.userid + ',' + obj.index);
if (w$1.CHATEST) {
w$1.CHATEST.setOrderCheckResult('message disorder');
}
}
if (CONTROL.lastRecvMsgId[i].index + 1 != obj.index) {
CONTROL.displayLogMsg('control msg lost,userid:' + obj.userid + ',' + CONTROL.lastRecvMsgId[i].index + ' to ' + obj.index);
if (w$1.CHATEST) {
w$1.CHATEST.setOrderCheckResult('message lost');
}
}
if (obj.index % 30 == 0) {
CONTROL.displayLogMsg('recv,useri:' + obj.userid + ',' + obj.index);
}
CONTROL.lastRecvMsgId[i].index = obj.index;
break;
}
}
if (!userFind) {
var tmpobj = {};
tmpobj.index = obj.index;
tmpobj.userid = obj.userid;
CONTROL.lastRecvMsgId.push(tmpobj);
}
},
//初始化缓存队列相关
initCacheList: function initCacheList() {
try {
this.streamIndex = 0;
this.normalMsgIndex = 0;
if (!this.sendCheckList) {
this.sendCheckList = new Array();
} else {
this.sendCheckList.length = 0;
}
if (!this.sendCacheList) {
this.sendCacheList = new Array();
} else {
this.sendCacheList.length = 0;
}
this.cacheReqSend = false;
if (!this.recvCacheList) {
this.recvCacheList = new Array();
} else {
this.recvCacheList.length = 0;
}
if (!this.recvTmpList) {
this.recvTmpList = new Array();
} else {
this.recvTmpList.length = 0;
}
if (!this.recvmsgKeys) {
this.recvmsgKeys = new Array();
} else {
this.recvmsgKeys.length = 0;
}
if (!this.recvmsgTimes) {
this.recvmsgTimes = new Array();
} else {
this.recvmsgTimes.length = 0;
}
if (!this.orderCheck) {
this.orderCheck = new Array();
} else {
this.orderCheck.length = 0;
}
if (!this.delaycheckList) {
this.delaycheckList = new Array();
} else {
this.delaycheckList.length = 0;
}
if (!this.delayList) {
this.delayList = new Array();
} else {
this.delayList.length = 0;
}
this.checkSendSucessTimer = w$1.setInterval(this.checkStreamMsgSendSuccess, this.checkInterval);
} catch (e) {
ENTRY.recordException(e);
}
},
//反初始化缓存队列相关
unInitCacheList: function unInitCacheList() {
this.streamIndex = 0;
this.normalMsgIndex = 0;
this.sendCacheList = null;
this.cacheReqSend = false;
this.recvCacheList = null;
this.recvTmpList = null;
this.recvmsgKeys = null;
this.recvmsgTimes = null;
this.orderCheck = null;
this.delaycheckList = null;
this.delayList = null;
if (this.checkSendSucessTimer) {
w$1.clearInterval(this.checkSendSucessTimer);
this.checkSendSucessTimer = null;
}
this.sendCheckList = null;
},
//缓存要发送的消息
cachedSendMsg: function cachedSendMsg(obj) {
try {
this.sendCacheList.push(obj);
} catch (e) {
ENTRY.recordException(e);
}
},
//添加到确认队列
addToCheckList: function addToCheckList(obj) {
try {
var checkobj = {};
checkobj.data = obj;
checkobj.time = new Date();
checkobj.success = false;
this.sendCheckList.push(checkobj);
} catch (e) {
ENTRY.recordException(e);
}
},
//收到确认
setSendSuccess: function setSendSuccess(obj) {
try {
for (var i = 0; i < CONTROL.sendCheckList.length; ++i) {
if (CONTROL.sendCheckList[i].data.index == obj.index) {
CONTROL.sendCheckList[i].success = true;
break;
}
} //缓存队列:清理
var length = CONTROL.sendCheckList.length;
while (length > 0 && CONTROL.sendCheckList[0].success) {
CONTROL.sendCheckList.splice(0, 1);
length = CONTROL.sendCheckList.length;
}
} catch (e) {
ENTRY.recordException(e);
}
},
//检查消息是否发送成功
checkStreamMsgSendSuccess: function checkStreamMsgSendSuccess() {
try {
var length = CONTROL.sendCheckList.length;
if (length > 0 && this.isInRoom) {
var curtime = new Date();
if (curtime.getTime() - CONTROL.sendCheckList[length - 1].time.getTime() > CONTROL.maxAckDelay) {
CONTROL.resendMessages(); ////todo 缓存队列过长的话,断开重新连接
if (length > 200) {
var logmsg01 = 'check message to much:' + length;
ENTRY.recordLogToFile('error', logmsg01);
}
var logmsg = 'resend messages withou ack:' + length;
ENTRY.recordLogToFile('info', logmsg);
CONTROL.displayLogMsg(logmsg); //删掉
ENTRY.reportHintInfo(logmsg);
}
}
} catch (e) {
ENTRY.recordException(e);
}
},
//重新发送缓存的消息
resendMessages: function resendMessages() {
try {
var reportobj = {};
var length = CONTROL.sendCheckList.length;
reportobj.unconfirmcount = length;
if (length > 0) {
var sendlist = CONTROL.sendCheckList.slice(0);
CONTROL.sendCheckList.length = 0;
for (var i = 0; i < sendlist.length; ++i) {
this.sendStreamMsgInner(sendlist[i].data);
}
}
var cachedlenth = this.sendCacheList.length;
reportobj.count = length + this.sendCacheList.length;
for (var i = 0; i < this.sendCacheList.length; ++i) {
this.sendStreamMsgInner(this.sendCacheList[i]);
}
this.sendCacheList.length = 0; //上报积压消息情况
if (w$1.controlObj && w$1.controlObj.onSelfHealthReport) {
w$1.controlObj.onSelfHealthReport('resendcount', JSON.stringify(reportobj));
}
var logmsg = 'resent message,checklist:';
logmsg += length;
logmsg += ',cached:';
logmsg += cachedlenth;
ENTRY.recordLogToFile('info', logmsg);
CONTROL.displayLogMsg(logmsg); //删掉
} catch (e) {
ENTRY.recordException(e);
}
},
//显示开始上课/结束上课消息
displayClassOperate: function displayClassOperate(msgobj) {
try {
if (msgobj.mtype == 'class') {
var classobj = JSON.parse(msgobj.message);
if (!msgobj.hasOwnProperty('unixtime')) {
return;
} //只用control通道的话,需要通知chat通道去显示,否则直接在聊天页面显示
if (ENTRY.channeltype == 1) {
if (w$1.controlObj && w$1.controlObj.onDisplayClassOperate) {
w$1.controlObj.onDisplayClassOperate(classobj.cmdtype, msgobj.unixtime);
}
} else {
if (w$1.CHATDIS) {
w$1.CHATDIS.disClassStatusHint(classobj.cmdtype, msgobj.unixtime);
}
}
} //end of if
} catch (e) {
ENTRY.recordException(e);
}
},
//检查异常
checkToIntException: function checkToIntException(obj) {
try {
var uttime = obj.unixtime.substr(0, obj.unixtime.length - 3);
var timeint = parseInt(uttime); //todo 检查到底怎么回事
var timeint = ENTRY.parseIntMySimple(uttime);
if (!(timeint.toString() == uttime)) {
ENTRY.recordLogToFile('error', 'parseint error');
CONTROL.displayLogMsg('parseint error'); //删掉
}
} catch (e) {}
},
//发送流控制消息 string string string string
sendStreamMsgTest: function sendStreamMsgTest(subtype, content, targetid, save) {
//subtype : stream / class(save)
var curtime = new Date();
var obj = {};
obj.index = this.streamIndex++; //int
obj.uuid = ENTRY.getMsgKey(obj.index); //string
obj.mtype = subtype; //消息子类型
obj.targetid = targetid;
obj.message = content;
obj.save = save;
obj.echotest = 1;
obj.sendtime = curtime.getTime();
obj.checkindex = obj.index;
var objtest = {};
objtest.checkindex = obj.index;
objtest.sendtime = obj.sendtime;
this.delaycheckList.push(objtest);
if (this.isInRoom) {
this.sendStreamMsgInner(obj);
} else {
this.cachedSendMsg(obj);
}
},
checkechobacktest: function checkechobacktest(obj) {
//subtype : stream / class(save)
var curtime = new Date();
var index = 0;
if (!obj.hasOwnProperty('echotest')) {
return;
}
for (index = 0; index < this.delaycheckList.length; ++index) {
if (obj.checkindex > this.delaycheckList[index].checkindex) {
break;
}
if (obj.checkindex == this.delaycheckList[index].checkindex) {
;
}
}
},
getPingPongArr: function getPingPongArr() {
setTimeout(function () {
CONTROL.pingPongArr = [];
}, 1);
return CONTROL.pingPongArr;
}
};
// })();
var interactWithChannel = {
control: CONTROL,
entry: ENTRY
};
function sendChannelMsgInner(data) {
var target = data.target;
if (target) {
delete data.target;
interactWithChannel.control.sendStreamMsg('stream', JSON.stringify(data), target);
} else {
interactWithChannel.control.sendStreamMsg('stream', JSON.stringify(data));
}
}
var zbyChannelObj = {
joinRoom: function joinRoom(args, cb) {
try {
//设置信道基础参数
interactWithChannel.entry.setConfigInfo(JSON.stringify({
'address': args.chatUrl,
'user': {
'userid': args.userId,
'username': args.userName || '',
'token': args.channelToken,
'role': args.role,
'avatar': '',
'code': '1234'
},
'language': 0,
'logmode': 0,
'channeltype': 1
}));
} catch (error) {
window.zby_sdk_init_status_for_data_report = false;
try {
dataReport.joinRoomResult({
code: '2',
// cloud_api_response: JSON.stringify(window.zby_sdk_cloud_data),
cloud_api_response: window.zby_sdk_cloud_data,
cloud_api_url: "".concat(getApiCloudBaseUrl$1(), "/rtccloud/class/init"),
chat_url: args.chatUrl
});
} catch (e) {}
;
}
interactWithChannel.entry.enterRoom(JSON.stringify({
//向老客户端兼容,拼接institutionId,信道进房间使用拼接后的roomid
'roomid': util.getConfId(args.institutionId, args.roomId),
'classmode': 4,
'playmode': 1,
//1=正常上课;2=回放
'institutionid': args.institutionId,
//51连接信道所需,区分连接来源
'conn_origin': '51plan'
}), cb);
channelClient.sendJoin(args);
},
leaveRoom: function leaveRoom() {
interactWithChannel.entry.leaveRoom();
},
sendChannelMsg: function sendChannelMsg(data, target) {
util.waitFlagToRun(function () {
return interactWithChannel.control.isInRoom;
}, sendChannelMsgInner, _objectSpread({}, data, {
target: target
}));
}
};
function DoubleLinkList() {
function DNode(data) {
this.data = data;
this.next = null;
this.prev = null;
}
this.head = null;
this.tail = null;
this.length = 0;
this.insert_head = function (data) {
var temp_node = new DNode(data);
if (this.head == null) {
this.head = temp_node;
this.tail = temp_node;
} else {
temp_node.next = this.head;
this.head.prev = temp_node;
this.head = temp_node;
}
this.length += 1;
return temp_node;
};
this.insert_tail = function (data) {
var node = new DNode(data);
if (this.tail == null) {
this.head = node;
this.tail = node;
} else {
node.prev = this.tail;
this.tail.next = node;
this.tail = node;
}
this.length += 1;
return node;
};
this.delete = function (node) {
if (node.prev != null && node.next != null) {
node.prev.next = node.next;
node.next.prev = node.prev;
} else if (node.prev != null) {
this.tail = node.prev;
this.tail.next = null;
} else if (node.next != null) {
this.head = node.next;
this.head.prev = null;
} else {
this.head = null;
this.tail = null;
}
this.length -= 1;
};
this.touch = function (node) {
if (node.prev != null && node.next != null) {
node.prev.next = node.next;
node.next.prev = node.prev;
} else if (node.prev != null) {
this.tail = node.prev;
this.tail.next = null;
} else if (node.next != null) {
this.head = node.next;
this.head.prev = null;
} else {
this.head = null;
this.tail = null;
}
node.prev = null;
node.next = null;
if (this.tail == null) {
this.head = node;
this.tail = node;
} else {
node.prev = this.tail;
this.tail.next = node;
this.tail = node;
}
};
this.getLength = function () {
return this.length;
};
this.getHead = function () {
return this.head;
};
this.getTail = function () {
return this.tail;
};
}
function LatestQueue() {
this.latestDList = new DoubleLinkList();
this.latestDict = {};
function LatestNode(msgId, timestamp) {
this.msgId = msgId;
this.timestamp = timestamp;
}
this.insert = function (msgId, timestamp) {
if (this.latestDict[msgId]) {
return;
}
var latestNode = new LatestNode(msgId, timestamp);
this.latestDList.insert_tail(latestNode);
this.latestDict[msgId] = latestNode;
};
this.isRepeat = function (msgId) {
return !!this.latestDict[msgId];
};
this.delete = function (latestInterval, maxDeleteNum) {
var tempDNode = this.latestDList.getHead();
var currentDeleteNum = 0;
var currentTimeStamp = Date.now();
while (tempDNode != null) {
if (currentTimeStamp - tempDNode.data.timestamp >= latestInterval) {
delete this.latestDict[tempDNode.data.msgId];
this.latestDList.delete(tempDNode);
currentDeleteNum += 1;
}
if (currentDeleteNum >= maxDeleteNum) {
break;
}
tempDNode = tempDNode.next;
}
return currentDeleteNum;
};
this.getLength = function () {
return this.latestDList.getLength();
};
}
var polemoUtil = {
translateRole: function translateRole(role, roleNum) {
var roleArr = ['student', 'assist', 'teacher'];
var roleNumArr = ['1', '2', '4'];
if (roleArr.includes(role)) {
return roleNumArr[roleArr.indexOf(role)];
}
if (roleNumArr.includes(roleNum)) {
return roleArr[roleNumArr.indexOf(roleNum)];
}
},
/**
* 压缩 / 解压 json
*/
zip: function zip(data) {
if (data) {
var str = JSON.stringify(data);
var binaryString = pako.gzip(encodeURIComponent(str), {
to: 'string'
});
return btoa(binaryString);
}
},
unzip: function unzip(b64Data) {
var strData = atob(b64Data); // Convert binary string to character-number array
var charData = strData.split('').map(function (x) {
return x.charCodeAt(0);
}); // Turn number array into byte-array
var binData = new Uint8Array(charData); // // unzip
// const data = pako.inflate(binData)
var data = pako.inflate(binData, {
to: 'string'
}); // Convert gunzipped byteArray back to ascii string:
// strData = arrayBufferToString(data)
return decodeURIComponent(data);
},
arrayBufferToString: function arrayBufferToString(buffer) {
var bufView = new Uint16Array(buffer);
var length = bufView.length;
var result = '';
var addition = Math.pow(2, 16) - 1;
for (var i = 0; i < length; i += addition) {
if (i + addition > length) {
addition = length - i;
}
result += String.fromCharCode.apply(null, bufView.subarray(i, i + addition));
}
return result;
}
};
var _protocol = Protocol;
var _protobuf = Protobuf;
var _package = Protocol.Package;
var _message = Protocol.Message;
var _JS_WS_CLIENT_TYPE = 'js-websocket';
var _JS_WS_CLIENT_VERSION = '1.0.0'; // 重连间隔时间
var reconnectInterval = 10 * 1000;
var WEB_SOCKET_CLOSE = 'websocket_close';
var WEB_SOCKET_ERROR = 'websocket_error';
var WEB_SOCKET_TIMEOUT = 'websocket_timeout';
var PomeloClient =
/*#__PURE__*/
function () {
function PomeloClient() {
var _this2 = this;
_classCallCheck(this, PomeloClient);
this.handshakeBuffer = {
sys: {
type: _JS_WS_CLIENT_TYPE,
version: _JS_WS_CLIENT_VERSION
},
user: {}
};
this.pomeloData = {};
this.heartbeatInterval = 5000;
this.heartbeatTimeout = this.heartbeatInterval * 2;
this.nextHeartbeatTimeout = 0;
this.heartbeatId = null;
this.heartbeatTimeoutId = null;
this.handshakeCallback = null;
this.socket = null;
this.reqId = 0;
this.callBacks = {};
this.handlers = {};
this.routeMap = {};
this.initCallback = null; //自定义
this.pomeloConfig = {}; // 初始化参数
this.indexChannelInfo = {}; // 最后一条接收消息的uuid,用于消息恢复
this.lastReceiveMsgUuid = ''; // 是否正在获取缓存消息列表
this.isGettingCacheMsgList = false; // 重连定时器
this.reconnectTimer = null; // 是否在重连
this.isReconnectting = false; // 是否连接成功
this.isConnected = false; //是否在教室
this.isInRoom = false; // 是否链接成功过
this.hasConnected = false; // 当前域名重连次数
this.reconnectTimes = 0; // 乐乐ai语音功能,互t场景,为了不在重连
this.destoryed = false;
this.latestQueueObj = new LatestQueue();
this.deleteQueueTimer = setInterval(function () {
_this2.latestQueueObj.delete.call(_this2.latestQueueObj, 5000 * 4, 1000);
}, 1000);
this.failTimes = 0;
this.retryTimesWhenHeartBeatFailed = 100;
this.EventType = {
SOCKET_IO_ERROR: 'SOCKET_IO_ERROR'
};
} //初始化pomelo
_createClass(PomeloClient, [{
key: "initPomelo",
value: function initPomelo(pomeloConfig, callBack) {
this.pomeloConfig = pomeloConfig;
var port = pomeloConfig.port ? ":".concat(pomeloConfig.port) : '';
var url = "wss://".concat(pomeloConfig.host).concat(port);
this.handshakeBuffer.user = pomeloConfig.user; // this.initCallback = callBack;
// this.handshakeCallback = pomeloConfig.handshakeCallback;
defaultApi$1.writeLog("channel_log : ".concat(url, " ").concat(JSON.stringify(pomeloConfig), " initPomelo ......")); //开始连接websocket
return this.initWebSocket(url, pomeloConfig.serverType);
}
}, {
key: "joinRoom",
value: async function joinRoom(pomeloConfig, callBack) {
var _this3 = this;
this.callback = callBack;
this.isInRoom = true;
pomeloConfig.port = '443';
this.indexChannelInfo = pomeloConfig;
defaultApi$1.writeLog("channel_log :".concat(JSON.stringify(pomeloConfig), " the first step to join pomelo ......"));
try {
dataReport$2.pomeloJoinRoom({
pomeloConfig: pomeloConfig
});
} catch (e) {
defaultApi$1.writeLog("pomeloJoinRoom_error ".concat(JSON.stringify(e)));
}
var result = await this.connectGateServer(pomeloConfig).catch(function (err) {
// 连接失败,重新加入房间
defaultApi$1.writeLog("channel_log : reconnect joinRoom ......".concat(String(err)));
return _this3.reconnect();
});
return result;
}
}, {
key: "bindWsListener",
value: function bindWsListener() {
var _this4 = this;
// 连接成功后,处理监听事件
if (!this.socket) {
defaultApi$1.writeLog('channel_log : socket is null, cannot bind listeners......');
return;
}
this.socket.onopen = function (evt) {
defaultApi$1.writeLog("channel_log : ".concat(JSON.stringify(evt), " socket is onopen......"));
_this4.onSocketOpen(evt);
};
this.socket.onmessage = function (evt) {
_this4.onSocketMessage(evt);
};
this.socket.onerror = function (evt) {
defaultApi$1.writeLog("channel_log : ".concat(JSON.stringify(evt), " socket is onerror......"));
_this4.socket.onerror = null;
_this4.socket.onclose = null;
_this4.onSocketError(evt);
_this4.reconnect();
};
this.socket.onclose = function (evt) {
defaultApi$1.writeLog("channel_log : ".concat(JSON.stringify(evt), " socket is onclose......"));
_this4.onSocketClose(evt);
if (_this4.pomeloConfig.serverType == 'chat') {
_this4.reconnect();
} else {
defaultApi$1.writeLog('channel_log : gate socket closed, do not reconnect......');
}
};
defaultApi$1.writeLog('channel_log : bindWsListener completed......');
}
}, {
key: "initWebSocket",
value: function initWebSocket(url, serverType) {
var _this5 = this;
var _this = this;
defaultApi$1.writeLog("channel_log : ".concat(url, " ").concat(serverType, " socket init......"));
return new Promise(function (resolve, reject) {
try {
if (_this5.socket) {
defaultApi$1.writeLog('channel_log : socket is closed......');
_this5.socket.close();
}
} catch (e) {
defaultApi$1.writeLog('pomelo socket close error');
} //initSocket
_this5.socket = new WebSocket(url);
var wsTimeout = setTimeout(function () {
defaultApi$1.writeLog('channel_log : socket is timeout...... ' + url);
reject(WEB_SOCKET_TIMEOUT);
}, 5e3);
try {
dataReport$2.pomeloInitWebSocket({
url: url
});
} catch (e) {
defaultApi$1.writeLog("pomeloInitWebSocket_error ".concat(JSON.stringify(e)));
}
defaultApi$1.writeLog('channel_log : new WebSocket......');
_this5.socket.binaryType = 'arraybuffer';
_this5.socket.onopen = function (evt) {
clearTimeout(wsTimeout);
_this.onSocketOpen(evt);
defaultApi$1.writeLog("channel_log : ".concat(JSON.stringify(evt), " socket is onopen......"));
};
_this5.socket.onmessage = function (evt) {
var result = _this.onSocketMessage(evt);
if (result === 'handshake_ok') {
// 握手完成后再绑定消息接收事件
if (_this5.pomeloConfig.serverType === 'chat') {
_this5.bindWsListener();
}
resolve(true);
}
};
_this5.socket.onerror = function (evt) {
clearTimeout(wsTimeout); // new update start
_this5.socket.onerror = null;
_this5.socket.onclose = null; // new update end
_this.onSocketError(evt);
defaultApi$1.writeLog("channel_log : ".concat(JSON.stringify(evt), " ,serverType : ").concat(serverType, " ,socket is onerror......"));
reject(WEB_SOCKET_ERROR);
};
_this5.socket.onclose = function (evt) {
clearTimeout(wsTimeout); // new update start
_this5.socket.onerror = null;
_this5.socket.onclose = null; // new update end
defaultApi$1.writeLog("channel_log : ".concat(JSON.stringify(evt), ", serverType : ").concat(serverType, " socket is onclose......"));
reject(WEB_SOCKET_CLOSE);
};
defaultApi$1.writeLog("===start-init-websocket".concat(url, "==="));
});
} //onSocketOpen
}, {
key: "onSocketOpen",
value: function onSocketOpen(evt) {
if (this.socket.readyState == 1) {
var obj = _package.encode(_package.TYPE_HANDSHAKE, _protocol.strencode(JSON.stringify(this.handshakeBuffer)));
this.send(obj);
}
} //request
}, {
key: "request",
value: function request(route, msg, cb) {
msg = msg || {};
route = route || msg.route;
if (!route) {
defaultApi$1.writeLog('fail to send request without route.');
return;
}
this.reqId++;
this.sendMessage(this.reqId, route, msg);
this.callBacks[this.reqId] = cb;
this.routeMap[this.reqId] = route;
}
}, {
key: "notify",
value: function notify(route, msg) {
msg = msg || {};
this.sendMessage(0, route, msg);
} //sendMessage
}, {
key: "sendMessage",
value: function sendMessage(reqId, route, msg) {
var type = reqId ? _message.TYPE_REQUEST : _message.TYPE_NOTIFY; //compress message by protobuf
var protos = this.pomeloData.protos ? this.pomeloData.protos.client : {};
if (protos[route]) {
msg = _protobuf.encode(route, msg);
} else {
msg = _protocol.strencode(JSON.stringify(msg));
}
var compressRoute = 0;
msg = _message.encode(reqId, type, compressRoute, route, msg);
var packet = _package.encode(_package.TYPE_DATA, msg);
this.send(packet);
} //onSocketMessage
}, {
key: "onSocketMessage",
value: function onSocketMessage(evt) {
var msgData = _package.decode(evt.data);
switch (msgData.type) {
case _package.TYPE_HANDSHAKE:
return this.handshake(msgData.body);
case _package.TYPE_HEARTBEAT:
this.heartbeat(msgData.body);
break;
case _package.TYPE_DATA:
// defaultApi.writeLog(`channel_log : ${JSON.stringify(msgData)} _package TYPE_DATA ......`);
var msg = _message.decode(msgData.body);
if (msg.id > 0) {
msg.route = this.routeMap[msg.id];
delete this.routeMap[msg.id];
if (!msg.route) {
return;
}
}
msg.body = this.deCompose(msg);
this.processMessage(msg);
break;
case _package.TYPE_KICK:
defaultApi$1.writeLog('channel_log : _package TYPE_KICK ......'); // 乐乐aigc表达练,互t场景添加使用
this.destory();
NOTICE.mutualKick({}); // this.emit(SocketEventType.POMELO_MESSAGE_KICK);
break;
}
if (this.heartbeatTimeout) {
this.nextHeartbeatTimeout = Date.now() + this.heartbeatTimeout;
}
} //onSocketError
}, {
key: "onSocketError",
value: function onSocketError(evt) {
// this.emit(SocketEventType.SOCKET_IO_ERROR, evt);
defaultApi$1.writeLog("[webSocket-state]:onError---ErrorInfo: ".concat(JSON.stringify(evt)));
} //onSocketClose
}, {
key: "onSocketClose",
value: function onSocketClose(evt) {
// this.emit(SocketEventType.SOCKET_CLOSE, evt);
defaultApi$1.writeLog("[webSocket-state]:onClose---ErrorInfo: ".concat(JSON.stringify(evt)));
} //handshake
}, {
key: "handshake",
value: function handshake(data) {
var _this = this;
data = JSON.parse(_protocol.strdecode(data));
defaultApi$1.writeLog("[websocket-handshake-code:".concat(data.code, "]")); // heartBeatConfig
if (data.sys && data.sys.heartbeat) {
this.heartbeatInterval = data.sys.heartbeat * 1000; // heartbeat interval
this.heartbeatTimeout = this.heartbeatInterval * 2; // max heartbeat timeout
} else {
this.heartbeatInterval = 0;
this.heartbeatTimeout = 0;
}
if (data.sys && data.sys['minHeartbeatInterval']) {
this.minHeartbeatInterval = data.sys['minHeartbeatInterval'] * 1000; // heartbeat interval
} else {
this.minHeartbeatInterval = 3000;
}
if (data.sys && data.sys['retryTimesWhenHeartBeatFailed']) {
this.retryTimesWhenHeartBeatFailed = data.sys['retryTimesWhenHeartBeatFailed'];
}
this.initPomeloData(data); // handshake-complete
this.send(_package.encode(_package.TYPE_HANDSHAKE_ACK));
return 'handshake_ok';
} //heartbeat
}, {
key: "heartbeat",
value: async function heartbeat(data) {
var _this6 = this;
var _this = this;
defaultApi$1.writeLog('[websocket-heartbeat-state]:receive heartbeat...');
var obj = _package.encode(_package.TYPE_HEARTBEAT);
if (this.failTimes) {
this.failTimes = 0;
console.warn('重新连上了');
defaultApi$1.writeLog('重新连上了');
}
if (this.heartbeatTimeoutId) {
clearTimeout(this.heartbeatTimeoutId);
this.heartbeatTimeoutId = null;
}
if (this.heartbeatId) {
// already in a heartbeat interval
return;
}
this.heartbeatId = setTimeout(function () {
_this6.heartbeatId = null;
_this6.send(obj);
defaultApi$1.writeLog('[pomeloclient.heartbeat]:send heartbeat...');
_this6.nextHeartbeatTimeout = Date.now() + _this6.heartbeatTimeout;
_this6.heartbeatTimeoutId = setTimeout(function () {
_this6.heartbeatTimeoutCb(_this6);
}, _this6.minHeartbeatInterval);
}, this.heartbeatInterval);
} //heartbeatTimeoutCb
}, {
key: "heartbeatTimeoutCb",
value: function heartbeatTimeoutCb(that) {
var self = this;
defaultApi$1.writeLog('heartbeatTimeoutCb log !!!');
if (this.failTimes < this.retryTimesWhenHeartBeatFailed) {
var obj = _package.encode(_package.TYPE_HEARTBEAT);
self.send(obj);
this.failTimes += 1;
console.warn("\u5FC3\u8DF3\u91CD\u8BD5\u7B2C".concat(this.failTimes, "\u6B21"));
defaultApi$1.writeLog("\u5FC3\u8DF3\u91CD\u8BD5\u7B2C".concat(this.failTimes, "\u6B21"));
self.heartbeatTimeoutId = setTimeout(this.heartbeatTimeoutCb.bind(self), this.minHeartbeatInterval);
} else {
// update start
// 超时前先断开监听事件
self.socket.onmessage = null;
self.socket.onerror = null;
self.socket.onclose = null; // update end
console.error('server heartbeat timeout');
defaultApi$1.writeLog('server heartbeat timeout'); // 重连
this.reconnect(); // update start
// this.disconnect(true);
// update end
}
} //processMessage
}, {
key: "processMessage",
value: function processMessage(msg) {
var _this = this; // eslint-disable-next-line no-extra-boolean-cast
if (!!msg.body.msgId) {
var replyRoute = 'connector.' + msg.route + '.ack';
var replyMsg = {
msgId: msg.body.msgId,
ack: 1
};
this.notify(replyRoute, replyMsg);
}
if (!msg || !msg.id) {
switch (msg.route) {
case 'onChat':
break;
case 'onServer':
try {
var onServerMsg = JSON.parse(msg.body.msg);
this.dealOnServerMsg(onServerMsg, msg.body.from);
} catch (error) {}
break;
case 'onAdd':
break;
case 'onLeave':
break;
case 'onNotice':
break;
case 'onKick':
this.disconnect(true);
break;
default:
}
return;
}
var cb = this.callBacks[msg.id];
delete this.callBacks[msg.id];
if (typeof cb !== 'function') {
return;
}
cb(msg.body);
return;
} //deCompose
}, {
key: "deCompose",
value: function deCompose(msg) {
var protos = this.pomeloData.protos ? this.pomeloData.protos.server : {};
var abbrs = this.pomeloData.abbrs;
var route = msg.route;
try {
//Decompose route from dict
if (msg.compressRoute) {
if (!abbrs[route]) {
console.error('illegal msg!');
defaultApi$1.writeLog('illegal msg!');
return {};
}
route = msg.route = abbrs[route];
}
if (protos[route]) {
return _protobuf.decode(route, msg.body);
}
return JSON.parse(_protocol.strdecode(msg.body));
} catch (ex) {
console.error('route, body = ' + route + ', ' + msg.body);
}
return msg;
} //handshakeInit
}, {
key: "initPomeloData",
value: function initPomeloData(data) {
if (!data || !data.sys) {
return;
}
this.pomeloData = this.pomeloData || {};
var dict = data.sys.dict;
var protos = data.sys.protos; //Init compress dict
if (dict) {
this.pomeloData.dict = dict;
this.pomeloData.abbrs = {};
for (var route in dict) {
this.pomeloData.abbrs[dict[route]] = route;
}
} //Init protobuf protos
if (protos) {
this.pomeloData.protos = {
server: protos.server || {},
client: protos.client || {}
};
if (_protobuf) {
_protobuf.init({
encoderProtos: protos.client,
decoderProtos: protos.server
});
}
}
} //disconnect
}, {
key: "disconnect",
value: function disconnect(isSelf) {
if (this.socket) {
this.socket.onmessage = null;
this.socket.onerror = null;
this.socket.onclose = null;
this.isGettingCacheMsgList = false;
this.isConnected = false;
if (!isSelf) {
this.hasConnected = false;
this.isInRoom = false;
if (this.reconnectTimer) {
clearTimeout(this.reconnectTimer);
this.reconnectTimer = null;
}
}
if (this.socket.disconnect) {
this.socket.disconnect();
}
if (this.socket.close) {
this.socket.close();
}
defaultApi$1.writeLog('[webSocket-disconnect]');
}
if (this.heartbeatId) {
clearTimeout(this.heartbeatId);
this.heartbeatId = null;
}
if (this.heartbeatTimeoutId) {
clearTimeout(this.heartbeatTimeoutId);
this.heartbeatTimeoutId = null;
}
if (this.deleteQueueTimer) {
clearInterval(this.deleteQueueTimer);
this.deleteQueueTimer = null;
}
} //乐乐表达练触发互t,被t端断开连接
}, {
key: "destory",
value: function destory(isSelf) {
this.disconnect(false);
this.destoryed = true;
} //send
}, {
key: "send",
value: function send(packet) {
if (this.socket) {
if (this.socket.readyState == 2 || this.socket.readyState == 3) {
this.disconnect(true);
return;
}
this.socket.send(packet.buffer || packet, {
binary: true,
mask: true
});
}
} //发送消息
}, {
key: "sendChannelMessage",
value: function sendChannelMessage(msgData) {
var _this7 = this;
var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '*';
return new Promise(function (resolve, reject) {
_this7.request('chat.chatHandler.send', {
// rid: this.indexChannelInfo.channelID,
content: JSON.stringify(msgData),
from: _this7.indexChannelInfo.userID,
target: target || '*',
route: 'onServer'
}, function (data) {
if (data.error) {
reject({
code: -1
});
}
resolve({
code: 200
});
});
});
}
}, {
key: "getNextGateDomain",
value: function getNextGateDomain(currentChannelInfo) {
if (pomeloBackupDomains.length) {
pomeloBackupDomains.push({
host: currentChannelInfo.host,
port: currentChannelInfo.port
});
var domain = pomeloBackupDomains.shift();
currentChannelInfo.host = domain.host;
currentChannelInfo.port = domain.port;
}
return currentChannelInfo;
} //连接gate服务器,获取chat连接地址
}, {
key: "connectGateServer",
value: async function connectGateServer(channelInfo) {
var _this8 = this;
if (this.isReconnectting && pomeloBackupDomains.length) {
channelInfo = this.getNextGateDomain(channelInfo);
}
await this.initPomelo({
serverType: 'gate',
host: channelInfo.host,
port: channelInfo.port,
log: true
});
defaultApi$1.writeLog('channel_log : connectGateServer,the second step to join pomelo ......' + channelInfo.host);
var queryData = {
uid: channelInfo.userId,
rtype: 4,
utype: 2,
retrytime: new Date().getTime(),
protocolVersion: '1.0' // uniqId: channelInfo.guid
};
console.log('gate', queryData, channelInfo);
var _channelInfo = Object.assign({}, channelInfo);
await new Promise(function (resolve, reject) {
_this8.request('gate.gateHandler.queryEntry', queryData, function (data) {
try {
_this8.socket.close();
defaultApi$1.writeLog('channel_log :gate socket close......');
} catch (error) {//
}
_this8.socket = null;
if (data.code === 500) {
defaultApi$1.writeLog("channel_log : ".concat(data.code, " request-gateServerFailed......"));
reject('gateServerFailed');
}
_channelInfo.host = data.host;
_channelInfo.port = data.port;
defaultApi$1.writeLog("channel_log : ".concat(data.code, " request-gateServerSuccess ......"));
try {
dataReport$2.pomeloInitGate({
gateRes: data
});
} catch (e) {
console.log('pomeloInitGate_error', e);
}
resolve('gateServerSuccess');
});
});
return this.connectChatServer(_channelInfo);
} // 重连chat服务器
}, {
key: "reconnectChatServer",
value: function reconnectChatServer(enterData) {
var _this9 = this;
this.request('connector.entryHandler.enter', enterData, function (data) {
if (data.code === 500) {
_this9.reconnectChatServer(enterData);
return;
}
resolve(data);
});
} // 连接chat服务器
}, {
key: "connectChatServer",
value: async function connectChatServer(channelInfo) {
var _this10 = this;
defaultApi$1.writeLog('channel_log : connectChatServer,the third step to join pomelo ......');
await this.initPomelo({
serverType: 'chat',
host: channelInfo.host,
port: channelInfo.port,
log: true
});
var enterData = {
uid: channelInfo.userId,
rid: channelInfo.roomId,
rtype: 4,
username: channelInfo.userId,
uname: channelInfo.userName,
// ulevel: userInfo.level, //用户等级x
role: channelInfo.role,
classid: channelInfo.roomId,
protocolVersion: '1.0',
uniqId: channelInfo.guid
};
return new Promise(function (resolve, reject) {
_this10.request('connector.entryHandler.enter', enterData, function (data) {
if (data.code === 500) {
reject(data);
defaultApi$1.writeLog("channel_log : ".concat(data.code, " request-chatServerFailed......"));
return;
}
_this10.dealConnectSuccess();
try {
dataReport$2.pomeloInitChat({
chatRes: data
});
} catch (e) {
defaultApi$1.writeLog("pomeloInitChat_error ".concat(JSON.stringify(e)), null, 'error');
}
resolve(data);
defaultApi$1.writeLog("channel_log : ".concat(JSON.stringify(data), " request-chatServerSuccess......"));
});
});
} // 处理连接成功
}, {
key: "dealConnectSuccess",
value: async function dealConnectSuccess() {
var _this11 = this;
// 获取历史列表
if (this.lastReceiveMsgUuid) {
try {
this.isGettingCacheMsgList = true;
defaultApi$1.writeLog('msgRecoverStream--start');
var res = JSON.parse(polemoUtil.unzip((await this.msgRecoverStream())));
defaultApi$1.writeLog("msgRecoverStream--end ".concat(JSON.stringify(res)));
if (res.code === 200) {
var recoverMsgList = res.result.cacheList;
recoverMsgList.forEach(function (msg) {
var _msg = JSON.parse(msg);
_this11.dealOnServerMsg(_msg, _msg.from);
});
this.isGettingCacheMsgList = false;
}
} catch (error) {}
}
if (this.hasConnected) {
// 处理公共重进逻辑
channelClient.reJoin();
}
if (this.isReconnectting) {
dataReport$2.pomeloState({
state: 3
});
} else {
dataReport$2.pomeloState({
state: 1
});
}
this.hasConnected = true;
clearTimeout(this.reconnectTimer);
this.reconnectTimer = null;
this.isReconnectting = false;
this.isConnected = true;
this.reconnectTimes = 0;
} // 消息恢复
}, {
key: "msgRecoverStream",
value: function msgRecoverStream() {
var _this12 = this;
return new Promise(function (resolve, reject) {
var _this12$indexChannelI = _this12.indexChannelInfo,
userId = _this12$indexChannelI.userId,
roomId = _this12$indexChannelI.roomId;
_this12.request('recover.recoverHandler.msgRecoverStream', {
stuId: userId,
rid: roomId,
uuid: _this12.lastReceiveMsgUuid
}, function (data) {
if (data.code === 500) {
reject(data);
return;
}
resolve(data);
});
});
} // 重连
}, {
key: "reconnect",
value: function reconnect() {
var _this13 = this;
defaultApi$1.writeLog('pomelo reconnect...');
if (this.isReconnectting) {
return;
}
if (this.socket) {
// 创建实例前断开
this.disconnect(true);
this.socket = null;
}
this.isReconnectting = true;
if (!this.isConnected && this.isInRoom) {
return this.connectGateServer(this.indexChannelInfo).catch(function (err) {
dataReport$2.pomeloState({
state: 4,
desc: String(err)
});
_this13.reconnectTimer = setTimeout(function () {
_this13.reconnectTimes += 1;
}, reconnectInterval);
_this13.isReconnectting = false;
return _this13.reconnect();
});
}
} // 处理onserver消息
}, {
key: "dealOnServerMsg",
value: function dealOnServerMsg(onServerMsg, from) {
if (from === 'sdkset') {
this.callback(onServerMsg);
} else if (from !== this.indexChannelInfo.userId) {
if (this.latestQueueObj.isRepeat(onServerMsg.uuid)) {
return;
}
this.latestQueueObj.insert(onServerMsg.uuid, Date.now());
if (!this.isGettingCacheMsgList) {
this.lastReceiveMsgUuid = onServerMsg.uuid;
}
this.callback(onServerMsg);
}
}
}]);
return PomeloClient;
}();
var pomeloClient = new PomeloClient();
var sendMsgCheckIntervalTimer = null;
var sendMsgCheckIntervalTime = 3000;
var pomeloObj = {
isInRoom: false,
sendMsgCacheList: {},
sendMsgCheckList: {},
sendMsgIndex: 0,
initParams: null,
joinRoom: async function joinRoom(args, cb) {
if (!args) {
return;
}
this.log('channel_log : start joining pomelo ......'); // aigcKickIsReconnect 为了乐乐ai表达练所添加字段,默认为false
var userId = args.userId,
roomId = args.roomId,
userName = args.userName,
role = args.role,
institutionId = args.institutionId,
guid = args.guid,
aigcKickIsReconnect = args.aigcKickIsReconnect; // 外部调用传 chatUrl,内部重连(sendChannelMsgInner)传 host,两种 key 都兼容
var chatUrl = args.chatUrl || args.host;
var _args = {
userId: userId,
roomId: roomId,
host: chatUrl,
userName: userName,
institutionId: institutionId,
guid: guid,
aigcKickIsReconnect: aigcKickIsReconnect,
role: polemoUtil.translateRole(role)
};
this.log("joinRoom: args: ".concat(JSON.stringify(_args)));
defaultApi$1.writeLog("joinRoom: args: ".concat(JSON.stringify(_args)));
this.initParams = _args; // 定时检查发送消息列表
// this.checkSendMsgList();
var res = await pomeloClient.joinRoom(_objectSpread({}, _args, {
roomId: util.getConfId(institutionId, roomId)
}), dealCb); // 加入房间成功
if (res.code === 200) {
this.log('joinRoom success');
this.isInRoom = true;
await this.checkFailedAndCacheMSg();
this.checkSendMsgList();
} else {
this.log('joinRoom failed');
dataReport$2.pomeloState({
state: 2,
desc: 'joinRoom failed'
});
}
try {
defaultApi$1.writeLog('channel_log joinRoomResult');
dataReport$2.joinRoomResult({
code: res.code === 200 ? '0' : '3',
// cloud_api_response: JSON.stringify(window.zby_sdk_cloud_data),
cloud_api_response: window.zby_sdk_cloud_data,
cloud_api_url: "".concat(getApiCloudBaseUrl$1(), "/rtccloud/class/init"),
chat_url: chatUrl
});
} catch (e) {}
;
},
// 离开房间重置所有变量
leaveRoom: function leaveRoom() {
this.log('leaveRoom');
this.isInRoom = false;
this.sendMsgCacheList = {};
sendMsgCheckIntervalTimer = null;
pomeloClient.disconnect();
},
sendChannelMsg: async function sendChannelMsg(data) {
var currTime = new Date().getTime(); // 记录缓存列表
this.sendMsgIndex++;
var _this$initParams = this.initParams,
role = _this$initParams.role,
userId = _this$initParams.userId;
var params = {
type: 'streamMessage',
online_trace_id: "pc".concat(util.firstUpperCase(role)).concat(util.uuid()),
body: JSON.stringify({
message: JSON.stringify(data),
trace_id: "sdk_1.0_".concat(currTime.toString().padStart(16, '123456')),
index: this.sendMsgIndex,
save: '0',
targetid: data.targetId,
mtype: 'stream',
uuid: "".concat(userId, "_2_").concat(this.sendMsgIndex, "_").concat(currTime)
})
};
if (this.isInRoom) {
// 加入房间成功直接发送消息
var res = await this.sendChannelMsgInner(params, data.target || '*');
if (res.code !== 200) {
this.sendMsgCheckList[params.online_trace_id] = params;
}
} else {
// 为加入房间成功先缓存消息队列
this.cacheSendChannelMsg(params, data.target);
}
},
// 缓存消息队列
cacheSendChannelMsg: function cacheSendChannelMsg(data, target) {
var len = Object.keys(this.sendMsgCacheList).length; // 大于100条不再缓存
if (len > 100) {
return;
}
this.sendMsgCacheList[data.online_trace_id] = {
data: data,
target: target
};
},
// 发送消息
sendChannelMsgInner: async function sendChannelMsgInner(data) {
var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '*';
this.log("sendChannelMsgInner: data: ".concat(JSON.stringify(data), ", target: ").concat(target));
try {
dataReport$2.pomeloSendMsg({
api: data.body.api,
data: _objectSpread({}, data, {
body: JSON.parse(data.body)
}),
target: target
});
} catch (e) {
defaultApi$1.writeLog("pomeloSendMsg_error ".concat(JSON.stringify(e)), null, 'error');
}
if (this.isInRoom && !this.checkSocketConnected()) {
// 乐乐aigc表达练,互t场景添加使用
if (this.initParams && this.initParams.aigcKickIsReconnect) {
this.log('sendChannelMsgInner: aigcKickIsReconnect enabled, skip reconnect');
return {
code: 500,
message: 'AIGC kick skip reconnect'
};
}
this.joinRoom(this.initParams);
return {
code: 500,
message: 'Socket not connected'
};
}
return pomeloClient.sendChannelMessage(data, target);
},
checkSocketConnected: function checkSocketConnected() {
if (pomeloClient && pomeloClient.destoryed === false && pomeloClient.socket && pomeloClient.socket.readyState === pomeloClient.socket.OPEN) {
return true;
} else {
return false;
}
},
// 遍历失败和缓存消息
checkFailedAndCacheMSg: async function checkFailedAndCacheMSg() {
// 遍历失败消息
var len = Object.keys(this.sendMsgCheckList).length;
if (len > 0) {
this.log("checkSendMsgList-sendMsgCheckList :".concat(JSON.stringify(this.sendMsgCheckList)));
for (var index in this.sendMsgCheckList) {
var msg = this.sendMsgCheckList[index];
var res = await this.sendChannelMsgInner(msg.data, msg.target);
if (res.code === 200) {
delete this.sendMsgCheckList[index];
}
}
} // 遍历缓存消息
var len1 = Object.keys(this.sendMsgCacheList).length;
if (len1 > 0) {
this.log("checkSendMsgList-sendMsgCacheList :".concat(JSON.stringify(this.sendMsgCacheList)));
for (var _index in this.sendMsgCacheList) {
var _msg = this.sendMsgCacheList[_index];
var _res = await this.sendChannelMsgInner(_msg.data, _msg.target);
if (_res.code === 200) {
delete this.sendMsgCacheList[_index];
}
}
}
},
// 定时检查缓存队列
checkSendMsgList: async function checkSendMsgList() {
var _this = this;
sendMsgCheckIntervalTimer = setInterval(async function () {
if (!_this.isInRoom) {
return false;
}
_this.checkFailedAndCacheMSg();
}, sendMsgCheckIntervalTime);
},
log: function log(msg) {
defaultApi$1.writeLog(msg, 'channel-pomelo');
}
};
function dealCb(msg) {
try {
var body = JSON.parse(msg.body); // 收发消息
if (msg.type === 'streamMessage') {
var _pomeloObj$initParams = pomeloObj.initParams,
roomId = _pomeloObj$initParams.roomId,
userId = _pomeloObj$initParams.userId,
userName = _pomeloObj$initParams.userName,
institutionId = _pomeloObj$initParams.institutionId,
role = _pomeloObj$initParams.role;
var baseInfo = {
roomId: roomId,
userId: userId,
userName: userName,
institutionId: institutionId,
role: polemoUtil.translateRole('', role),
target: msg.from
};
var message = _objectSpread({}, JSON.parse(body.message), body);
dealReceiveStreamMsg(message, baseInfo);
} // 切换sdk
if (msg.type === 'streamsdk') {
defaultApi$1.writeLog("change sdk signal received: ".concat(body.data, ", current: ").concat(window.current_sdk_type));
if (body.data === 'talrtc' || window.current_sdk_type !== body.data) {
zbysdk$1.changeSDK();
} else {
defaultApi$1.writeLog("change sdk signal received: ".concat(body.data, ", same with current sdk, ignore."));
}
}
} catch (error) {
var _msg2 = error instanceof Error ? error.message : JSON.stringify(error);
defaultApi$1.writeLog("dealCb error: ".concat(_msg2), null, 'error');
}
}
function getParams(baseInfo) {
var userId = baseInfo.userId,
target = baseInfo.target,
userName = baseInfo.userName,
role = baseInfo.role,
roomId = baseInfo.roomId,
institutionId = baseInfo.institutionId;
return {
appId: institutionId,
actorId: userId,
actorName: userName,
actorType: role,
roomId: roomId,
streamUrl: util.getStreamId(baseInfo),
streamService: window.zbyAVSDK_init_sdk_type,
version: 1,
target: target
};
}
;
var getSendMsgParams = {
sendJoinAck: function sendJoinAck(baseInfo) {
var data = _objectSpread({
'api': 'joinAck'
}, getParams(baseInfo)); //无target代表广播消息,target代表有定向发送消息
return data;
},
sendAddStream: function sendAddStream(baseInfo) {
var data = _objectSpread({
'api': 'addStream',
'playMode': '2'
}, getParams(baseInfo));
return data;
},
sendUpdateStreamDeviceStatus: function sendUpdateStreamDeviceStatus(baseInfo) {
var deviceType = baseInfo.deviceType,
deviceStatus = baseInfo.deviceStatus;
var data = _objectSpread({
'api': 'updateStreamDeviceStatus',
'streamType': deviceType,
// string 流设备对应类型:1:视频 2:音频 3:音视频 4:截屏 5:截屏+视频 6:截屏+音频
'status': deviceStatus
}, getParams(baseInfo));
return data;
},
sendRemoveStream: function sendRemoveStream(baseInfo) {
var data = _objectSpread({
'api': 'removeStream'
}, getParams(baseInfo));
return data;
},
sendJoin: function sendJoin(baseInfo) {
var data = _objectSpread({
'api': 'join'
}, getParams(baseInfo));
return data;
},
sendLeave: function sendLeave(baseInfo) {
var data = _objectSpread({
'api': 'leave'
}, getParams(baseInfo));
return data;
}
};
var channelObjs = {
1: zbyChannelObj,
2: pomeloObj
};
var channelObj = null;
var ChannelClient =
/*#__PURE__*/
function () {
function ChannelClient() {
_classCallCheck(this, ChannelClient);
this.initParams = null;
} // 加入房间
/**
*
* @param {object} params
* @param {string} params.userId 用户id
* @param {string} params.roomId 房间id
* @param {string} params.host 信道链接地址
* @param {string} params.userName 用户名
* @param {string} params.role 角色 teacher/student/assitant
* @param {string} params.institutionId 机构
* @param {function} cb 回调函数
* @param {number} channelType 信道类型 1=直播云信道 2=pomelo
*/
_createClass(ChannelClient, [{
key: "joinRoom",
value: async function joinRoom(params, cb) {
var channelType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
if (channelObj) {
defaultApi$1.writeLog('channel has init');
return;
} // 设置初始化参数
this.initParams = params; // 设置当前信道对象,使用直播云还是pomelo
channelObj = channelObjs[channelType];
defaultApi$1.writeLog('channel_log : choose channel and start joining ......'); // 加入房间
channelObj.joinRoom(params, cb);
this.sendJoin(params);
} // 离开房间
}, {
key: "leaveRoom",
value: async function leaveRoom() {
if (!channelObj) {
defaultApi$1.writeLog('channel has not init');
return;
} // 离开房间
channelObj.leaveRoom();
channelObj = null;
} // 发送信道消息
}, {
key: "sendChannelMsg",
value: function sendChannelMsg(msg) {
if (!globalConfig.usePomelo) {
return;
}
if (!channelObj) {
defaultApi$1.writeLog('channel has not init');
return;
}
channelObj.sendChannelMsg(msg);
} // 发送进房消息,是自己加入房间群发的消息
}, {
key: "sendJoin",
value: function sendJoin(args) {
if (!globalConfig.usePomelo) {
return;
}
this.sendChannelMsg(getSendMsgParams.sendJoin(args));
} // 发送离开房间消息,是收到别人进入房间然后定向发的消息
}, {
key: "sendLeave",
value: function sendLeave(args) {
if (!globalConfig.usePomelo) {
return;
}
this.sendChannelMsg(getSendMsgParams.sendLeave(args));
} // 发送进房ack消息
}, {
key: "sendJoinAck",
value: function sendJoinAck(args) {
if (!globalConfig.usePomelo) {
return;
}
this.sendChannelMsg(getSendMsgParams.sendJoinAck(args));
} // 发送推流消息,addstream自己推流成功会发,如果有个人进来你会单独给他发,没有ack
}, {
key: "sendAddStream",
value: function sendAddStream(args) {
if (!globalConfig.usePomelo) {
return;
}
this.sendChannelMsg(getSendMsgParams.sendAddStream(args));
} // 发送设备状态更新消息
}, {
key: "sendUpdateStreamDeviceStatus",
value: function sendUpdateStreamDeviceStatus(args) {
if (!globalConfig.usePomelo) {
return;
}
this.sendChannelMsg(getSendMsgParams.sendUpdateStreamDeviceStatus(args));
} // 发送停止推流消息
}, {
key: "sendRemoveStream",
value: function sendRemoveStream(args) {
if (!globalConfig.usePomelo) {
return;
}
this.sendChannelMsg(getSendMsgParams.sendRemoveStream(args));
} //断线重连时,加入小组
}, {
key: "reJoin",
value: async function reJoin() {
if (!globalConfig.usePomelo) {
return;
}
dataReport$2.pomeloState({
state: 3
}); //获取当前小组sdk类型
var cloudResponse = await getCloudData(window.zby_sdk_req_get_cloud_params);
var new_target_sdk_type = cloudResponse.data.sdkName;
if (window.target_sdk_type) {
//正在切换中,等待切换
defaultApi$1.writeLog('reJoin changing -- wait_changed');
return;
} else if (!window.target_sdk_type && window.current_sdk_type !== new_target_sdk_type) {
//未在切换中,且当前SDK类型和小组不一致:进行切换SDK
defaultApi$1.writeLog("reJoin : \u65AD\u7EBF\u91CD\u8FDE\uFF0C\u51C6\u5907\u6267\u884C\u5207\u6362 SDK to ".concat(new_target_sdk_type));
zbysdk$1.changeSDK(1);
} else {
var _this$initParams = this.initParams,
roomId = _this$initParams.roomId,
userId = _this$initParams.userId,
userName = _this$initParams.userName,
institutionId = _this$initParams.institutionId,
role = _this$initParams.role; //一致:重进
defaultApi$1.writeLog('reJoin : SDK一致, 重进');
var baseInfo = {
roomId: roomId,
userId: userId,
userName: userName,
institutionId: institutionId,
role: role
};
this.sendJoin(baseInfo);
this.sendAddStream(baseInfo);
this.sendUpdateStreamDeviceStatus(Object.assign({}, baseInfo, {
deviceType: dict.getDeviceTypeKey('video'),
deviceStatus: dict.getDeviceStatusKey(userAndDeviceStatusInfo && userAndDeviceStatusInfo.camera ? 'open' : 'closed')
}));
this.sendUpdateStreamDeviceStatus(Object.assign({}, baseInfo, {
deviceType: dict.getDeviceTypeKey('audio'),
deviceStatus: dict.getDeviceStatusKey(userAndDeviceStatusInfo && userAndDeviceStatusInfo.microPhone ? 'open' : 'closed')
}));
}
}
}]);
return ChannelClient;
}();
var channelClient = new ChannelClient();
/*
* @Author: why
* @Date: 2019-08-08 19:33:44
* @LastEditors: why
* @LastEditTime: 2019-09-10 17:06:12
* @Description:
*/
var callMethod$8 = cb$1(liveExt.name);
/*
* @Author: why
* @Date: 2019-08-08 19:33:44
* @LastEditors: why
* @LastEditTime: 2019-09-11 15:35:34
* @Description:
*/
var sdkVale$1 = {
zego: 0,
talrtc: 1,
trtc: 2,
rtc: 3
};
var liveBaseApi = {
getLiveSdkVersion: async function getLiveSdkVersion() {
return callMethod$8('GetLiveSdkVersion', {});
},
isStreamAudioMuted: async function isStreamAudioMuted() {
return callMethod$8('IsStreamAudioMuted', {});
},
isStreamVideoMuted: async function isStreamVideoMuted() {
return callMethod$8('IsStreamVideoMuted', {});
},
//设置相应的sdk声音回调给到tm,解决回放关麦依旧有声音问题
setAudioCallbackType: async function setAudioCallbackType(sdkType) {
var audio_source = sdkVale$1[sdkType];
console.log('setAudioCallbackType audio_source:', audio_source);
return callMethod$8('SetExternalAudioSource', {
audio_source: audio_source
});
},
// 初始化
init: function init() {
var _arguments = arguments;
// 加载扩展
if (EM) {
return new Promise(function (resolve) {
console.log('load live sdk');
EM.Load(liveExt.name, liveExt.version, false, function () {
console.log('load live sdk success', _arguments);
resolve();
});
});
}
}
};
defaultApi$1.writeLog("sdk action: zby-live-sdk loaded, version: ".concat(version));
var useScreenExtendKeys = false;
var isWinX64Flag = false;
var sdkConfig = config;
var sdk_status = -1;
var sdkRetryCount = 0;
var deviceCheckerInitStatus = -1;
var windowObjArr = [['zby_sdk_req_get_cloud_params', 'zbyAVSDK_init_params', 'zbyAVSDK_device_checker_init', 'zby_sdk_cloud_data'], ['zbyAVSDK_init_sdk_type', 'current_sdk_type']];
var confId;
var sdkTypeGroup = ''; // 'tm' / 'zego'
var recordPathMap = {};
var mirrorStatus = null; // 重试初始化
function retryInit(error) {
var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'init';
var args = arguments.length > 2 ? arguments[2] : undefined;
var dealSDKMsg = arguments.length > 3 ? arguments[3] : undefined;
//通知业务层,初始化失败,重试
sdkRetryCount++;
sdk_status = -1;
if (sdkRetryCount > 3) {
sdkRetryCount = 0;
NOTICE.sdkStatus({
status: 'retry_stop'
});
try {
// console.log('获取云控失败上报加入教室code1',window.zby_sdk_init_params);
dataReport$2.joinRoomResult({
code: '1',
// cloud_api_response: JSON.stringify(window.zby_sdk_cloud_data),
// cloud_api_response: window.zby_sdk_cloud_data,
cloud_api_url: "".concat(getApiCloudBaseUrl$1(), "/rtccloud/class/init")
});
} catch (e) {
defaultApi$1.writeLog('获取云控接口失败');
}
} else {
NOTICE.sdkStatus({
status: "retry_".concat(name),
count: sdkRetryCount
});
defaultApi$1.writeLog("sdk action: retry_".concat(name, ", count: it's the \u3010").concat(sdkRetryCount, "\u3011 retry\uFF0C ").concat(error, " error"));
if (name === 'init') {
return zbysdk$1.init(args, dealSDKMsg);
}
return zbysdk$1.changeSDK(1);
}
}
/**
* 设备状态通知
* @param {String} deviceType 'audio', 'video'
* @param {Bollean} operation
*/
function sendDeviceStatus(deviceType, operation) {
if (window.zbyAVSDK_init_params) {
var initParams = window.zby_sdk_init_params;
NOTICE.deviceStatus({
userId: initParams.userId,
userName: initParams.userName,
role: initParams.role,
//获取设备类型和状态对应的文案,返回给业务层
deviceType: deviceType,
deviceStatus: operation ? 'open' : 'closed'
}); //更新设备状态,摄像头,麦克风 开启/关闭
channelClient.sendUpdateStreamDeviceStatus(Object.assign({}, initParams, {
deviceType: dict.getDeviceTypeKey(deviceType),
deviceStatus: dict.getDeviceStatusKey(operation ? 'open' : 'closed')
}));
} else {
console.log('尚未初始化,无须设备状态同步');
}
}
/**
*
* @param {String} userId
* @param {String} status 流状态
*/
function noticeStreamStatus(userId, status) {
NOTICE.streamStatus({
userId: userId,
status: status
});
defaultApi$1.writeLog("sdk stream status userId: ".concat(JSON.stringify(userId), " ").concat(status));
}
function generateStreamId(userId, groupId) {
if (!window.zby_sdk_init_params) {
console.log('缺少初始化参数,无法生成streamId');
}
var initParams = window.zby_sdk_init_params;
if (!initParams) {
return '';
}
return util.getStreamId(_objectSpread({}, initParams, {
userId: userId,
groupId: groupId
}));
}
function caculateDeatailArgs(baseArgs, cloudData, sdkTypeGroup) {
try {
var commonArgs = {
userId: baseArgs.userId + '',
streamId: util.getStreamId(baseArgs),
userName: baseArgs.userName || '',
sid: baseArgs.sid,
role: baseArgs.role,
roomId: baseArgs.roomId + '',
confId: confId,
userAvatar: baseArgs.userAvatar || '',
userToken: baseArgs.userToken || '',
devices: baseArgs.devices,
env: baseArgs.env,
businessLinesType: baseArgs.businessLinesType,
institutionId: baseArgs.institutionId,
//站立模式:0 / 坐立模式:1
mode: baseArgs.mode,
live_id: baseArgs.liveId,
// 课堂模式,0=小组课/1=新小班
classMode: +baseArgs.classMode,
//数据上报班课类型
liveType: +baseArgs.liveType,
//是否开启转推功能
isTurnPush: baseArgs.isTurnPush || false,
// isSetAEC: baseArgs.isSetAEC || false,
lecturerStreamId: baseArgs.lecturerStreamId
};
var screenSameResolutionKey = useScreenExtendKeys ? 'screenSameResolutionExtend' : 'screenSameResolution';
var screenSameFpsKey = useScreenExtendKeys ? 'screenSameFpsExtend' : 'screenSameFps';
var screenSameBitrateKey = useScreenExtendKeys ? 'screenSameBitrateExtend' : 'screenSameBitrate'; //从云控返回值中获取直播相关配置
var liveConfig = {
//大画面视频采集码率(取值范围:40kb~2000kb)
// captureBitrate: +cloudData.captureBitrate,
//大画面视频采集帧率(取值范围:5~30)
// captureFps: +cloudData.captureFps,
//大画面视频编码分辨率
encodedResolutionWidth: +cloudData.encodedResolution.split('*')[0],
encodedResolutionHeight: +cloudData.encodedResolution.split('*')[1],
// 预览画面视频采集码率(取值范围:40kb~300kb)
encodeCaptureBitrate: +cloudData.encodedBitrate,
encodeCaptureFps: +cloudData.encodedFps,
// 预览画面视频采集帧率(取值范围:5~15)
previewCaptureFps: +cloudData.previewFps,
// 预览视频编码分辨率
previewResolutionWidth: +cloudData.previewResolution.split('*')[0],
previewResolutionHeight: +cloudData.previewResolution.split('*')[1],
//rtc同屏分辨率
screenSameResolutionWidth: cloudData[screenSameResolutionKey] ? +cloudData[screenSameResolutionKey].split('*')[0] : 1280,
screenSameResolutionHeight: cloudData[screenSameResolutionKey] ? +cloudData[screenSameResolutionKey].split('*')[1] : 720,
//rtc同屏帧率 码率
screenSameFps: cloudData[screenSameFpsKey] ? +cloudData[screenSameFpsKey] : 15,
screenSameBitrate: cloudData[screenSameBitrateKey] ? +cloudData[screenSameBitrateKey] : 512000,
// 转推Rtmp地址
recordUrl: cloudData.recordUrl,
aecMode: cloudData.aecMode != null ? cloudData.aecMode : -1,
noiseSuppressMode: cloudData.noiseSuppressMode != null ? cloudData.noiseSuppressMode : -1
};
var detailArgs = {
rtc: Object.assign({}, commonArgs, liveConfig, {
extensionVersion: baseArgs.extension.version.rtc,
appId: cloudData.appId,
sdkTypeGroup: sdkTypeGroup
}),
talrtc: Object.assign({}, commonArgs, liveConfig, {
extensionVersion: baseArgs.extension.version.talrtc || '1.0.0.0',
appId: cloudData.appId,
usersign: 'testsign',
teacherId: baseArgs.teacherId,
sdkTypeGroup: sdkTypeGroup
}),
nertc: Object.assign({}, commonArgs, liveConfig, {
extensionVersion: baseArgs.extension.version.talrtc || '1.0.0.0',
appId: cloudData.appId,
usersign: 'testsign',
teacherId: baseArgs.teacherId,
sdkTypeGroup: sdkTypeGroup
}),
volcrtc: Object.assign({}, commonArgs, liveConfig, {
extensionVersion: baseArgs.extension.version.talrtc || '1.0.0.0',
appId: cloudData.appId,
usersign: 'testsign',
teacherId: baseArgs.teacherId,
sdkTypeGroup: sdkTypeGroup
}),
trtc: Object.assign({}, commonArgs, liveConfig, {
extensionVersion: baseArgs.extension.version.trtc || '1.0.0.0',
appId: cloudData.appId,
usersign: cloudData.txRtcKey,
sdkTypeGroup: sdkTypeGroup
}),
zego: Object.assign({}, commonArgs, liveConfig, {
extensionVersion: baseArgs.extension.version.zego,
appId: parseInt(cloudData.appId) || 2251703116,
appSignature: cloudData.appKey || 'uYsmfJ4F8ERzRNC4ug6lWB/vfU6ffg+/ETRF14vjzs4=',
businessType: 0,
nNetType: 1,
sdkTypeGroup: sdkTypeGroup
})
};
return detailArgs;
} catch (error) {
console.error(error);
}
}
/**
* SDK 方法 - 对外暴露的接口
*/
var zbysdk$1 = {
version: version,
notice: null,
// 打开监听log
openListenerLog: false,
//端上初始化时传的false
autoChangeSdk: true,
log_id: null,
/**
* 配置设置
* @param {Object} options
* @param {'test' | 'online'} options.env 环境
* @param {boolean} options.weblog 是否开启日志
* @param {'saas' | 'xes'} options.businessLinesType 业务线类型 saas:乐读 xes:素养
*/
setConfig: function setConfig(options) {
Object.assign(sdkConfig, options);
Object.assign(this, options);
},
/**
* 设置备用域名
* @param {{ host: string, port: number }[]} domains
*/
setBackupDomains: function setBackupDomains(domains) {
defaultApi$1.writeLog("sdk action: setBackupDomains ".concat(JSON.stringify(domains)));
pomeloBackupDomains.length = 0;
if (Array.isArray(domains)) {
domains.forEach(function (_ref) {
var host = _ref.host,
_ref$port = _ref.port,
port = _ref$port === void 0 ? 443 : _ref$port;
pomeloBackupDomains.push({
host: host,
port: port
});
});
}
},
deviceStatus: {},
enableLog: function enableLog() {
var enable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
defaultApi$1.writeLog("sdk action: enableLog ".concat(JSON.stringify(enable)));
config.weblog = !!enable;
},
/**
* 打开美颜,默认不用调用,sdk内部会自动打开
*/
enableBeauty: function enableBeauty(streamId, idx) {
defaultApi$1.writeLog("sdk action: enableBeauty, streamId: ".concat(streamId, ", idx: ").concat(idx));
return zbyAVSDK.enableBeautify(true, streamId, idx);
},
/**
* 关闭美颜
*/
disableBeauty: function disableBeauty(streamId, idx) {
defaultApi$1.writeLog("sdk action: disableBeauty, streamId: ".concat(streamId, ", idx: ").concat(idx));
return zbyAVSDK.enableBeautify(false, streamId, idx);
},
/**
* 设置美颜参数
* @param {Object} options
* @param {number} options.whiten 美白 0-1
* @param {number} options.dermabrasion 磨皮0-1
* @param {number} options.lift 窄脸0-1
* @param {number} options.shave 削脸0-1
* @param {number} options.eye 大眼0-1
* @param {number} options.chin 下巴0-1
* @param {number} options.darkCircle 黑眼圈0-1
* @param {number} options.nasolabialFolds 法令纹0-1
* @param {number} options.cheekbone 颧骨0-1
* @param {number} options.head 小头0-1
* @param {number} options.eyeBrightness 亮眼0-1
* @param {number} options.lip 嘴唇 -1 - 1
* @param {number} options.forehead 发际线 0-1
* @param {number} options.nose 鼻子 -1 - 1
* @param {number} options.usm 清晰 0-1
* @param {string?} streamId 流id
* @param {number?} idx 流索引
*/
setBeautify: function setBeautify(options, streamId, idx) {
defaultApi$1.writeLog("sdk action: setBeautify ".concat(JSON.stringify(options), ", streamId: ").concat(streamId, ", idx: ").concat(idx));
var result = [];
for (var key in options) {
if (typeof options[key] !== 'number' || options[key] < 0 || options[key] > 1) {
defaultApi$1.writeLog("sdk action: setBeautify options.".concat(key, " value should be between 0 and 1"));
continue;
}
var mode = void 0,
subMode = 0,
value = Math.round(options[key] * 100);
switch (key) {
case 'whiten':
mode = 101;
break;
case 'dermabrasion':
mode = 103;
subMode = 1;
break;
case 'lift':
mode = 201;
break;
case 'eye':
mode = 202;
break;
case 'usm':
mode = 603;
break;
default:
defaultApi$1.writeLog("sdk action: setBeautify options.".concat(key, " not support yet"));
break;
}
if (!mode) {
continue;
}
result.push(zbyAVSDK.setBeautifyParam2(mode, subMode, value, streamId, idx));
}
return Promise.all(result);
},
/**
* 设置背景
* @param {Object} options
* @param {'image' | 'blur' | 'transparent'} options.type 背景类型
* @param {string?} options.path 图片地址
* @param {string?} streamId 流id
* @param {number?} idx 流索引
*/
setBackground: function setBackground(options, streamId, idx) {
defaultApi$1.writeLog("sdk action: setBackground ".concat(JSON.stringify(options), ", streamId: ").concat(streamId, ", idx: ").concat(idx));
if (!options || !options.type) {
var res1 = zbyAVSDK.setBeautifyParam2(605, 1, 0, streamId, idx); // 关闭背景虚化
var res2 = zbyAVSDK.setBeautifyParam2(901, 0, 0, streamId, idx); // 关闭自定义背景
return Promise.all([res1, res2]);
}
if (options.type === 'blur') {
return zbyAVSDK.setBeautifyParam2(605, 1, 100, streamId, idx, options.path);
}
if (options.type === 'image') {
return zbyAVSDK.setBeautifyParam2(901, 0, 100, streamId, idx, options.path);
}
return Promise.resolve();
},
deviceCheckerInit: async function deviceCheckerInit(cb, extension) {
var env = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'test';
if (!extension) {
defaultApi$1.writeLog('sdk deviceCheckerInit extension param is required');
}
if (deviceCheckerInitStatus > -1) {
return 'please stop check device first';
}
deviceCheckerInitStatus = 0;
defaultApi$1.writeLog("sdk action: deviceCheckerInit ".concat(JSON.stringify({
cb: cb,
extension: extension,
env: env,
sdk_version: version
})));
if (typeof cb === 'function') {
zbysdk$1.notice = cb;
}
await zbyAVSDK.deviceCheckerInit(extension, env);
deviceCheckerInitStatus = 1;
defaultApi$1.writeLog('sdk devices checked');
},
// 结束设备检测
stopCheckDevice: function stopCheckDevice() {
if (deviceCheckerInitStatus === -1) {
defaultApi$1.writeLog('please start check device first');
return 'please start check device first';
}
deviceCheckerInitStatus = -1;
defaultApi$1.writeLog('sdk stop check device');
return zbyAVSDK.stopCheckDevice();
},
/**
*
* @param {Object} args
* @param {string} args.institutionId 机构id
* @param {string} args.roomId 房间id
* @param {string} args.userId 用户id
* @param {string} args.role 用户角色
* @param {string} args.teacherId 辅导流id
* @param {Object} args.cloudData 云控数据
* @param {string} args.liveId
* @param {string} args.sid streamId
* @param {string} args.userName
* @param {string} args.userAvatar
* @param {string} args.userToken
* @param {Object} args.devices 设备信息
* @param {'test' | 'online'} args.env 环境
* @param {'saas' | 'xes'} args.businessLinesType 业务线类型
* @param {number} args.mode 站立模式:0 / 坐立模式:1
* @param {number} args.classMode 课堂模式,0=小组课/1=新小班
* @param {string} args.liveType 数据上报班课类型
* @param {string} args.isTurnPush 是否开启转推功能
* @param {string} args.lecturerStreamId 主讲流id,学生端专用字段
* @param {Function} dealSDKMsg
* @returns
*/
init: async function init(args, dealSDKMsg) {
if (sdk_status !== -1) {
console.log('not allow init');
dealSDKMsg({
type: 'error',
data: {
message: 'should not start init before init finished'
}
});
return;
}
defaultApi$1.writeLog("sdk action: init zby_live_sdk_version : ".concat(version));
isWinX64Flag = await isWinX64();
useScreenExtendKeys = !!args.useScreenExtendKeys;
defaultApi$1.writeLog("sdk action: init args : ".concat(JSON.stringify(args), ", ").concat(isWinX64Flag ? 'winx64' : ''));
try {
var argsCopy = JSON.parse(JSON.stringify(args));
delete argsCopy.cloudData;
defaultApi$1.writeLog("sdk action: init_argsCopy_args : ".concat(JSON.stringify(argsCopy)));
} catch (e) {}
;
this.log_id = 0;
sdk_status = 0; // 初始化参数存入共享
window.zby_sdk_init_params = args; // 设置confId
confId = util.getConfId(args.institutionId, args.roomId);
try {
toolBaseApi.init();
} catch (e) {
defaultApi$1.writeLog("toolBaseApi_Init error: ".concat(e), null, 'error');
} // try {
// await util.getNetworkTimeStamp();
// } catch(e) {
// console.log('getTimeError',e);
// };
//使用初始化传入的 env, isHttps 参数
Object.assign(sdkConfig, args);
zbysdk$1.notice = dealSDKMsg;
try {
var useZego = args.role === 'assistant' || isWinX64Flag; // TODO 辅导端RTMP流不支持云控,默认用zego
sdkTypeGroup = useZego ? 'zego' : await getAndSetInitParams({
institutionId: args.institutionId,
userId: args.userId,
liveId: args.liveId,
role: args.role
});
defaultApi$1.writeLog("\u4E91\u63A7\u8FD4\u56DE\u7684\u5F53\u524D\u5927\u73ED\u7684sdk\u7C7B\u578B, ".concat(sdkTypeGroup));
} catch (error) {
defaultApi$1.writeLog("\u83B7\u53D6\u5927\u73ED\u4E91\u63A7\u521D\u59CB\u5316\u53C2\u6570\u91CC\u9762\u7684sdk\u7C7B\u578B\u5931\u8D25".concat(error));
}
var reqParam = {
clientType: 'pc',
roomType: 7,
institutionId: args.institutionId + '',
roomId: args.roomId + '',
userType: args.role === 'assistant' ? 'student' : args.role,
userId: args.userId + '',
teacherId: args.teacherId + ''
};
window.zby_sdk_req_get_cloud_params = reqParam;
var cloudData;
if (args.cloudData && args.cloudData.sdkName && args.cloudData.encodedResolution && args.cloudData.previewResolution) {
cloudData = args.cloudData;
} else {
defaultApi$1.writeLog("sdk_init: getCloudData reqParam : ".concat(JSON.stringify(reqParam)));
var cloudResponse;
try {
cloudResponse = await getCloudData(reqParam);
} catch (error) {
return retryInit('getCloudData', 'init', args, dealSDKMsg);
}
defaultApi$1.writeLog("sdk_init: cloudResponse : ".concat(JSON.stringify(cloudResponse)));
if (cloudResponse.code === 0 && cloudResponse.data) {
cloudData = cloudResponse.data;
} else {
defaultApi$1.writeLog("sdk_init: get cloudResponse error: ".concat(JSON.stringify(cloudResponse)));
return false;
}
}
defaultApi$1.writeLog("sdk_init: cloudData : ".concat(JSON.stringify(cloudData)));
window.zby_sdk_cloud_data = cloudData;
var detailArgs = caculateDeatailArgs(args, cloudData, sdkTypeGroup);
var sdk_type = cloudData.sdkName; // let sdk_type = 'zego';
Object.assign(window.zby_sdk_init_params, cloudData); //通知业务层,初始化完成
NOTICE.sdkStatus({
sdk_type: sdk_type,
status: 'before_init'
});
defaultApi$1.writeLog("sdk status : before_init , sdk_type : ".concat(sdk_type));
await zbyAVSDK.init(sdk_type, detailArgs).catch(function (error) {
defaultApi$1.writeLog("sdk init AVSDK init_failed ".concat(error));
return;
});
if (args.role === 'assistant' || args.role === 'teacher') {
defaultApi$1.writeLog('sdk action : init load live sdk - start');
await liveBaseApi.init();
defaultApi$1.writeLog('sdk action : init load live sdk - end');
try {
// 设置rtmp流的音频采集方式
if (sdkTypeGroup == 'tm') {
// tm推RTMP流
await liveBaseApi.setAudioCallbackType(sdk_type);
} else {
if (sdkConfig.classMode === 0) {
defaultApi$1.writeLog('zego小组课不需要在zby_live_sdk设置声音采集模式');
} else if (args.role === 'assistant') {
defaultApi$1.writeLog('辅导端zego推RTMP流, 不需要在zby_live_sdk设置声音采集模式');
} else {
// zego推rtmp流
await zbyAVSDK.setThirdAudioCallbackType(sdk_type);
}
}
} catch (e) {
defaultApi$1.writeLog("sdk status : setAudioCallbackType , error : ".concat(e));
}
;
}
try {
// dataReport.joinRoom({initParams: JSON.stringify(args)});
dataReport$2.joinRoom({
initParams: args
});
} catch (e) {}
;
defaultApi$1.writeLog("sdk status : init_finished , sdk_type : ".concat(sdk_type)); //通知业务层,初始化完成
NOTICE.sdkStatus({
sdk_type: sdk_type,
status: 'init_finished'
});
try {
window.zby_isM1Type = (await isAppleM1()).data.is_Apple_Silicon;
} catch (error) {
defaultApi$1.writeLog("sdk action : isAppleM1 error ".concat(JSON.stringify(error)));
}
try {
dataReport$2.initFinished({
code: 0
});
} catch (e) {}
sdk_status = 1;
sdkRetryCount = 0; // 缓存初始化信息
windowObjArr[0].forEach(function (item) {
if (window[item] !== undefined) {
localStorage.setItem(item, JSON.stringify(window[item]));
}
});
windowObjArr[1].forEach(function (item) {
if (window[item] !== undefined) {
localStorage.setItem(item, window[item]);
}
}); //进入信道房间
// enterChannelRoom({...args, chatUrl: cloudData.chatUrl}, dealSDKMsg);
// sendInitChannelMsg(args);
channelClient.joinRoom(_objectSpread({}, args, {
chatUrl: cloudData.chatUrl,
guid: window.zby_sdk_init_params.guid
}), dealSDKMsg, cloudData.chatType);
},
// 设置新窗口配置
setNewWindowConfig: function setNewWindowConfig(args) {
defaultApi$1.writeLog("sdk action : setNewWindowConfig , args : ".concat(JSON.stringify(args)));
window.zbyAVSDK_init_sdk_type = args.sdkType;
},
// 恢复sdk
recoverSdk: async function recoverSdk(args, dealSDKMsg) {
defaultApi$1.writeLog("sdk action : recoverSdk , args : ".concat(JSON.stringify(args))); // 恢复全局变量
windowObjArr[0].forEach(function (item) {
var obj = localStorage.getItem(item);
if (obj && obj.indexOf('{') > -1) {
try {
window[item] = JSON.parse(obj);
} catch (error) {}
}
});
var cloudData;
if (args.cloudData) {
cloudData = args.cloudData;
} else {
try {
cloudData = JSON.parse(localStorage.getItem('zby_sdk_cloud_data'));
} catch (error) {}
}
windowObjArr[1].forEach(function (item) {
window[item] = localStorage.getItem(item);
});
window.zby_sdk_init_params = args;
defaultApi$1.writeLog('sdk action : recoverSdk , set window params finished'); // try {
// await getLogAddress();
// await getAndSetInitParams({institutionId: args.institutionId, userId: args.userId});
// } catch (error) {
// return retryInit('getAndSetInitParams', 'init', args, dealSDKMsg);
// }
//使用初始化传入的 env, isHttps 参数
Object.assign(sdkConfig, args);
zbysdk$1.notice = dealSDKMsg;
var detailArgs = caculateDeatailArgs(args, cloudData, sdkTypeGroup);
await zbyAVSDK.recoverSdk(detailArgs);
sdk_status = 1; //通知业务层,初始化完成
NOTICE.sdkStatus({
sdk_type: window.zbyAVSDK_init_sdk_type,
status: 'init_finished'
});
defaultApi$1.writeLog('sdk action : recoverSdk finished'); //进入信道房间
// enterChannelRoom({...args, chatUrl: cloudData.chatUrl}, dealSDKMsg);
// sendInitChannelMsg(args);
channelClient.joinRoom(_objectSpread({}, args, {
chatUrl: cloudData.chatUrl
}), dealSDKMsg, cloudData.chatType);
},
// 接收到信道消息,进行切换SDK操作
// from 0:云控 1:重试 2: 上层调用
changeSDK: async function changeSDK() {
var from = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
if (!window.zby_sdk_init_params || !window.zby_sdk_req_get_cloud_params) {
console.log('缺少初始化参数,无法切换SDK');
return;
} //重试(2)不走下一步,否则会陷入死循环,如果是reJoin(1)来的,自动走切sdk逻辑,不触发start_sdk_change回调直接切
if (from < 1) {
// 通知业务层,切换之前(授课业务逻辑需要,比如老师主动调切sdk,云控走的切sdk全部由老师主动切,修复连麦崩溃)
NOTICE.sdkStatus({
sdk_type: window.zbyAVSDK_init_sdk_type,
status: 'start_sdk_change'
});
}
defaultApi$1.writeLog('sdk status : start_sdk_change');
if (from === 0 && !this.autoChangeSdk) {
return;
}
var initParams = window.zby_sdk_init_params;
var nowSdk = window.zbyAVSDK_init_sdk_type;
var cloudData; //请求云控获取更新后的SDK配置相关信息
var cloudResponse;
try {
cloudResponse = await getCloudData(window.zby_sdk_req_get_cloud_params);
} catch (error) {
defaultApi$1.writeLog("changeSDK: getCloudData error ".concat(JSON.stringify(error)));
return retryInit('getCloudData', 'changeSDK');
}
;
cloudData = cloudResponse.data;
if (!cloudData) {
defaultApi$1.writeLog('changeSDK: getCloudData error, cloudData is null');
return;
}
var changeSDKParam = caculateDeatailArgs(initParams, cloudData, sdkTypeGroup);
var sdk_type = cloudData.sdkName;
window.zbyAVSDK_init_params = changeSDKParam;
if (window.zbyAVSDK_init_sdk_type === sdk_type && sdk_type !== 'talrtc') {
console.log('%cchangeSDK :和本地SDK一致,不切换:' + sdk_type, 'color:blue');
defaultApi$1.writeLog("sdk: change sdk action , target is the same as local , will not change sdk to ".concat(sdk_type));
window.target_sdk_type = null;
return;
} else {
window.target_sdk_type = sdk_type;
defaultApi$1.writeLog("sdk action: changeSDK to sdk_type : ".concat(sdk_type, ", sdk status : start_change "));
} // 通知业务层,切换之前
NOTICE.sdkStatus({
sdk_type: window.zbyAVSDK_init_sdk_type,
target_sdk_type: sdk_type,
status: 'before_sdk_change'
});
defaultApi$1.writeLog("sdk status : before_sdk_change to sdk_type : ".concat(sdk_type)); // try {
// dataReport.sdkChange({
// from: window.zbyAVSDK_init_sdk_type,
// to: sdk_type
// });
// } catch (e){};
// //切换SDK之前,先停止转推
if (window.zbyAVSDK_init_params[sdk_type].isTurnPush) {
zbyAVSDK.turnPush('stop');
}
;
sdk_status = 0;
console.log('%c执行SDK切换' + sdk_type, 'color:blue');
try {
channelClient.sendRemoveStream(window.zby_sdk_init_params);
channelClient.sendLeave(window.zby_sdk_init_params);
await zbyAVSDK.changeSDK({
sdk_type: sdk_type
});
} catch (error) {
defaultApi$1.writeLog("changeSDK error : ".concat(JSON.stringify(error)));
window.target_sdk_type = null;
}
if (mirrorStatus !== null) {
// 如果之前有镜像,切sdk之后,重新设置镜像
await zbyAVSDK.setMirrorStatus(mirrorStatus);
}
if (window.zby_sdk_init_params.role === 'assistant' || window.zby_sdk_init_params.role === 'teacher') {
try {
console.log('开始设置rtmp声音回调', sdk_type); // 设置rtmp流的音频采集方式
if (sdkTypeGroup == 'tm') {
// tm推RTMP流
await liveBaseApi.setAudioCallbackType(sdk_type);
} else {
if (sdkConfig.classMode === 0) {
defaultApi$1.writeLog('zego小组课不需要在zby_live_sdk设置声音采集模式');
} else if (initParams.role === 'assistant') {
defaultApi$1.writeLog('辅导端zego推RTMP流, 不需要在zby_live_sdk设置声音采集模式');
} else {
// zego推rtmp流
await zbyAVSDK.setThirdAudioCallbackType(sdk_type);
}
}
} catch (error) {
defaultApi$1.writeLog("setAudioCallbackType error : ".concat(JSON.stringify(error)));
}
}
try {
dataReport$2.sdkChange({
from: nowSdk,
to: sdk_type
});
} catch (e) {}
;
console.log('%cSDK切换完毕' + sdk_type, 'color:blue');
sdkRetryCount = 0;
sdk_status = 1;
window.target_sdk_type = null; // 通知业务层,切换完成
NOTICE.sdkStatus({
sdk_type: sdk_type,
status: 'sdk_changed'
});
defaultApi$1.writeLog("sdk status : sdk_changed , sdk_type : ".concat(sdk_type));
if (globalConfig.usePomelo) {
// 如果切换SDK之后,usePomelo为true,重新进入信道
channelClient.joinRoom(_objectSpread({}, initParams, {
chatUrl: cloudData.chatUrl
}), zbysdk$1.notice, cloudData.chatType);
} else {
channelClient.leaveRoom();
} //切换SDK 完成后,先发送 join消息
channelClient.sendJoin(initParams); // 打开本地摄像头, 并开始推流后, 老师视频和麦克风状态变为'开启', 即true
//切换完成之后,学生重新推流
// if (window.zby_sdk_init_params.role === 'student') {
console.log('%c执行打开摄像头和推流:' + sdk_type, 'color:blue');
if (sdkTypeGroup == 'zego' && (initParams.role == 'assistant' || sdkConfig.classMode === 0 && initParams.role == 'teacher')) {
defaultApi$1.writeLog('zego小组课云控切rtc流sdk,不重新设置摄像头麦克风打开状态(设备状态在pyzx设置的,zby拿不到状态)');
} else {
if (typeof userAndDeviceStatusInfo.camera === 'boolean') {
await zbysdk$1.openOrCloseCamera(userAndDeviceStatusInfo.camera);
}
if (typeof userAndDeviceStatusInfo.microPhone === 'boolean') {
await zbysdk$1.openOrCloseMicrophone(userAndDeviceStatusInfo.microPhone);
}
}
if (userAndDeviceStatusInfo.isPushingFlow) {
await zbysdk$1.startPushFlow();
}
var videoSrc = await zbysdk$1.getOrLocateVideo({
isLocal: true
});
NOTICE.updateLocalPreview({
videoSrc: videoSrc
});
defaultApi$1.writeLog("sdk update_local_preview , videoSrc : ".concat(videoSrc, " "));
},
changeGroup: function changeGroup(groupId, channelToken) {
return this.changeRoom(groupId, channelToken);
},
//alias changeGroup
changeRoom: async function changeRoom(roomId, channelToken) {
if (!channelToken) {
console.warn('changeRoom param: channelToken is required !');
defaultApi$1.writeLog('changeRoom param: channelToken is required !');
return;
}
defaultApi$1.writeLog("sdk action : changeRoom to roomId : ".concat(roomId)); //业务层停止所有拉流
window.zby_sdk_init_params.roomId = roomId;
var initParams = window.zby_sdk_init_params; // 通知业务层,room 切换之前
zbysdk$1.notice({
type: 'sdk_status',
data: {
sdk_type: window.zbyAVSDK_init_sdk_type,
target_room_id: roomId,
status: 'before_room_change'
}
});
defaultApi$1.writeLog("sdk status : before_room_change to roomId ".concat(roomId)); //广播 leave 消息
channelClient.sendLeave(initParams); //断开信道
channelClient.leaveRoom(initParams);
defaultApi$1.writeLog('channle status : leave channel room invoked'); //退出当前流媒体房间
await zbyAVSDK.leaveRoom(); //获取新小组的云控数据
var reqParam = {
clientType: 'pc',
roomType: 7,
institutionId: initParams.institutionId + '',
roomId: initParams.roomId + '',
userType: initParams.role,
userId: initParams.userId + '',
teacherId: initParams.teacherId + ''
};
reqParam.sign = util.getVerifySign(reqParam);
reqParam.main = 2; //暂存请求云控所需参数,为切换SDK作预备
window.zby_sdk_req_get_cloud_params = reqParam;
var cloudResponse = await getCloudData(window.zby_sdk_req_get_cloud_params);
var cloudData = cloudResponse.data;
var sdk_type = cloudData.sdkName; //SDK重新初始化
var detailArgs = caculateDeatailArgs(initParams, cloudData);
await zbyAVSDK.init(sdk_type, detailArgs); //重新进入信道
initParams.channelToken = channelToken; // enterChannelRoom({...initParams, chatUrl: cloudData.chatUrl});
defaultApi$1.writeLog('channle status : enter channel room invoked'); // sendInitChannelMsg(initParams);
channelClient.joinRoom(_objectSpread({}, args, {
chatUrl: cloudData.chatUrl
}), dealSDKMsg, cloudData.chatType); // 通知业务层,room 切换之前
zbysdk$1.notice({
type: 'sdk_status',
data: {
sdk_type: window.zbyAVSDK_init_sdk_type,
room_id: roomId,
status: 'room_changed'
}
});
defaultApi$1.writeLog("sdk status : room_changed ,roomId ".concat(roomId));
},
setCameraDevice: async function setCameraDevice(deviceId) {
defaultApi$1.writeLog("sdk action : setCameraDevice --start,deviceId ".concat(deviceId));
await zbyAVSDK.setCameraDevice(deviceId, 'client');
defaultApi$1.writeLog("sdk action : setCameraDevice --end,deviceId ".concat(deviceId));
},
getCameraDeviceList: async function getCameraDeviceList() {
defaultApi$1.writeLog('sdk action : getCameraDeviceList ');
return await zbyAVSDK.getCameraDeviceList();
},
openOrCloseCamera: async function openOrCloseCamera(operation) {
defaultApi$1.writeLog("sdk action : openOrCloseCamera ".concat(operation, " --start"));
userAndDeviceStatusInfo.camera = operation; // 标记业务操作,不做为设备状态参考
await zbyAVSDK.openOrCloseCamera(operation);
try {
dataReport$2.deviceChange({
device_type: 1,
code: operation ? 1 : 0,
device_name: window.zbyAVSDK_device_checker_init.camera.name,
device_id: window.zbyAVSDK_device_checker_init.camera.use
});
} catch (e) {}
; //记录摄像头状态,用作推流类型上报,是否推视频
this.deviceStatus.camera = operation;
sdk_status === 1 && sendDeviceStatus('video', operation);
defaultApi$1.writeLog("sdk action : openOrCloseCamera ".concat(operation, " --end"));
},
//推不推画面
setPushStreamVideo: async function setPushStreamVideo(operation) {
await zbyAVSDK.setPushStreamVideo(operation);
defaultApi$1.writeLog("sdk action : setPushStreamVideo ".concat(operation, " "));
},
//看或不看指定用户的视频
setVideoMute: async function setVideoMute(userId, operation, groupId, streamid) {
var streamId = streamid || generateStreamId(userId, groupId);
defaultApi$1.writeLog("sdk action : setVideoMute userId ".concat(userId, ", groupId ").concat(groupId, ", operation ").concat(operation, ", streamId ").concat(streamId));
await zbyAVSDK.setVideoMute(streamId, operation);
},
getOrLocateVideo: async function getOrLocateVideo(args) {
defaultApi$1.writeLog("sdk action : getOrLocateVideo --start args : ".concat(JSON.stringify(args)));
var videoSrc = await zbyAVSDK.getOrLocateVideo({
domId: args.domId,
isLocal: args.isLocal,
streamId: args.streamId || args.userId && generateStreamId(args.userId, args.groupId),
isTeacherNewWindowPreview: args.isTeacherNewWindowPreview
});
defaultApi$1.writeLog("sdk getOrLocateVideo successfully, videoSrc : ".concat(videoSrc, " "));
return videoSrc;
},
linkMicReport: async function linkMicReport(args) {
defaultApi$1.writeLog("sdk action : linkMicReport args : ".concat(JSON.stringify(args)));
var name = args.name,
pull_uid = args.pull_uid,
trace_id = args.trace_id;
var pull_uid1 = [];
pull_uid.forEach(function (item) {
pull_uid1.push(item + '');
});
if (dataReport$2.hasOwnProperty(name)) {
dataReport$2[name]({
pull_uid: pull_uid1,
trace_id: trace_id
});
}
;
},
/**
* 设置视频采集模式
* @param {number} type 0:接管模式,输出头像视频;1:非接管模式,输出播放器视频
* @returns
*/
setVideoCallback: async function setVideoCallback(type) {
defaultApi$1.writeLog("sdk action : setVideoCallback type:".concat(type));
return zbyAVSDK.setVideoCallback(type);
},
setWaterMark: async function setWaterMark(filePath, x, y, w, h, streamId, idx) {
var toInt = function toInt(val) {
var num = Number(val);
return Number.isFinite(num) ? Math.floor(num) : NaN;
}; // 参数与初始化前置校验,避免无效调用继续下钻
if (!filePath || typeof filePath !== 'string') {
defaultApi$1.writeLog("sdk action : SetWaterMark invalid filePath ".concat(filePath));
return false;
}
var left = toInt(x);
var top = toInt(y);
var width = toInt(w);
var height = toInt(h);
if ([left, top, width, height].some(function (item) {
return Number.isNaN(item);
}) || left < 0 || top < 0 || width <= 0 || height <= 0) {
defaultApi$1.writeLog("sdk action : SetWaterMark invalid rect params x:".concat(x, ", y:").concat(y, ", w:").concat(w, ", h:").concat(h));
return false;
} // 兼容两种初始化路径:
// 1) 正常入房 init/recoverSdk:会写入 window.zbyAVSDK_init_params
// 2) 设备检测 deviceCheckerInit:可能不会写入 init_params,但会设置 window.zbyAVSDK_init_sdk_type 并启动引擎
// 避免在引擎/扩展没启动时就下发水印指令,导致原生侧返回失败、甚至某些情况下触发异常调用链。
if (!window.zbyAVSDK_init_sdk_type) {
defaultApi$1.writeLog("sdk action : SetWaterMark failed, sdk not initialized (sdk_status:".concat(sdk_status, ", deviceCheckerInitStatus:").concat(deviceCheckerInitStatus, ")"));
return false;
}
defaultApi$1.writeLog("sdk action : SetWaterMark path:".concat(filePath, ", rect:").concat(JSON.stringify({
left: left,
top: top,
width: width,
height: height
}), ", streamId:").concat(streamId, ", idx:").concat(idx));
return zbyAVSDK.setWaterMark(filePath, left, top, width, height, streamId, idx);
},
SetWaterMark: function SetWaterMark(filePath, x, y, w, h, streamId, idx) {
return this.setWaterMark(filePath, x, y, w, h, streamId, idx);
},
startPushFlow: async function startPushFlow(streamid, idx) {
defaultApi$1.writeLog("sdk action : startPushFlow streamId:".concat(streamid, " idx: ").concat(idx));
try {
// dataReport.startPublish({publish_streamid:window.zbyAVSDK_init_params.rtc.streamId});
streamid && idx ? dataReport$2.startPublish({
publish_rtc_streamid: streamid
}) : dataReport$2.startPublish();
} catch (e) {}
;
if (!idx) {
userAndDeviceStatusInfo.isPushingFlow = true; // 仅标记业务调用行为,不作为推流成功参考
}
await zbyAVSDK.startPushFlow(streamid, idx); // 不重新推流此情况不适用,推流状态跟着设备开关情况改变,以下仅用作数据上报
// console.log('push_type000',this.deviceStatus.camera,this.deviceStatus.microphone);
if (this.deviceStatus.camera && this.deviceStatus.microphone) {
this.deviceStatus.stream_type = 'both';
} else if (!this.deviceStatus.camera && this.deviceStatus.microphone) {
this.deviceStatus.stream_type = 'audio';
} else if (this.deviceStatus.camera && !this.deviceStatus.microphone) {
this.deviceStatus.stream_type = 'video';
} else {
this.deviceStatus.stream_type = 'none';
} // console.log('push_type111',this.deviceStatus,this.deviceStatus.stream_type);
var initParams = window.zby_sdk_init_params; // initParams.role === 'teacher' && zbyAVSDK.turnPush('start');
if (window.zbyAVSDK_init_sdk_type === 'zego' && initParams.role === 'student') {
//仅当学生为zego类型时,才确保推流成功之后再发join消息
return new Promise(function (resolve, reject) {
var timer = setInterval(function () {
if (window.zegoHasPushFlow) {
// window.zegoHasPushFlow = 0
clearInterval(timer);
resolve();
}
}, 300);
}).then(function () {
//需要确保处于推流状态才能发送AddStream
channelClient.sendAddStream(initParams);
}, function (err) {
reject(err);
}).catch(function (err) {
console.log(err);
});
} else {
//rtc同屏流不走信道 !1
if (!idx) {
channelClient.sendAddStream(initParams);
}
}
},
stopPushFlow: async function stopPushFlow(idx, streamid) {
defaultApi$1.writeLog("sdk action : stopPushFlow streamid:".concat(streamid, " idx:").concat(idx));
if (!idx) {
userAndDeviceStatusInfo.isPushingFlow = false; // 仅标记业务调用行为,不作为推流成功参考
}
await zbyAVSDK.stopPushFlow(idx, streamid);
try {
streamid && idx ? dataReport$2.stopPublish({
stop_rtc_streamid: streamid
}) : dataReport$2.stopPublish(); // dataReport.stopPublish({});
} catch (error) {}
;
if (window.zby_sdk_init_params.isTurnPush) {
zbyAVSDK.turnPush('stop');
}
;
if (!idx) {
channelClient.sendRemoveStream(window.zby_sdk_init_params);
}
},
initPullFlow: async function initPullFlow(args) {
defaultApi$1.writeLog("sdk action : initPullFlow ,".concat(JSON.stringify(args)));
var streamId = args.streamId || generateStreamId(args.userId, args.groupId);
var mute = args.mute,
audioOnly = args.audioOnly;
var streamType = 'none';
if (mute && audioOnly) {
streamType = 'none';
} else if (mute && !audioOnly) {
streamType = 'video';
} else if (!mute && audioOnly) {
streamType = 'audio';
} else {
streamType = 'both';
}
;
var result = zbyAVSDK.initPullFlow(_objectSpread({}, args, {
streamId: streamId
})); // defaultApi.writeLog(`sdk action : initPullFlow——result ,${JSON.stringify(result)}`);
try {
dataReport$2.startPull({
pull_uid: args.userId || util.getUidByStreamId(streamId),
pull_streamid: streamId,
stream_type: streamType
});
} catch (e) {}
;
var _ref2 = await result.videoSrc,
videoSrc = _ref2.videoSrc,
playerId = _ref2.playerId;
defaultApi$1.writeLog("sdk initPullFlow ".concat(JSON.stringify(args), ", streamId : ").concat(streamId, ", result :").concat(result.sdk_type, ": ").concat(videoSrc, " type:").concat(streamType, " playerId:").concat(playerId));
if (args.needPlayerId) {
return _objectSpread({
videoSrc: videoSrc,
playerId: playerId,
streamId: streamId
}, args);
}
return videoSrc;
},
startPullFlow: async function startPullFlow(userId, groupId) {
if (typeof userId !== 'number' && typeof userId !== 'string') {
defaultApi$1.writeLog("sdk action : startPullFlow ,userId : ".concat(JSON.stringify(userId), ", param error"));
return;
} else {
defaultApi$1.writeLog("sdk action : startPullFlow ,userId : ".concat(JSON.stringify(userId), ", begin"));
}
var streamId = generateStreamId(userId, groupId);
await zbyAVSDK.startPullFlow(streamId); // userAndDeviceStatusInfo.ignoreList.delete(userId)
noticeStreamStatus(userId, 'stream_recover');
defaultApi$1.writeLog("sdk action : startPullFlow \uFF0CuserId ".concat(userId, ", notice: stream_recover"));
},
stopPullFlow: async function stopPullFlow(userId, groupId, recovery, streamid) {
// const {userId, groupId, recovery, streamid} = args;
if (typeof userId !== 'number' && typeof userId !== 'string') {
defaultApi$1.writeLog("sdk action : stopPullFlow ,userId : ".concat(userId, ", groupId: ").concat(groupId, ", param error"));
return;
} else {
defaultApi$1.writeLog("sdk action : stopPullFlow ,userId : ".concat(userId, ", groupId: ").concat(groupId, ", begin"));
}
var streamId = streamid || generateStreamId(userId, groupId);
await zbyAVSDK.stopPullFlow(streamId, recovery);
try {
dataReport$2.stopPull({
pull_uid: userId,
pull_streamid: streamId
});
} catch (e) {}
;
noticeStreamStatus(userId, 'stream_stopped');
defaultApi$1.writeLog("sdk action : stopPullFlow ,userId : ".concat(userId, ", groupId: ").concat(groupId, ", notice: stream_stopped"));
},
/**
* @function 暂停拉所有的流
* @return Promise | void
*/
stopAllPullFlow: async function stopAllPullFlow() {
defaultApi$1.writeLog('sdk action : stopAllPullFlow begin');
await zbyAVSDK.stopAllPullFlow();
defaultApi$1.writeLog('sdk action : stopAllPullFlow end');
},
playDestroy: async function playDestroy(userId, groupId) {
if (typeof userId !== 'number' && typeof userId !== 'string') {
defaultApi$1.writeLog("sdk action : playDestroy ,userId : ".concat(userId, ", groupId: ").concat(groupId, ", param error"));
return;
} else {
defaultApi$1.writeLog("sdk action : playDestroy ,userId : ".concat(userId, ", groupId: ").concat(groupId, ", begin"));
}
var streamId = generateStreamId(userId, groupId);
await zbyAVSDK.playDestroy(streamId);
noticeStreamStatus(userId, 'stream_destroy');
defaultApi$1.writeLog("sdk action : playDestroy ,userId : ".concat(userId, ", groupId: ").concat(groupId, ", notice: stream_destroy"));
},
changePullFlow: async function changePullFlow(args) {
defaultApi$1.writeLog("sdk action : changePullFlow ,".concat(JSON.stringify(args)));
var streamId = generateStreamId(args.userId, args.groupId);
var toStreamId = generateStreamId(args.toUserId, args.toGroupId);
var result = zbyAVSDK.changePullFlow({
toDomId: args.toDomId,
streamId: streamId,
toStreamId: toStreamId
});
var _ref3 = await result,
videoSrc = _ref3.videoSrc,
playerId = _ref3.playerId;
defaultApi$1.writeLog("sdk changePullFlow ".concat(JSON.stringify(args), ", streamId : ").concat(streamId, ", toStreamId : ").concat(toStreamId, ", result :").concat(result.sdk_type, ": ").concat(videoSrc));
if (args.needPlayerId) {
return {
videoSrc: videoSrc,
playerId: playerId
};
}
return videoSrc;
},
getSpeakerDeviceList: async function getSpeakerDeviceList() {
defaultApi$1.writeLog('sdk action : getSpeakerDeviceList');
return await zbyAVSDK.getSpeakerDeviceList();
},
setSpeakerDevice: async function setSpeakerDevice(deviceId) {
defaultApi$1.writeLog("sdk action : setSpeakerDevice deviceId:".concat(deviceId));
await zbyAVSDK.setSpeakerDevice(deviceId, 'client');
},
getSpeakerDevice: async function getSpeakerDevice() {
defaultApi$1.writeLog('sdk action : getSpeakerDevice');
return zbyAVSDK.getSpeakerDevice();
},
getSpeakerVolume: async function getSpeakerVolume() {
defaultApi$1.writeLog('sdk action : getSpeakerVolume ');
return zbyAVSDK.getSpeakerVolume();
},
setSpeakerVolume: async function setSpeakerVolume(volume) {
await zbyAVSDK.setSpeakerVolume(volume);
defaultApi$1.writeLog("sdk action : setSpeakerVolume ".concat(volume));
},
setSpeakerMute: async function setSpeakerMute(mute) {
await zbyAVSDK.setSpeakerMute(mute);
try {
dataReport$2.deviceChange({
device_type: 3,
code: mute ? 0 : 1,
device_name: window.zbyAVSDK_device_checker_init.speaker.name,
device_id: window.zbyAVSDK_device_checker_init.speaker.use
});
} catch (e) {}
;
defaultApi$1.writeLog("sdk action : setSpeakerMute ".concat(mute));
},
openOrCloseCameraAndMicrophone: async function openOrCloseCameraAndMicrophone(type) {
await zbyAVSDK.openOrCloseCameraAndMicrophone(type);
defaultApi$1.writeLog("sdk action : openOrCloseCameraAndMicrophone ".concat(type));
},
getAppVolume: async function getAppVolume() {
var volume = await zbyAVSDK.getAppVolume();
defaultApi$1.writeLog("sdk action : getAppVolume ".concat(volume));
return volume;
},
setAppVolume: async function setAppVolume(volume) {
await zbyAVSDK.setAppVolume(volume);
defaultApi$1.writeLog("sdk action : setAppVolume ".concat(volume));
},
setAppMute: async function setAppMute(mute) {
await zbyAVSDK.setAppMute(mute);
defaultApi$1.writeLog("sdk action : setAppMute ".concat(mute));
},
getMicrophoneDeviceList: async function getMicrophoneDeviceList() {
var microPhoneList = await zbyAVSDK.getMicrophoneDeviceList();
defaultApi$1.writeLog("sdk action : getMicrophoneDeviceList ".concat(JSON.stringify(microPhoneList)));
return microPhoneList;
},
setMicrophoneDevice: async function setMicrophoneDevice(deviceId) {
await zbyAVSDK.setMicrophoneDevice(deviceId, 'client');
defaultApi$1.writeLog("sdk action : setMicrophoneDevice ".concat(deviceId));
},
openOrCloseMicrophone: async function openOrCloseMicrophone(operation) {
defaultApi$1.writeLog("sdk action : openOrCloseMicrophone ".concat(operation, " --start"));
userAndDeviceStatusInfo.microPhone = operation; // 标记业务操作,不做为设备状态参考
await zbyAVSDK.openOrCloseMicrophone(operation);
try {
dataReport$2.deviceChange({
device_type: 2,
code: operation ? 1 : 0,
device_name: window.zbyAVSDK_device_checker_init.microphone.name,
device_id: window.zbyAVSDK_device_checker_init.microphone.use
});
} catch (e) {}
; //记录麦克风状态,用作推流类型上报,是否推声音
this.deviceStatus.microphone = operation;
sdk_status === 1 && sendDeviceStatus('audio', operation);
defaultApi$1.writeLog("sdk action : openOrCloseMicrophone ".concat(operation, " --end"));
},
//听或不听指定用户的声音
setAudioMute: async function setAudioMute(userId, operation, groupId, streamid) {
var streamId = streamid || generateStreamId(userId, groupId);
defaultApi$1.writeLog("sdk action : setAudioMute userId ".concat(userId, ", operation ").concat(operation, ", groupId ").concat(groupId, ", streamid ").concat(streamid));
await zbyAVSDK.setAudioMute(streamId, operation);
},
/**
* @function 是否拉取音频流--通过播放器id控制
* @param operation:Boolean,必选,true | false
* @param playerId:Number,必选,播放器id
* @return Promise | void
*/
pullAudioFlow: async function pullAudioFlow(playerId, operation, streamid) {
defaultApi$1.writeLog("sdk action : pullAudioFlow --start playerId ".concat(playerId, ", ").concat(operation, ", streamid ").concat(streamid));
var streamId = streamid ? streamid : undefined;
await zbyAVSDK.pullAudioFlow(playerId, operation, streamId);
defaultApi$1.writeLog("sdk action : pullAudioFlow playerId ".concat(playerId, ", ").concat(operation));
},
getMicrophoneVolume: async function getMicrophoneVolume() {
defaultApi$1.writeLog('sdk action : getMicrophoneVolume');
return await zbyAVSDK.getMicrophoneVolume();
},
setMicrophoneVolume: async function setMicrophoneVolume(volume, mute) {
await zbyAVSDK.setMicrophoneVolume(volume, mute);
defaultApi$1.writeLog("sdk action : setMicrophoneVolume ".concat(volume, " ").concat(mute));
},
setMicrophoneMute: async function setMicrophoneMute(mute) {
await zbyAVSDK.setMicrophoneMute(mute);
defaultApi$1.writeLog("sdk action : setMicrophoneMute ".concat(mute));
},
leaveRoom: async function leaveRoom(type) {
//未初始化完成,无须卸载
// if (sdk_status === -1) {
// zbysdk.notice({
// type: 'error',
// data: {
// message: 'should not leaveRoom before init finished'
// }
// });
// return;
// }
defaultApi$1.writeLog('sdk action : leaveRoom'); // if (window.zby_sdk_init_params.role === 'student') {
channelClient.sendRemoveStream(window.zby_sdk_init_params); // }
channelClient.sendLeave(window.zby_sdk_init_params);
channelClient.leaveRoom(); // 重置设备检测初始化状态
deviceCheckerInitStatus = -1;
await zbyAVSDK.leaveRoom(type);
windowObjArr[0].concat(windowObjArr[1]).forEach(function (item) {
localStorage.removeItem(item);
});
sdk_status = -1;
try {
dataReport$2.leaveRoom();
} catch (e) {}
;
defaultApi$1.writeLog('sdk leaveRoom end ,sdk status : uninstall_finished'); //通知业务层,卸载完成
NOTICE.sdkStatus({
sdk_type: window.zbyAVSDK_init_sdk_type,
status: 'uninstall_finished'
});
window.zbyAVSDK_device_checker_init = null;
},
//崩溃后的销毁引擎,反初始化
deinit: async function deinit() {
defaultApi$1.writeLog('sdk action : deinit');
await zbyAVSDK.deinit();
},
/**
* @function 转推,录课
* @param type:String 动作类型,必选,'start' | 'stop' | 'pause' | 'resume'
* @return Promise | void
*/
turnPush: async function turnPush(cmd) {
await zbyAVSDK.turnPush(cmd);
defaultApi$1.writeLog("sdk action : turnPush ".concat(cmd));
},
openMicVolumeCb: function openMicVolumeCb(open) {
zbyAVSDK.openMicVolumeCb(open);
defaultApi$1.writeLog("sdk action : openMicVolumeCb ".concat(open));
},
// 开始混流--已废弃
startMixtStream: function startMixtStream(args) {
zbyAVSDK.startMixtStream(args);
defaultApi$1.writeLog("sdk action : startMixtStream, args: ".concat(JSON.stringify(args)));
},
// 结束混流--已废弃
stopMixtStream: function stopMixtStream(args) {
zbyAVSDK.stopMixtStream(args);
defaultApi$1.writeLog("sdk action : stopMixtStream, args: ".concat(JSON.stringify(args)));
},
mixedstuVideo: function mixedstuVideo(stuArray) {
zbyAVSDK.mixedstuVideo(stuArray);
defaultApi$1.writeLog("sdk action : mixedstuVideo, stuArray: ".concat(stuArray));
},
/**
* @function 单路流录制
* @param args:Object
* {
* type: String,必选,'start' | 'stop'
* groupId: String, 可选,分组id
* userId: String, 可选,用户id
* }
*/
singleRecord: function singleRecord(args) {
args.streamId = this.getStreamInfo(args.userId, args.groupId).streamId;
zbyAVSDK.singleRecord(args);
defaultApi$1.writeLog("sdk action : singleRecord, args: ".concat(JSON.stringify(args)));
},
//开启拉流音量监听
startSoundLevelMonitor: function startSoundLevelMonitor() {
defaultApi$1.writeLog('sdk action : startSoundLevelMonitor --start');
zbyAVSDK.startSoundLevelMonitor();
defaultApi$1.writeLog('sdk action : startSoundLevelMonitor --end');
},
/**
* @function 多路转推
* @param args:Object
* {
* type: String,必选,'start' | 'stop'
* groupId: String, 可选,分组id
* userId: String, 可选,用户id
* }
*/
recordPublish: async function recordPublish(args) {
args.streamId = this.getStreamInfo(args.userId, args.groupId).streamId;
zbyAVSDK.recordPublishTarget(args);
defaultApi$1.writeLog("sdk action : recordPublish, args: ".concat(JSON.stringify(args)));
},
/**
* @function 获取视频快照截图所需的 id 数据
* @param userId:String 用户 ID
* @param roomId:String 房间 ID
*/
getStreamInfo: function getStreamInfo(userId, roomId) {
var streamId = generateStreamId(userId, roomId);
defaultApi$1.writeLog("sdk action :getStreamInfo --start, userId : ".concat(userId, ", roomId: ").concat(roomId));
if (!userId || userId == window.zby_sdk_init_params.userId) {
switch (window.current_sdk_type) {
case 'rtc':
try {
dataReport$2.takeSnapShot({
snapshootId: streamId
});
} catch (e) {}
return {
streamId: streamId,
snapshootId: streamId
};
break;
case 'zego':
try {
dataReport$2.takeSnapShot({
getStreamInfoZego: streamId,
snapshootId: -1
});
} catch (e) {}
return {
streamId: streamId,
snapshootId: -1
};
break;
case 'nertc':
case 'volcrtc':
case 'talrtc':
try {
dataReport$2.takeSnapShot({
snapshootId: streamId
});
} catch (e) {}
return {
streamId: streamId,
snapshootId: -2
};
case 'trtc':
try {
dataReport$2.takeSnapShot({
snapshootId: streamId
});
} catch (e) {}
return {
streamId: streamId,
snapshootId: -3
};
default:
break;
}
}
var snapshootId = zbyAVSDK.getSnapshootId(streamId);
defaultApi$1.writeLog("sdk action :getStreamInfo, userId : ".concat(userId, ", snapshootId: ").concat(snapshootId));
return {
streamId: streamId,
snapshootId: snapshootId
};
},
getAllChannelIndex: function getAllChannelIndex() {
var channelMap = zbyAVSDK.getAllChannelIndex();
return channelMap;
},
/**
* @function 记录日志
* @param productName:String 产品名称,必选
* @param type:String 日志类型,可选,default : 'info', 'debug' | 'info' | 'warnning' | 'error' | 'critical',
* @param content:String | Object 日志记录主要内容
*/
log: function log(productName, content) {
var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'info';
if (!productName) {
defaultApi$1.writeLog('sdk action :log methods invoked error, no productName');
return;
}
defaultApi$1.writeLog(content, productName, type);
},
/**
* @function 设置摄像头参数
* @param {object} args
* @param {number} args.width:Number 分辨率宽,必选,推荐 1280
* @param {number} args.height:Number 分辨率高,必选,推荐 720
* @param {number} args.frameRate:Number 帧率,必选,推荐 15
* @param {number} idx 采集器索引,必选,主流0,辅流1
* @param {string} streamId 流id,必选
* @return Promise | void
*/
setCameraParams: function setCameraParams(args, idx, streamId) {
defaultApi$1.writeLog("sdk action: setCameraParam, args: ".concat(JSON.stringify(args)));
return zbyAVSDK.setCameraParams(args, idx, streamId);
},
setEncodeParams: function setEncodeParams(args, idx, streamId) {
defaultApi$1.writeLog("sdk action: setEncodeParams, args: ".concat(JSON.stringify(args), ", ").concat(idx));
return zbyAVSDK.setEncodeParams(args, idx, streamId);
},
setBitRate: function setBitRate(bitrate, idx, streamId) {
defaultApi$1.writeLog("sdk action: setBitRate, bitrate: ".concat(bitrate, " ").concat(idx));
return zbyAVSDK.setBitRate(bitrate, idx, streamId);
},
/**
* @function 本地视频录制
* @param type 开始/结束
* @param path 录制路径
* @return Promise | void
*/
localRecordVideo: function localRecordVideo(type, path) {
defaultApi$1.writeLog("sdk action: localRecordVideo, type: ".concat(type, ", path ").concat(path));
return zbyAVSDK.localRecordVideo(type, path);
},
/**
* @function 本地音频录制
* @param type 开始/结束
* @param path 录制路径
* @return Promise | void
*/
localRecordAudio: function localRecordAudio(type, path) {
defaultApi$1.writeLog("sdk action: localRecordAudio, type: ".concat(type, ", path ").concat(path));
return zbyAVSDK.localRecordAudio(type, path);
},
/**
* @function 开始连麦
* @param mode:number 采集器默认, 默认0=站立 1=坐立
* @return Promise | void
*/
teacherStartLinkMic: async function teacherStartLinkMic(mode) {
defaultApi$1.writeLog("sdk action: teacherStartLinkMic, mode: ".concat(mode));
try {
dataReport$2.avConnect({
sdk_type: window.zbyAVSDK_init_sdk_type,
type: 1,
mode: mode
});
} catch (e) {}
;
await zbyAVSDK.teacherStartLinkMic(mode);
if (mode === 0) {
await zbyAVSDK.startPreview();
}
return this.startPushFlow();
},
/**
* @function 结束连麦
* @param mode:number 采集器默认, 默认0=站立 1=坐立
* @return Promise | void
*/
teacherStopLinkMic: async function teacherStopLinkMic(mode) {
defaultApi$1.writeLog("sdk action: teacherStopLinkMic, mode: ".concat(mode));
try {
dataReport$2.avConnect({
sdk_type: window.zbyAVSDK_init_sdk_type,
type: 0,
mode: mode
});
} catch (e) {}
;
await zbyAVSDK.teacherStopLinkMic(mode);
if (mode === 0) {
await zbyAVSDK.stopPreview();
}
return this.stopPushFlow();
},
getSdkStatus: function getSdkStatus() {
return sdk_status;
},
// 获取截屏窗位置
//设置采集扬声器声音
setSpeakerCapture: function setSpeakerCapture(deviceId, speaker) {
defaultApi$1.writeLog("sdk action: setSpeakerCapture, deviceId: ".concat(deviceId, ", speaker: ").concat(speaker));
return zbyAVSDK.setSpeakerCapture(deviceId, speaker);
},
/**
* @function 设置混流和背景色
* @param { number } type 0=不拼接/1=截屏窗+背景图/2=截屏窗+背景图+头像
* @param { number } id 需要混合的采集器id
* @param { object } rgb
* @param { number } rgb.r
* @param { number } rgb.g
* @param { number } rgb.b
* @return: Promise
*/
setMixStream: function setMixStream(type, id, rgb) {
defaultApi$1.writeLog("sdk action: setMixStream, type: ".concat(type, ", id: ").concat(id, ", rgb: ").concat(JSON.stringify(rgb)));
return zbyAVSDK.setMixStream(type, id, rgb);
},
/**
* @function 采集器截图
* @param { string } fileName 文件名,需要后缀名。例如:333.jpg
* @return: Promise
*/
captureSnapShot: function captureSnapShot(fileName) {
defaultApi$1.writeLog("sdk action: captureSnapShot, fileName: ".concat(fileName));
return zbyAVSDK.captureSnapShot(fileName);
},
/**
* @function 播放器截图
* @param { number } id 播放器id
* @param { string } fileName 文件名,需要后缀名。例如:333.jpg
* @return: Promise
*/
playerSnapShot: function playerSnapShot(id, fileName) {
defaultApi$1.writeLog("sdk action: playerSnapShot, id: ".concat(id, " fileName: ").concat(fileName));
return zbyAVSDK.playerSnapShot(id, fileName);
},
/**
* @function 保存图片至桌面
* @param { string } buf //base64编码图片数据
* @param { string } fileName //图片文件名(带格式后缀)
* @return: Promise
*/
saveImgToDesktop: function saveImgToDesktop(buf, fileName) {
defaultApi$1.writeLog("sdk action: saveImgToDesktop, buf: ".concat(buf, " fileName: ").concat(fileName));
return toolBaseApi.saveImgToDesktop(buf, fileName);
},
//获取设备状态
getDevicePermissions: async function getDevicePermissions(devicename, devicetype) {
defaultApi$1.writeLog("sdk action : getDevicePermissions devicename: ".concat(devicename, " devicetype: ").concat(devicetype));
try {
var res = await getDevicePermissionsFun(devicename, devicetype);
return res;
} catch (error) {}
;
return 'error';
},
//打开摄像头&麦克风权限(需要关端重启)
setMediaPermission: async function setMediaPermission(caremaPermission, microPhonePermission) {
defaultApi$1.writeLog("sdk action : setMediaPermission caremaPermission: ".concat(caremaPermission, " microPhonePermission: ").concat(microPhonePermission));
return setMediaPermissionFun(caremaPermission, microPhonePermission);
},
/**
* @function 设置预览镜像状态
* @param { boolean } type true=开启 false=关闭
* @return: Promise
*/
setMirrorStatus: function setMirrorStatus(type) {
defaultApi$1.writeLog("sdk action: setMirrorStatus, type: ".concat(type));
if (type !== undefined && type !== null) {
mirrorStatus = type;
}
return zbyAVSDK.setMirrorStatus(type);
},
/**
* @function 设置拉流镜像状态
* @param { boolean } type true=开启 false=关闭
* @return: Promise
*/
setPlayViewMirror: function setPlayViewMirror(type, id) {
defaultApi$1.writeLog("sdk action: setPlayViewMirror, type: ".concat(type, ", id: ").concat(id));
return zbyAVSDK.setPlayViewMirror(type, id);
},
/**
* @function 设置推流镜像状态
* @param { boolean } id 采集器Id
* @param { boolean } mode 1=开启 0=关闭
* @return: Promise
*/
setPushViewMirror: function setPushViewMirror(mode) {
defaultApi$1.writeLog("sdk action: setPushViewMirror, mode: ".concat(mode));
if (mode !== undefined && mode !== null) {
mirrorStatus = mode;
}
return zbyAVSDK.setPushViewMirror(mode);
},
/**
* @function 开启美颜
* @return: Promise
*/
startSenseMe: function startSenseMe() {
defaultApi$1.writeLog('sdk action: startSenseMe');
return zbyAVSDK.startSenseMe();
},
/**
* @function 设置美颜参数
* * @param { number } type //美颜类型,1、红润强度,3、磨皮强度,4、美白强度,5、大眼,6、瘦脸,7、小脸,8、对比度强度,9、饱和度强度
* * @param { number } value //美颜数值,有效值范围0~100
* @return: Promise
*/
setBeautifyParam: function setBeautifyParam(type, value) {
defaultApi$1.writeLog("sdk action: setBeautifyParam, type: ".concat(type, ",value: ").concat(value));
return zbyAVSDK.setBeautifyParam(type, value);
},
/**
*
* @param {'UseLoopbackDefault' | 'UseDefaultDevice'} key
* @param {'enable'} value
* @returns {Promise<void> | undefined}
*/
setEngineConfig: function setEngineConfig(key, value) {
defaultApi$1.writeLog("sdk action: setEngineConfig, key: ".concat(key, ",value: ").concat(value));
return zbyAVSDK.setEngineConfig(key, value);
},
/**
* @function 关闭美颜
* @return: Promise
*/
endSenseMe: function endSenseMe() {
defaultApi$1.writeLog('sdk action: endSenseMe');
return zbyAVSDK.endSenseMe();
},
/**
* @function zego40路拉流混音接口
* @param { number } mixMode //混流模式 0=关闭混流 1=开启混流
* @param { array } userIdArr //要突出声音的userId的数组集合
* @return: Promise
*/
setAudioMixMode: function setAudioMixMode(mixMode, userIdArr) {
var streamIdArr = [];
if (userIdArr.length > 0) {
userIdArr.forEach(function (item) {
streamIdArr.push(generateStreamId(item));
});
}
defaultApi$1.writeLog("sdk action: setAudioMixMode mixMode:".concat(mixMode, " userIdArr:").concat(userIdArr, " streamIdArr:").concat(streamIdArr));
return zbyAVSDK.setAudioMixMode(mixMode, streamIdArr);
},
//获取TalMedia.dll版本号&&获取zegoAvkit.dll版本号
getSDKVersion: function getSDKVersion() {
defaultApi$1.writeLog('sdk action: getSDKVersion');
return zbyAVSDK.getSDKVersion();
},
//获取TalMedia内核版本号,zego同getSDKVersion
getSDKCoreVersion: function getSDKCoreVersion() {
defaultApi$1.writeLog('sdk action: getSDKVersion');
return zbyAVSDK.getSDKCoreVersion();
},
//获取摄像头所支持的分辨率
getCameraSupportedResolution: function getCameraSupportedResolution(deviceId) {
defaultApi$1.writeLog("sdk action: getCameraSupportedResolution deviceId: ".concat(deviceId));
return zbyAVSDK.getCameraSupportedResolution(deviceId);
},
//开启rtc同屏
startMultiScreen: function startMultiScreen() {
defaultApi$1.writeLog('sdk action: startMultiScreen');
return zbyAVSDK.startMultiScreen();
},
//开启高光时刻
startHighlight: function startHighlight(enable) {
defaultApi$1.writeLog("sdk action: startHighlight enable:".concat(enable));
return zbyAVSDK.enableHighlight(enable);
},
//开启外部音频采集
startAudioExCapture: function startAudioExCapture() {
defaultApi$1.writeLog('sdk action: startAudioExCapture');
return zbyAVSDK.startAudioExCapture();
},
/**
* 第四路流类型设置
* @param {number} type 6: 视频:主流 音频:麦克风+扬声器 7: 外部音频源,外部视频源,数据来源player
* @param {number} idx
* @returns
*/
setFourthStreamType: function setFourthStreamType(type, idx, streamId) {
defaultApi$1.writeLog("sdk action: setFourthStreamType type:".concat(type, " idx:").concat(idx, ", streamId: ").concat(streamId));
return zbyAVSDK.setFourthStreamType(type, idx, streamId);
},
//RTC同屏 辅助通道音频类型
setAUXAudioType: function setAUXAudioType(type) {
defaultApi$1.writeLog('sdk action: setAUXAudioType');
return zbyAVSDK.setAUXAudioType(type);
},
/**
* RTC同屏 录制通道音频类型
* @param {number} type
* @param {string} streamId
* @returns
*/
setThirdAudioType: function setThirdAudioType(type, streamId) {
defaultApi$1.writeLog('sdk action: setThirdAudioType');
return zbyAVSDK.setThirdAudioType(type, streamId);
},
//超级体验课录制通道音频类型
/**
* @param {number} type default 32
* @returns
*/
setThirdAudioType2: function setThirdAudioType2() {
var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 32;
defaultApi$1.writeLog('sdk action: setThirdAudioType2');
return zbyAVSDK.setThirdAudioType2(type);
},
setVideoSource: function setVideoSource(idx, type) {
defaultApi$1.writeLog("sdk action: setVideoSource idx:".concat(idx, " type:").concat(type));
return zbyAVSDK.setVideoSource(idx, type);
},
//发送sei
sendMediaSideInfo: function sendMediaSideInfo(info) {
defaultApi$1.writeLog('sdk action: sendMediaSideInfo');
return zbyAVSDK.sendMediaSideInfo(info);
},
/**
* 设置录制路径
* @param {number} idx
* @param {string} path 需要unicode转码
* @returns
*/
setRecordPath: async function setRecordPath(idx, path) {
defaultApi$1.writeLog("sdk action: setRecordPath idx:".concat(idx, " path:").concat(path));
recordPathMap[idx] = path;
},
/**
* 获取录制路径
* @param {number} idx
* @returns {Promise<{record_path: string}>}
*/
getRecordPath: async function getRecordPath(idx) {
defaultApi$1.writeLog("sdk action: getRecordPath idx:".concat(idx));
return recordPathMap[idx];
},
/**
* 获取桌面路径
* @returns {Promise<{desktop_path: string}>}
*/
getDesktopPath: async function getDesktopPath() {
defaultApi$1.writeLog('sdk action: getDesktopPath');
return zbyAVSDK.getDesktopPath();
},
/**
* @function 开始录制
* @param {1 | 2} 录制文件类型 可选。1:flv 2:mp4 默认mp4
* @param {string} 录制文件名称 可选
* @param {number} 0:主流(摄像头、麦克风) 1:辅流(屏幕流) 2:rtmp 默认录制通道
* @returns {Promise<void>}
*/
startCaptureRecord: async function startCaptureRecord() {
var fileType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;
var fileName = arguments.length > 1 ? arguments[1] : undefined;
var idx = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 2;
defaultApi$1.writeLog("sdk action: startCaptureRecord fileType:".concat(fileType, " fileName:").concat(fileName, " idx:").concat(idx)); // 格式化fileType
fileType = Number(fileType);
if (fileType !== 1 && fileType !== 2) {
fileType = 2;
} // 格式化idx
if (typeof idx !== 'number') {
defaultApi$1.writeLog("sdk action: startCaptureRecord idx:".concat(idx, " error"), null, 'error');
throw new Error('idx must be a number');
}
return zbyAVSDK.startCaptureRecord(fileName, fileType, idx, recordPathMap[idx]);
},
/**
* @function 结束录制
* @param {number} 录制推流通道 idx 必选
* @returns {Promise<void>}
*/
stopCaptureRecord: async function stopCaptureRecord() {
var idx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;
defaultApi$1.writeLog("sdk action: stopCaptureRecord idx:".concat(idx));
return zbyAVSDK.stopCaptureRecord(idx);
},
/**
* 获取麦克风响度 返回值范围[-28.0, -18.0]
* @returns {Promise<number>}
*/
getMicrophoneLoudness: function getMicrophoneLoudness() {
defaultApi$1.writeLog('sdk action: getMicrophoneLoudness');
return zbyAVSDK.getMicrophoneLoudness();
},
/**
* @function 获取当前扬声器id
* @returns {Promise<string | null>}
*/
getCurrentSpeakerId: function getCurrentSpeakerId() {
defaultApi$1.writeLog('sdk action: getCurrentSpeakerId');
return zbyAVSDK.getCurrentSpeakerId();
},
/**
* @function 获取当前麦克风id
* @returns {Promise<string | null>}
*/
getCurrentMicrophoneId: function getCurrentMicrophoneId() {
defaultApi$1.writeLog('sdk action: getCurrentMicrophoneId');
return zbyAVSDK.getCurrentMicrophoneId();
},
/**
* @function 获取当前摄像头id
* @returns {Promise<string | null>}
*/
getCurrentCameraId: function getCurrentCameraId() {
defaultApi$1.writeLog('sdk action: getCurrentCameraId');
return zbyAVSDK.getCurrentCameraId();
},
/**
* 开启 AI 功能
*
* @param {Object} config AI 功能配置参数对象
* @param {string} config.mTaskType 任务类型 - ASR:语音识别, VOICE_CHAT:AI音频通话, AVATAR_CHAT: 数字人通话, VISION_CHAT: 视觉理解
* @param {string} config.mRobotId 当前user 对应的机器人id,string类型的整数
* @param {string} config.extenParams 业务额外数据,JSON格式的字符串
* @return {Promise<string>} taskid 非""代表调用成功,""代表调用失败
*/
startAigc: function startAigc(config) {
defaultApi$1.writeLog("sdk action: startAigc config:".concat(JSON.stringify(config))); //这里是由于xbase判断是int,所以需要转
config.mRobotId = Number(config.mRobotId);
return zbyAVSDK.startAigc(config);
},
/**
*
* @returns {Promise<void>}
*/
stopAigc: function stopAigc() {
defaultApi$1.writeLog('sdk action: stopAigc');
return zbyAVSDK.stopAigc();
},
/**
* 发送 AI 消息
*
* @param {Object} messageInfo AI 消息信息对象
* @param {string} messageInfo.custom 透传业务参数
* @param {string} messageInfo.prompt 调用大模型的用户提示词
* @param {string} messageInfo.type type: 1 update_system_prompt; 3 play_content; 4 prompt_model
* @return {Promise<number>} 0 代表调用成功,其他代表调用失败
*/
sendAigcMessage: function sendAigcMessage(messageInfo) {
defaultApi$1.writeLog("sdk action: sendAigcMessage messageInfo:".concat(JSON.stringify(messageInfo)));
if (messageInfo && typeof messageInfo.type === 'string') {
var typeKey = messageInfo.type.trim();
var typeMap = {
update_system_prompt: 1,
interrupt_speaking: 2,
play_content: 3,
prompt_model: 4,
submit_audio: 5,
// 提交语音
passthrough_signal: 6 // 业务信令透传
};
var normalized = typeKey.toLowerCase();
if (typeMap[normalized] !== undefined) {
messageInfo.type = typeMap[normalized];
}
}
return zbyAVSDK.sendAigcMessage(messageInfo);
},
// 开关麦克风录制数据回调
enableMicRecordDataCallback: function enableMicRecordDataCallback() {
var enable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var sampleRate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 48000;
var channels = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
defaultApi$1.writeLog("sdk action: enableMicRecordDataCallback enable:".concat(enable, " sampleRate:").concat(sampleRate, " channels:").concat(channels));
return zbyAVSDK.enableMicRecordDataCallback(enable, sampleRate, channels);
},
/**
* @function 是否推声音,为了处理音频采集录制时,收到关麦导致的无法收音
* @param operation:Boolean 操作类型,false -> 关闭,true -> 打开,必选
* @return Promise | void
*/
setPushAudioMute: function setPushAudioMute(operation) {
defaultApi$1.writeLog("sdk action: setPushAudioMute operation:".concat(operation));
return zbyAVSDK.setPushAudioMute(operation);
},
/**
* @function 切换sdk类型
* @return: Promise
*/
// async changeSdkType(institutionId, sdkName, roomId) {
// defaultApi.writeLog(`sdk action: changeSdkType, institutionId: ${institutionId}, sdkName: ${sdkName}, roomId: ${roomId}`);
// let code;
// let param = {
// institutionId,
// sdkName,
// roomId,
// workCode:0
// };
// let res = await changeSdkInRoom(param);
// defaultApi.writeLog(`sdk action: changeSdkType, sdk切换${res.code == 0 ? '成功' : '失败'}, ${JSON.stringify(res)}`);
// code = res.code == 0 ? 0 : 1; //0切换成功 ,1切换失败
// return code ;
// },
changeSdkType: async function changeSdkType(institutionId, sdkName, teacherId, liveId) {
defaultApi$1.writeLog("sdk action: changeSdkType, institutionId: ".concat(institutionId, ", sdkName: ").concat(sdkName, ", teacherId: ").concat(teacherId, ", liveId: ").concat(liveId));
var code;
var param = {
institutionId: institutionId,
sdkName: sdkName,
lectureStreamId: "lecturer_".concat(teacherId, "_").concat(liveId),
workCode: 0
};
var res = await changeSdkInRoom(param);
defaultApi$1.writeLog("sdk action: changeSdkType, sdk\u5207\u6362".concat(res.code == 0 ? '成功' : '失败', ", ").concat(JSON.stringify(res)));
code = res.code == 0 ? 0 : 1; //0切换成功 ,1切换失败
return code;
},
/**
* 获取主流编码分辨率、帧率、码率
* @returns {{width: number | undefined, height: number | undefined, fps: number | undefined, bitrate: number | undefined}}
*/
getMainStreamResolution: function getMainStreamResolution() {
defaultApi$1.writeLog('sdk action: getMainStreamResolution');
if (!window.zbyAVSDK_init_params || !window.zbyAVSDK_init_sdk_type) {
return {};
}
var config = window.zbyAVSDK_init_params[window.zbyAVSDK_init_sdk_type];
if (!config) {
return {};
}
return {
width: config.encodedResolutionWidth,
height: config.encodedResolutionHeight,
fps: config.encodeCaptureFps,
bitrate: config.encodeBitrate
};
},
/**
* @function 本地截图
* @param {object} params 截图保存路径
* @param {string} params.uiChnIndex 流index
* @param {string} params.pszStreamID 流ID
*/
takeLocalSnapShot: function takeLocalSnapShot() {
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
defaultApi$1.writeLog("sdk action: takeLocalSnapShot, params: ".concat(JSON.stringify(params)));
var streamId = params.pszStreamID,
idx = params.uiChnIndex >> 0;
return zbyAVSDK.takeLocalSnapShot(streamId, idx).then(function (_ref4) {
var code = _ref4.code,
msg = _ref4.msg;
var data = {
data: msg,
result: 1,
// 截图成功
channel_index: idx,
streamId: streamId
};
if (!msg || code !== 0) {
data.data = null;
data.result = 2; // 截图失败
}
defaultApi$1.writeLog("sdk action: takeLocalSnapShot, result: ".concat(data.result));
return data;
});
},
/**
* @function 远端截图
* @param {object} params 截图参数
* @param {string} params.pszStreamID 流ID
*/
takeRemoteSnapShot: function takeRemoteSnapShot() {
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
defaultApi$1.writeLog("sdk action: takeRemoteSnapShot, params: ".concat(JSON.stringify(params)));
var streamId = params.pszStreamID;
return zbyAVSDK.takeRemoteSnapShot(streamId).then(function (_ref5) {
var code = _ref5.code,
msg = _ref5.msg;
var data = {
data: msg,
result: 1,
// 截图成功
streamId: streamId
};
if (!msg || code !== 0) {
data.data = null;
data.result = 2; // 截图失败
}
defaultApi$1.writeLog("sdk action: takeRemoteSnapShot, result: ".concat(data.result));
return data;
});
},
/**
* 设置前后台状态
* @param {boolean} isBackground 是否处于后台
*/
setBackgroundStatus: function setBackgroundStatus$1(isBackground) {
defaultApi$1.writeLog("sdk action: setBackgroundStatus, isBackground: ".concat(isBackground));
return setBackgroundStatus(isBackground);
}
};
window.zbysdk = zbysdk$1;
module.exports = zbysdk$1;